我用 metrics=['accuracy']
编译了一个模型,我得到的值总是高于验证准确率 val_acc
。例如:
Epoch 19/20
53/53 [==============================] - 280s - loss: 0.3931 - acc: 0.8238 - val_loss: 0.5002 - val_acc: 0.7757
Epoch 20/20
53/53 [==============================] - 278s - loss: 0.3957 - acc: 0.8255 - val_loss: 0.5009 - val_acc: 0.7754
accuracy: 0.790697674418604
有人知道这两个值是如何计算出来的吗?
更新 / 为…提供最新信息 / 校正 / 使现代化
我在 Keras 2.0.8 上。通过“准确度”,我指的是最后一行 accuracy: 0.790697674418604
。我没有为它提供测试集,所以我想知道它测试的是什么。
在训练过程中,样本再次被分成两个内部子集。一个用于实际训练,另一个用于每个时期之后的验证。分裂的比例可以通过参数'validation_split'来控制,如下所示(来自 Keras 的示例)
h = model.fit(X_train, Y_train, batch_size=200, epochs=50, verbose=2, validation_split=0.2)
现在,回到日志,“acc”指的是训练的准确性。'val_acc'指的是验证集。注意,val_acc 指的是在训练期间没有向网络显示的一组样本,因此它指的是模型在训练集以外的情况下的一般工作情况。
验证准确率低于准确率是很常见的。但理想情况下,您应该努力将这些值保持在同一水平。如果验证准确率远低于准确率,那么您肯定是过度拟合(如上例所示)——准确率为 84,验证准确率为 77。
编辑:关于日志最后一行中的‘准确性’,即所有 epoch 对测试数据集运行后网络的准确性。这通常更接近‘val_acc’而不是精确度(如上面的例子,它是79)。这只是意味着测试数据中的样本比上一次运行中验证数据中的样本更接近(请记住,这两个集合都不用于训练)
在任何情况下,我认为你应该调整以确保'acc'和'val_acc'和最终的'准确性'更接近彼此