CNN训练时model.fit的validation dataset仅首次生效如何修复
问题修复方案
问题根源
你在model.fit方法中手动指定了validation_steps=50,而你的验证集总样本仅127条,默认训练batch size为32的情况下,整份验证集只需要4步就能完成全部迭代。第一轮验证时已经将所有验证数据消耗完毕,后续轮次没有剩余的验证数据可用于评估,因此不会输出正常的验证结果。
修复方法
- 直接删除
validation_steps=50参数即可。当validation_data传入的是numpy数组而非迭代器类型的数据集时,Keras会自动计算需要的验证步数,无需手动指定,修改后的训练代码如下:
history = model.fit(train_image, train_label, epochs=100, validation_data = (val_image, val_label), verbose=2)
- 如果你需要保留该参数,可将数值调整为小于等于验证集总步数的合理值,例如
validation_steps=4,但更推荐直接删除该参数避免手动计算出错。
额外优化建议
- 当前设置的学习率
lr=0.001对于小样本数据集来说偏高,可考虑调低到1e-4,或者替换为Adam优化器,收敛稳定性会更好。 - 输入图像尺寸设置为255不是2的幂次,适配卷积、池化层的计算效率不如256,可在数据预处理阶段将图像统一resize到256*256,提升训练效率。
内容的提问来源于stack exchange,提问作者엄태선
相关产品推荐
相关产品推荐

