如何判断哪种Keras模型更好?
keras
machine-learning
python
5
0

我不知道要比较我的2个Keras模型以查看哪个更好,可以使用输出中的哪个精度。

我是使用“ acc”(来自训练数据?)还是“ val acc”(来自验证数据?)一?

每个时期都有不同的acc和val acc。我怎么知道整个模型的acc或val acc?我是否要对所有时期acc或val acc求平均值,以找到整个模型的acc或val acc?

模型1输出

Train on 970 samples, validate on 243 samples
Epoch 1/20
0s - loss: 0.1708 - acc: 0.7990 - val_loss: 0.2143 - val_acc: 0.7325
Epoch 2/20
0s - loss: 0.1633 - acc: 0.8021 - val_loss: 0.2295 - val_acc: 0.7325
Epoch 3/20
0s - loss: 0.1657 - acc: 0.7938 - val_loss: 0.2243 - val_acc: 0.7737
Epoch 4/20
0s - loss: 0.1847 - acc: 0.7969 - val_loss: 0.2253 - val_acc: 0.7490
Epoch 5/20
0s - loss: 0.1771 - acc: 0.8062 - val_loss: 0.2402 - val_acc: 0.7407
Epoch 6/20
0s - loss: 0.1789 - acc: 0.8021 - val_loss: 0.2431 - val_acc: 0.7407
Epoch 7/20
0s - loss: 0.1789 - acc: 0.8031 - val_loss: 0.2227 - val_acc: 0.7778
Epoch 8/20
0s - loss: 0.1810 - acc: 0.8010 - val_loss: 0.2438 - val_acc: 0.7449
Epoch 9/20
0s - loss: 0.1711 - acc: 0.8134 - val_loss: 0.2365 - val_acc: 0.7490
Epoch 10/20
0s - loss: 0.1852 - acc: 0.7959 - val_loss: 0.2423 - val_acc: 0.7449
Epoch 11/20
0s - loss: 0.1889 - acc: 0.7866 - val_loss: 0.2523 - val_acc: 0.7366
Epoch 12/20
0s - loss: 0.1838 - acc: 0.8021 - val_loss: 0.2563 - val_acc: 0.7407
Epoch 13/20
0s - loss: 0.1835 - acc: 0.8041 - val_loss: 0.2560 - val_acc: 0.7325
Epoch 14/20
0s - loss: 0.1868 - acc: 0.8031 - val_loss: 0.2573 - val_acc: 0.7407
Epoch 15/20
0s - loss: 0.1829 - acc: 0.8072 - val_loss: 0.2581 - val_acc: 0.7407
Epoch 16/20
0s - loss: 0.1878 - acc: 0.8062 - val_loss: 0.2589 - val_acc: 0.7407
Epoch 17/20
0s - loss: 0.1833 - acc: 0.8072 - val_loss: 0.2613 - val_acc: 0.7366
Epoch 18/20
0s - loss: 0.1837 - acc: 0.8113 - val_loss: 0.2605 - val_acc: 0.7325
Epoch 19/20
0s - loss: 0.1906 - acc: 0.8010 - val_loss: 0.2555 - val_acc: 0.7407
Epoch 20/20
0s - loss: 0.1884 - acc: 0.8062 - val_loss: 0.2542 - val_acc: 0.7449

模型2输出

