TensorFlow构建MNIST二分类模型遇输入形状不匹配错误求助
解决MNIST二分类模型输入形状不匹配的问题
这个问题我之前也碰到过,原因其实很简单——Keras的flow_from_directory默认会把图像加载成RGB三通道格式,哪怕你的MNIST图像本身是单通道灰度图也一样!这就导致模型期待的(28,28,1)输入和实际传入的(28,28,3)数组不匹配,触发了那个ValueError。
解决方法
只需要在生成器的配置里加上color_mode='grayscale'参数,强制生成器把图像加载为单通道灰度格式即可:
修改你的train_generator和validation_generator代码,新增color_mode参数:
train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='binary', color_mode='grayscale' # 强制加载为单通道灰度图 ) validation_generator = val_datagen.flow_from_directory( validation_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='binary', color_mode='grayscale' # 强制加载为单通道灰度图 )
额外验证(可选)
如果你想确认修改后的输入形状是否正确,可以在训练前打印生成器的输出形状:
print(train_generator[0][0].shape)
正常情况下会输出(512, 28, 28, 1),和你定义的input_shape完全匹配。
补充说明
另外也可以检查一下你的数据集目录里的图像是否真的是单通道灰度图——有时候即使是MNIST的原始图像,如果在保存或转换时被误转成RGB格式,也会出现这种情况。不过加上color_mode='grayscale'会自动把任何图像转成单通道,所以这个参数是解决问题的关键。
内容的提问来源于stack exchange,提问作者Steven Chan
相关产品推荐
相关产品推荐

