Tensorflow:损失减少,但精度稳定

Jus*_*ter 12 convolution neural-network deep-learning conv-neural-network tensorflow

我的团队正在Tensorflow中培训CNN,对损坏/可接受的部件进行二元分类.我们通过修改cifar10示例代码来创建代码.在我之前使用神经网络的经验中,我总是训练直到损失非常接近0(远低于1).然而,我们现在正在训练期间(在单独的GPU上)使用验证集来评估我们的模型,并且看起来精确度在大约6.7k步之后停止增加,而在超过40k步之后损失仍然稳定地下降.这是由于过度拟合吗?一旦损失非常接近零,我们是否应该看到准确度再次出现飙升?目前的最大精度是不可接受的.我们应该杀了它并继续调整吗?您有什么推荐的吗?以下是我们修改后的代码和培训流程图.

https://gist.github.com/justineyster/6226535a8ee3f567e759c2ff2ae3776b

精确和损失图像

raf*_*lle 21

二元交叉熵损失的减少并不意味着准确度的提高.考虑标签1,在时间步长1,2,3和分类阈值0.5处预测0.2,0.4和0.6.时间步长1和2将导致损失减少但准确度没有增加.

通过过度拟合训练数据,确保您的模型具有足够的容量.如果模型过度拟合训练数据,则通过使用正弦化技术(例如,丢失,L1和L2正则化以及数据增强)来避免过度拟合.

最后,确认您的验证数据和培训数据来自同一分发.

  • 在尝试在全黑图像上找到具有 3 个类别的 NN 后,得到了答案。分类器学会将所有类别的概率设为 33%,哈哈。所以损失从 7 减少到 1,但准确率仍然是 33%! (2认同)

cod*_*ina 11

Softmax好吧,当我在最后一层使用函数而不是进行二元分类时,我遇到了类似的情况Sigmoid

我的验证损失和训练损失正在减少,但两者的准确性保持不变。所以这给了我教训为什么sigmoid要用于二元分类。


Ali*_*asi 6

这是我的建议,可能的问题之一是您的网络开始记忆数据,是的,您应该增加正则化,

更新:这里我想再提一个可能导致这种情况的问题:验证集中的余额比率与您在训练集中的余额相差甚远。我建议,在第一步尝试了解您的测试数据(真实世界数据,您的模型在推理时间将面临的数据)描述性外观是什么,它的平衡率是多少,以及其他类似的特征。然后尝试使用几乎与您对真实数据实现的描述相同的描述来构建这样的训练/验证集。

  • 网络参数中的每个配置都只是通过尝试和错误来实现的,没有人可以说改变过滤器或层或任何东西都可以改善您的结果,您应该尝试所有可能的方法来达到您的目标准确性, (3认同)