我制作了一个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'(它起作用了!