Joh*_* M. 8 machine-learning deep-learning keras
我编译了一个模型,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
Run Code Online (Sandbox Code Playgroud)
有人知道这两个值的计算方式不同吗?
更新
我在 Keras 2.0.8 上。通过“准确性”,我指的是最后一行accuracy: 0.790697674418604。我没有给它提供测试集,所以我想知道它在测试什么。
在训练期间,样本再次被分成 2 个内部子集。一个用于实际训练,另一个用于每个时期后的验证。分割的比例可以通过参数“validation_split”来控制,如下所示(来自 Keras 的示例)
h = model.fit(X_train, Y_train, batch_size=200, epochs=50, verbose=2, validation_split=0.2)
Run Code Online (Sandbox Code Playgroud)
现在,来到日志,'acc' 指的是训练所针对的内容的准确性。'val_acc' 指的是验证集。请注意, val_acc 指的是训练期间未向网络显示的一组样本,因此指的是您的模型在训练集之外的情况下的总体工作量。
验证准确度低于准确度是很常见的。但理想情况下,您应该努力将这些值保持在同一水平。如果验证准确度远低于准确度,则您肯定过度拟合(如上例所示)-准确度为 84,验证准确度为 77。
编辑:关于日志最后一行中的“准确性”,即在所有时期针对测试数据集运行后网络的准确性。这通常比准确度更接近“val_acc”(如上面的情况,它是 79)。这只是意味着测试数据中的样本比上次运行的验证数据中的样本更接近(记住这两个集合都没有用于训练)
无论如何,我认为您应该调整以确保“acc”和“val_acc”以及最终的“accuracy”彼此更接近
| 归档时间: |
|
| 查看次数: |
15898 次 |
| 最近记录: |