【问题标题】:Reusing Inception V3 Conv Neural Net (tensorflow) with 0% accuracy以 0% 的准确率重用 Inception V3 Conv 神经网络(张量流)
【发布时间】:2016-09-21 19:19:11
【问题描述】:

EDIT1:我的代码与此处相同,https://github.com/tensorflow/models/blob/master/inception/inception。唯一的区别是我将我的文件打包到 TFRecords 中并以批量方式提供。此外,0 类:1 类的比例为 70:30。

我目前正在开展一个项目,在该项目中我正在使用 inception-V3 CNN 模型来训练分类器。目前,我正在研究一个二元分类器(预测 1 或 0),但是我的模型只预测所有内容的 0 类。在进行故障排除时,我发现 0 类的预测概率始终为 100%。我已经验证了从输入排队系统到评估和测试的所有内容,一切似乎都运行良好。

奇怪的是,损失值以完美的半抛物线方式减少,这让我认为损失已经收敛到局部最小值。在测试脚本后,每次只生成 0 类(概率为 100%)。我注意到的另一件事是,各个 Conv 层的激活始终是恒定的,这可能意味着神经元根本没有放电。

我的问题是, 1. 我的模型有效吗?损失似乎收敛,但各层的激活似乎停滞不前。 2. 我正在使用 tensorflow 的模型部分提供的训练代码 (https://github.com/tensorflow/models/blob/master/inception/inception/inception_train.py)

我正在重用 train、eval 和支持代码,以使用我创建的自定义输入管道(也可以使用)来训练我的模型。有人可以帮助我朝着正确的方向前进吗?

谢谢。

【问题讨论】:

  • 看起来你的训练集在 0 类上是不平衡的。不是吗?
  • 我同意@nessuno 的评论。如果没有你的代码,它要么是这个,要么是一个错误 - 任何地方,因为你的模型可能是错误的,损失计算可能是错误的,或者几乎是其他任何东西。
  • 我已经用更多细节更新了这个问题。

标签: machine-learning tensorflow


【解决方案1】:

我回答这个问题有点晚了?

首先,您的模型根本没有学到任何东西。它所做的一切(聪明 ?)是为所有情况预测 0 类,以便它无需任何努力即可达到 70% 的基线准确度。 (可能模型很懒惰??)JK。这是机器学习中一个众所周知的问题。这被称为类不平衡问题。请参考此http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/。

除了那里提到的技术。创造奇迹的一种技术是使用类权重。也就是说,基本上是告诉网络偏向于较弱的类别。在您的情况下,班级权重将为 class0:class1 = 3:7。这也是一个超参数!但这是一个很好的起点。

此外,您没有提供有关数据集大小的任何信息。无论您是微调还是从头开始训练。没有它们,很难推测。默认情况下,我会建议微调。

此外,损失是指训练损失还是验证损失?因为训练损失实际上没有关于模型性能的信息。此外,在我看来,训练损失和验证损失都没有多少信息可以得出关于模型性能的有意义的见解。使用混淆矩阵、f1 分数、召回率、精度等其他指标。

最后,您的问题绝对没有单一的答案。唯一的方法是艰难的方法 - 你将与模型一起学习?。因为我认为训练 NN 尤其是 CNN 是一门艺术。其中,直觉起着非常关键的作用,因为在大多数情况下,最不期望的变化会产生最好的结果。无论如何,这是训练神经网络的有趣部分。

愉快的训练?

P.S:尝试使用 gradcam 等可视化工具来了解模型是否正在查看图像的正确部分以进行分类。这很重要!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2019-06-13
    • 1970-01-01
    相关资源
    最近更新 更多