为什么TensorFlow的model.fit仅保存最后一轮验证准确率与损失
问题原因
你在model.fit调用中错误地为非生成器格式的验证集配置了validation_steps参数。validation_steps仅适用于验证集为生成器(如ImageDataGenerator.flow输出的迭代器)或tf.data.Dataset对象的场景,用来指定每轮验证需要迭代的batch数。你当前传入的validation_data=(testX, testY)是普通的NumPy数组/张量格式,TensorFlow默认会自动遍历全部验证集计算每轮的指标,不需要额外指定validation_steps。硬加该参数会导致验证逻辑异常,最终仅保存了1次验证结果。
修复方案
方案1:删除多余的validation_steps参数
直接修改model.fit代码,移除针对验证集的步数配置即可,重新训练后历史数据中就会保存每轮的验证集指标:
H = model.fit( aug.flow(trainX, trainY, batch_size=BS), steps_per_epoch=len(trainX) // BS, validation_data=(testX, testY), epochs=EPOCHS)
方案2:将验证集也转为生成器格式
如果你需要保留validation_steps配置,可以把验证集也封装为和训练集同类型的生成器:
# 验证集生成器不需要做数据增强,直接用普通迭代即可 val_gen = ImageDataGenerator().flow(testX, testY, batch_size=BS) H = model.fit( aug.flow(trainX, trainY, batch_size=BS), steps_per_epoch=len(trainX) // BS, validation_data=val_gen, validation_steps=len(testX) // BS, epochs=EPOCHS)
注意:你当前已经生成的历史文件中仅保留了最后一轮的验证指标,无法补全之前轮次的数值,需要按上述方案修改后重新训练才能绘制完整的验证集曲线。
内容的提问来源于stack exchange,提问作者Shield77
相关产品推荐
相关产品推荐