Train on 970 samples, validate on 243 samples
Epoch 1/20
0s - loss: 0.1735 - acc: 0.7876 - val_loss: 0.2386 - val_acc: 0.6667
Epoch 2/20
0s - loss: 0.1733 - acc: 0.7825 - val_loss: 0.1894 - val_acc: 0.7449
Epoch 3/20
0s - loss: 0.1781 - acc: 0.7856 - val_loss: 0.2028 - val_acc: 0.7407
Epoch 4/20
0s - loss: 0.1717 - acc: 0.8021 - val_loss: 0.2545 - val_acc: 0.7119
Epoch 5/20
0s - loss: 0.1757 - acc: 0.8052 - val_loss: 0.2252 - val_acc: 0.7202
Epoch 6/20
0s - loss: 0.1776 - acc: 0.8093 - val_loss: 0.2449 - val_acc: 0.7490
Epoch 7/20
0s - loss: 0.1833 - acc: 0.7897 - val_loss: 0.2272 - val_acc: 0.7572
Epoch 8/20
0s - loss: 0.1827 - acc: 0.7928 - val_loss: 0.2376 - val_acc: 0.7531
Epoch 9/20
0s - loss: 0.1795 - acc: 0.8062 - val_loss: 0.2445 - val_acc: 0.7490
Epoch 10/20
0s - loss: 0.1746 - acc: 0.8103 - val_loss: 0.2491 - val_acc: 0.7449
Epoch 11/20
0s - loss: 0.1831 - acc: 0.8082 - val_loss: 0.2477 - val_acc: 0.7449
Epoch 12/20
0s - loss: 0.1831 - acc: 0.8113 - val_loss: 0.2496 - val_acc: 0.7490
Epoch 13/20
0s - loss: 0.1920 - acc: 0.8000 - val_loss: 0.2459 - val_acc: 0.7449
Epoch 14/20
0s - loss: 0.1945 - acc: 0.7928 - val_loss: 0.2446 - val_acc: 0.7490
Epoch 15/20
0s - loss: 0.1852 - acc: 0.7990 - val_loss: 0.2459 - val_acc: 0.7449
Epoch 16/20
0s - loss: 0.1800 - acc: 0.8062 - val_loss: 0.2495 - val_acc: 0.7449
Epoch 17/20
0s - loss: 0.1891 - acc: 0.8000 - val_loss: 0.2469 - val_acc: 0.7449
Epoch 18/20
0s - loss: 0.1891 - acc: 0.8041 - val_loss: 0.2467 - val_acc: 0.7531
Epoch 19/20
0s - loss: 0.1853 - acc: 0.8072 - val_loss: 0.2511 - val_acc: 0.7449
Epoch 20/20
0s - loss: 0.1905 - acc: 0.8062 - val_loss: 0.2460 - val_acc: 0.7531
参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

我是使用“ acc”(来自训练数据?)还是“ val acc”(来自验证数据?)一?

如果您想估计模型对新数据进行泛化的能力(这可能是您想要做的),那么您将查看验证准确性,因为验证拆分仅包含模型在训练和训练中从未看到的数据。因此不能仅仅记住。

如果您的训练数据准确性(“ acc”)不断提高,而验证数据准确性(“ val_acc”)变差,则您可能处于过度拟合的情况,即您的模型开始基本上只是存储数据。

每个时期都有不同的acc和val acc。我怎么知道整个模型的acc或val acc?我是否要对所有时期acc或val acc求平均值,以找到整个模型的acc或val acc?

每个时期都是对您所有数据的一次训练。在运行期间,将根据损失函数调整模型的参数。结果是一组具有一定泛化到新数据能力的参数。验证准确性反映了该能力。因此,将每个纪元都视为自己的模型,如果对另一个纪元进行训练,则模型会变得更好或更糟。验证准确度的变化(更好=验证准确度提高)可以判断它的好坏。因此,请选择验证精度最高的时期模型。不要平均不同时期的精度,这没有多大意义。您可以使用ModelCheckpoint回调ModelCheckpoint来自动保存具有最高验证准确性的模型(请参阅回调文档 )。

模型1的最高精度为0.7737 ,模型2的最高精度为0.7572 。因此,您应该更好地查看模型1(在时期3)。尽管0.7737可能只是随机的异常值。

收藏
评论

您需要键入减少val_loss或增加val_acc,最终没关系。差异在随机/舍入误差之内。

实际上,由于过度拟合,训练损失可能会大大减少,这就是为什么要查看验证损失的原因。

就您而言,您可以看到您的训练损失并没有减少-这意味着您在每个时期之后都学不到任何东西。除了一些琐碎的线性拟合或截断值外,该模型似乎没有什么要学习的。

另外,在什么也不学或学习平凡的线性事物时,您应该在训练和验证上有相似的表现(平凡的学习总是可以推广的)。在使用validation_split功能之前,您可能应该对数据进行混洗。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号