最后一次训练之后,我得到以下输出:
Epoch 100/100
89254/89254 - 24s - loss: 0.1935 - acc: 0.9281 - val_loss: 0.2182 - val_acc: 0.9219
但是问题是,一旦我对训练数据和验证数据进行model.evaluate()
,我将得到不同的结果:
Train accuracy: 0.929661
Validation accuracy: 0.921859
这有什么意义?为什么在测试模式下,batch_size
函数仍存在参数model.evaluate()
? https://keras.io/models/model/#evaluate
如果我已经批量训练了模型,是否还需要为测试模式定义批量大小?
答案 0 :(得分:3)
当然,有道理的是,开始时,进度条上的训练集中产生的任何度量标准/损失都将作为训练批次中的运行平均值进行计算,其中权重由于梯度下降而变化。这意味着训练指标将永远不会与用model.evaluate()
计算的指标匹配,因为在这种情况下权重是不变的且不会改变。
关于验证指标,它们确实匹配,只是keras
进度栏仅打印四个有效数字,而您打印了更多的数字。
关于批量大小,我已经评论说,基本上已经回答了here。 Keras使用批处理,因为您无法一次对整个数据集进行预测,这可能会占用过多的内存