“val_acc”根本没有改变
Posted
技术标签:
【中文标题】“val_acc”根本没有改变【英文标题】:"val_acc" does not change at all 【发布时间】:2018-02-23 22:39:26 【问题描述】:我在 Python 上使用 Keras 创建了一个用于图像分类的 CNN。我有一个相当小的数据集(大约 3000 张图片),主要目标是一个简单的二进制分类。
问题是在训练期间“acc”会增长,而“val_acc”从一开始就完全没有变化并且保持在 +- 0.6。
我搜索了互联网,几乎到处有人说主要问题是我的数据集太小,即网络过度拟合。 但我试图让它尽可能简单(现在是 2 个 Conv 层,Flatten 和 1 个隐藏 FC 层),我添加了批量标准化,但没有任何帮助!
也许有些东西我不明白,这就是为什么它不起作用?我这样做的时间越长,我对“acc”和“val_acc”之间有什么区别就越感到困惑?如果有任何帮助,我将不胜感激!
附:我尝试使用Keras blog tutorial 中关于“猫与狗”分类的代码,但这无济于事,问题仍然存在:(
【问题讨论】:
欢迎来到 ***!请发minimal, Complete, and Verifiable example,以便我们为您提供帮助。 比 acc 更重要的是loss
(它必须减少)。 loss
和 val_loss
之间的区别在于,一个是用你的训练数据衡量的,另一个是用你的验证数据衡量的。 ---- 训练数据是你的模型用来学习的唯一数据,而验证/测试数据是你最后提供给模型的东西,只是为了看看它是否足以了解它以前从未见过的图像. --- 如果训练损失下降,但验证损失没有下降,则很可能是过度拟合问题:您的模型太好了。
还有其他可能,比如:你的验证数据不正确。
【参考方案1】:
我猜有很多情况下 val_acc 根本没有变化,
就我而言,我下载了 ResNet 50 并将一些层更改为 trainable=False。这导致 val_acc 在 acc 上升时恒定为 0.5。
修复是在更改层的可训练属性后运行 model.compile(...)。
【讨论】:
以上是关于“val_acc”根本没有改变的主要内容,如果未能解决你的问题,请参考以下文章