CNN上灰度图像的形状问题



我制作了一个CNN,用于10个类的分类。输入=49000张灰度图片,全部混合(我指的是训练集和验证集(train.csv包含图像列表及其标签,例如:

id,label
0.png,4
1.png,9
2.png,1
3.png,7
4.png,3
5.png,9

这里是CNN的一部分:

traindf = pd.read_csv('train.csv', dtype=str)
datagen = ImageDataGenerator(rescale=1./255, validation_split=0.25, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True)
train_generator = datagen.flow_from_dataframe(dataframe = traindf,
directory='images',
target_size = (28, 28),
color_mode='grayscale',
x_col='id',
y_col='label',
subset='training',
batch_size = 32,
shuffle=True,
class_mode = 'categorical')
valid_generator = datagen.flow_from_dataframe(dataframe = traindf,
directory="images",
target_size=(28,28),
color_mode='grayscale',
x_col="id",
y_col="label",
subset="validation",
batch_size=32,
shuffle=True,
class_mode="categorical")
STEP_SIZE_TRAIN = train_generator.n//train_generator.batch_size
STEP_SIZE_VALID = valid_generator.n//valid_generator.batch_size

拟合方法:

classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
classifier.fit_generator(train_generator,
steps_per_epoch = STEP_SIZE_TRAIN,
epochs = 10,
validation_data = valid_generator,
validation_steps = STEP_SIZE_VALID)

为了清楚起见,我没有显示神经网络的创建,但注意input_shape=(28,28,1(

然后我保存模型:

filepath = './NumChar_model_01'
save_model(classifier, filepath)

在另一个程序中,我想预测一个图像:

loaded_model = load_model(filepath,custom_objects=None, compile=True)
img = img.resize((28, 28))
img = image.img_to_array(img)
img = np.expand_dims(img, axis = 0)
result = loaded_model.predict(img)

我得到了这个错误:

ValueError:层序列的输入0与层不兼容:输入形状的轴-1应具有值1,但接收到的输入具有形状[None,28,28,3]

我知道这是形状的问题,但相信我,我读过所有关于这个的世界话题。。。

我尝试在train_generator和valid_generator上进行整形,但它也给了我一个错误("DataFrameIterator"对象没有属性"整形"(

解决方案:

img由获得

img=ImageGrab.grab((cx,cy,cx+cw,cy+ch((它返回一个RGB图像,该图像引发错误。所以我用将其转换为灰度图像

img=img.convert('L'(它起作用了!

最新更新