“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(它必须减少)。 lossval_loss 之间的区别在于,一个是用你的训练数据衡量的,另一个是用你的验证数据衡量的。 ---- 训练数据是你的模型用来学习的唯一数据,而验证/测试数据是你最后提供给模型的东西,只是为了看看它是否足以了解它以前从未见过的图像. --- 如果训练损失下降,但验证损失没有下降,则很可能是过度拟合问题:您的模型太好了。 还有其他可能,比如:你的验证数据不正确。 【参考方案1】:

我猜有很多情况下 val_acc 根本没有变化,

就我而言,我下载了 ResNet 50 并将一些层更改为 trainable=False。这导致 val_acc 在 acc 上升时恒定为 0.5。

修复是在更改层的可训练属性后运行 model.compile(...)。

【讨论】:

以上是关于“val_acc”根本没有改变的主要内容,如果未能解决你的问题,请参考以下文章

Spritekit 改变重力

update-alternatives --config gcc 根本不改变编译器

LOSS 在非常简单的 KERAS 二元分类器中没有改变

UIAlertAction改变颜色[重复]

<转>如何改变讨好型人格 | 你根本不需要讨好任何人

为啥这个参数列表在 Python 中不会改变?