本地 d 驱动器运行 CNN 出错 层"sequential"的输入 0 与层不兼容



我试图通过训练一个简单的卷积神经网络(CNN)来捕获图像来运行它。训练模型告诉我captcha号码。但运行model.fit告诉我错误消息ValueError:层"的输入0;顺序的";与层不兼容:预期形状=(无,38321,3),发现形状=(没有,321,38,3)

蟒蛇.py

IMAGEPATH = 'captcha'
dirs = os.listdir(IMAGEPATH)

images=[]
test_images=[]
train_labels=[]
train_images, train_labels = [],[]
test_labels=[]
X=[]
Y=[]
w=38 
h=321 
i=0
for name in dirs:
file_paths = glob.glob(path.join(IMAGEPATH+"/"+name, '*.*'))
for path3 in file_paths:
try:  
img = cv2.imread(path3)
img = cv2.resize(img, (w, h))
im_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
ret, im_res = cv2.threshold(im_rgb,180,255,cv2.THRESH_BINARY)
if img is not None:
images.append(im_res)
test_images.append(im_res)
name=path3.split(os.path.sep)[-1]
getdata=(name.split('.')[-2])
labels=getdata.split('-')[-1]
train_labels.append(labels)
#train_labels.append(i)
i=i+1
except:
print(os.path.join(file_paths,name),"error!")
pass
print(len(images),len(train_labels))
images=np.array(images)
train_labels==np.array(train_labels)
(X_train, X_test, Y_train, Y_test) = train_test_split(images, train_labels, test_size=0.2, random_state=0) 
X_train_normalize=X_train.reshape(X_train.shape).astype("float")/255.0
X_test_normalize=X_test.reshape(X_test.shape).astype("float")/255.0
lb = LabelBinarizer().fit(Y_train)
Y_train_OneHot = lb.transform(Y_train)
Y_test_OneHot = lb.transform(Y_test)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(w,h,3)))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.summary()
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history = model.fit(X_train_normalize,
epochs=10
)

我的本地d免下车保存了24张captcha图片。

路径

captchaA3F0Ateacher-26.jpg
captcha1673A2teacher-24.jpg
captcha1E82F1teacher-25.jpg
captcha33C958teacher-20.jpg
captcha33DC34teacher-17.jpg
captcha3AF35Eteacher-14.jpg
captcha3B1C9Eteacher-12.jpg
captcha4207C9teacher-9.jpg
captcha4B5AC4teacher-21.jpg
captcha4DD685teacher-3.jpg
captcha4E44F0teacher-16.jpg
captcha6BEBFEteacher-11.jpg
captcha6DCE49teacher-15.jpg
captcha6E16E9teacher-4.jpg
captchac8BA540teacher-8.jpg
captcha949BA9teacher-23.jpg
captcha99F671teacher-7.jpg
captchaA1564Dteacher-10.jpg
captchaA4B883teacher-13.jpg
captchaD27153teacher-6.jpg
captchaD36E65teacher-19.jpg
captchaDC602Ateacher-22.jpg
captchaDDE328teacher-18.jpg
captchaDED2FBteacher-2.jpg

错误消息。

显示错误

d:OpecvImagelookthree.py:83: UserWarning: `Model.fit_generator` is deprecated and will be removed in a future version. Please use `Model.fit`, which supports generators.
history = model.fit_generator(X_train_normalize,
Traceback (most recent call last):
File "d:OpecvImagelookthree.py", line 83, in <module>
history = model.fit_generator(X_train_normalize,
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packageskerasenginetraining.py", line 2209, in fit_generator
return self.fit(
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packageskerasutilstraceback_utils.py", line 67, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packagestensorflowpythonframeworkfunc_graph.py", line 1147, in autograph_handler
raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packageskerasenginetraining.py", line 1021, in train_function  *
return step_function(self, iterator)
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packageskerasenginetraining.py", line 1010, in step_function  **
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packageskerasenginetraining.py", line 1000, in run_step  **
outputs = model.train_step(data)
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packageskerasenginetraining.py", line 859, in train_step
y_pred = self(x, training=True)
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packageskerasutilstraceback_utils.py", line 67, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packageskerasengineinput_spec.py", line 264, in assert_input_compatibility
raise ValueError(f'Input {input_index} of layer "{layer_name}" is '
ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 38, 321, 3), found shape=(None, 321, 38, 3)

i将cv2.resize(img, (w, h))修改为cv2.resize(img, (h, w))

在顶部添加密集层
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dense(27))

修改编译和训练模型
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
history = model.fit(X_train, Y_train_OneHot, epochs=10, validation_data=(X_test, Y_test_OneHot))

简单代码

import tensorflow as tf
from sklearn.model_selection import train_test_split
import glob
import numpy as np
import os.path as path
import os
import cv2
from sklearn.preprocessing import LabelBinarizer

IMAGEPATH = 'captcha'
dirs = os.listdir(IMAGEPATH)

images=[]
test_images=[]
train_labels=[]
w=38
h=321
for name in dirs:
file_paths = glob.glob(path.join(IMAGEPATH+"/"+name, '*.*'))
for path3 in file_paths:
try:  
img = cv2.imread(path3)
img = cv2.resize(img, (h, w))
im_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
ret, im_res = cv2.threshold(im_rgb,180,255,cv2.THRESH_BINARY)
if img is not None:
images.append(im_res)
test_images.append(im_res)
name=path3.split(os.path.sep)[-1]
getdata=(name.split('.')[-2])
labels=getdata.split('-')[-1]
getint=int(labels)
train_labels.append(getint)
except:
print(os.path.join(file_paths,name),"error!")
pass
print(len(images),len(train_labels))
images=np.array(images)
train_labels==np.array(train_labels)
(X_train, X_test, Y_train, Y_test) = train_test_split(images, train_labels, test_size=0.2, random_state=0) 
X_train_normalize=X_train.reshape(X_train.shape).astype("float")/255.0
X_test_normalize=X_test.reshape(X_test.shape).astype("float")/255.0
lb = LabelBinarizer().fit(Y_train)
Y_train_OneHot = lb.transform(Y_train)
Y_test_OneHot = lb.transform(Y_test)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(w,h,3)))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))

model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dense(27))
model.summary()
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
history = model.fit(X_train, Y_train_OneHot, epochs=10, validation_data=(X_test, Y_test_OneHot))

相关内容

最新更新