Keras设置验证集batch_size为1的疑问:为何实际验证用多样本?
关于Keras验证集batch_size=1却用全量验证样本评估的原因
哈哈,这个问题我刚上手Keras的时候也困惑过!其实核心是你误解了batch_size在验证阶段的作用,下面给你拆解清楚:
验证阶段的batch_size只是计算粒度,不是评估样本总量
Keras的model.fit()方法里,当你指定validation_data后,不管你设置的validation_batch_size(或者通用的batch_size)是多少,它都会遍历完整的验证数据集,只是每次取batch_size个样本计算损失和指标,最后把所有样本的计算结果做平均,得到最终的验证分数。所以你看到的性能提升,是因为模型确实用了全部验证样本做评估,只是每次只算1个样本而已。为什么设置batch_size=1不会报错?
Keras在评估阶段对batch_size的兼容性很好,只要输入样本的维度和模型输入层匹配,哪怕batch_size=1也能正常计算——无非是计算效率低一点(因为每次只处理1个样本,没有批量计算的并行优势),但不会影响结果的正确性,所以模型运行不会有异常。如果真的只想用1个验证样本评估怎么办?
要是你确实想在每个epoch后只评估1个验证样本,那得手动截取验证集的单样本子集,比如:# 只取第一个验证样本 validation_data = (x_val[:1], y_val[:1]) model.fit(..., validation_data=validation_data, batch_size=1)这样模型才会在每个epoch后只评估这1个样本,此时验证分数才会因为样本量太少而波动很大,甚至没有参考性。
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

