Keras使用fit_generator时模型会从validation_data中学习吗?
Keras训练阶段验证集是否参与学习的解答
核心结论
你的推测完全正确,Keras模型在验证数据上运行时不会进行任何学习。
运行逻辑说明
- 训练过程中,模型仅在处理训练集数据时会执行反向传播、梯度计算与权重更新的操作,验证阶段完全不涉及这类逻辑。
- 执行验证流程时,Keras会自动将模型切换为推理模式,诸如Dropout、BatchNormalization等在训练和推理阶段表现不同的层都会切换到推理态,仅做前向传播计算验证损失、验证准确率等指标,不会修改任何模型参数。
这也是验证集指标可以作为模型泛化能力评估依据的核心前提,如果验证数据会参与训练,那验证指标就失去了参考价值。
代码合规性说明
你拆分数据集后分别构造训练生成器和验证生成器的做法符合通用训练规范,只要train_list和valid_list不存在重复样本,得到的验证结果就是可信的。
你示例的训练调用代码写法没有问题:
model.fit_generator(train_gen, validation_data=valid_gen, steps_per_epoch=train_steps, validation_steps=valid_steps, epochs=epochs)
数据生成器的构造写法也符合要求:
train_gen = DataGen(train_list, path_general, image_size=image_size, batch_size=batch_size) valid_gen = DataGen(valid_list, path_general, batch_size=batch_size, image_size=image_size)
内容的提问来源于stack exchange,提问作者Frederico Severgnini
相关产品推荐
相关产品推荐

