为何训练分类模型时每个epoch结束无法执行验证测试及回调?
问题核心原因
你代码的验证集生成逻辑存在两处配置错误,导致验证集没有有效样本,训练时跳过了验证步骤,自然不会生成val_loss、val_accuracy这类验证指标,所以依赖这些指标的回调全部触发警告。
- 错误1:
validation_datagen初始化时没有设置validation_split参数,但调用flow_from_directory时指定了subset='validation',导致无法生成验证集样本 - 错误2:验证集路径配置矛盾,如果你是从同一份数据集拆分训练/验证集,
validation_generator的路径应该和训练集一致为Image_folder_path,如果你用的是独立验证集目录,就不应该加subset='validation'参数
可行解决方案
方案1:从训练集目录拆分验证集(和你原有逻辑匹配)
- 修正验证集数据生成器的配置,加上和训练集一致的拆分比例:
validation_datagen = ImageDataGenerator(rescale = 1/255.0, validation_split=0.2)
- 把验证生成器的路径替换为和训练集一致的路径:
validation_generator = validation_datagen.flow_from_directory(Image_folder_path, batch_size=batch_size, class_mode='categorical', target_size=(img_height, img_width), subset='validation' )
方案2:使用独立存放的验证集目录
如果你要加载的FolderPath是单独存放的验证集目录,不需要从训练集拆分,直接移除subset参数即可:
validation_datagen = ImageDataGenerator(rescale = 1/255.0) validation_generator = validation_datagen.flow_from_directory(FolderPath, batch_size=batch_size, class_mode='categorical', target_size=(img_height, img_width) )
验证修复结果
运行训练前先打印验证集样本数,确认加载正常:
print("验证集样本数:", validation_generator.samples)
输出数值大于0即代表验证集配置正确,训练时会自动生成验证指标,所有回调都能正常执行。
(可选优化:新版本TensorFlow已经废弃fit_generator,直接使用model.fit即可,原生支持生成器输入)
内容的提问来源于stack exchange,提问作者xionxavier
相关产品推荐
相关产品推荐

