在最后一个训练周期结束后,我得到了以下输出:
Epoch 100/10089254/89254 - 24s - loss: 0.1935 - acc: 0.9281 - val_loss: 0.2182 - val_acc: 0.9219
但问题是,一旦我在训练数据和验证数据上使用model.evaluate()
,我得到了不同的结果:
Train accuracy: 0.929661Validation accuracy: 0.921859
这怎么解释呢?为什么在测试模式下model.evaluate()
函数中还存在batch_size
参数? https://keras.io/models/model/#evaluate如果我已经以批次的方式训练了模型,是否也需要在测试模式下定义批次大小呢?
回答:
当然这是有道理的,首先,在训练集上进度条中产生的任何指标/损失都是作为训练批次的运行平均值计算的,其中权重会因为梯度下降而变化。这意味着训练指标永远不会与使用model.evaluate()
计算的指标相匹配,因为在这种情况下权重是恒定不变的。
关于验证指标,它们确实是匹配的,只是keras
的进度条只显示了四位有效数字,而你显示了更多位数。
关于批次大小,我已经评论过这个问题基本上在这里已经得到了回答 这里。Keras使用批次是因为你不能一次对整个数据集进行预测,那样可能会消耗太多内存