神经网络陷入困境

时间:2017-10-10 07:53:49

标签: machine-learning tensorflow neural-network deep-learning conv-neural-network

我正在尝试使用神经网络进行分类(我正在使用tensorflow)。 不幸的是,我的神经网络训练的准确率达到了42%。 我有4个类,我尝试对数据进行分类。 不幸的是,我的数据集并不均衡,这意味着:

  1. 43%的数据属于第1类(是的,我的网络卡住只预测了这一点)
  2. 37%到2级
  3. 13%到3级
  4. 7%到4级
  5. 我使用的优化器是AdamOptimizer,成本函数是tf.nn.softmax_cross_entropy_with_logits。

    我想知道我的训练是否陷入42%的原因是因为我的数据集不均衡,或者因为数据的性质是非常随机的,并且确实没有找到模式

    目前我的NN包括:

    1. 输入图层
    2. 2个卷积层
    3. 7个完全连接的层
    4. 输出图层
    5. 我尝试改变网络的这种结构,但结果总是一样的。 我也尝试了支持向量分类,结果几乎相同,变化很小。

      其他人遇到过类似的问题吗? 有人可以提供一些提示,以解决这个问题吗?

      谢谢, 杰拉德

2 个答案:

答案 0 :(得分:1)

我将假设您已经检查过双倍,三倍和四倍的数据,以确保输入的数据符合您的预期。

这个问题非常开放,甚至是一个研究课题。但是有些事情可以提供帮助。

在更好的培训方面,人们使用不平衡数据集训练神经网络有两种常规方式。

  • 对频率较低的示例进行过采样,以使网络看到的每个类的示例比例相等。例如在每一批中,强制执行1/4的示例来自1级,1/4来自2级,等等。
  • 对每个类按其比例进行错误分类的错误进行加权。例如错误地将类1的示例分类为100/43,而错误地将类4的示例分类为100/7

话虽这么说,如果你的学习率很好,神经网络通常最终会(只是坐在那里几个小时后)跳出来只预测一个班级,但是他们仍然很难用一个严重偏斜的数据集结束。 / p>

如果您想知道数据中是否有 模式可以确定,有一种简单的方法可以做到。

通过从所有类中随机选择元素来创建新数据集,使得所有类都具有偶数(即,如果有类别4的700个示例,则通过从每个类中随机选择700个示例来构建数据集)

然后,您可以在此新数据集上使用所有技术。

虽然,this paper表明,即使使用随机标签,它也应该能够找到一些它理解的模式。

答案 1 :(得分:0)

首先,您应该检查您的模型是否过度拟合或过度拟合,这两种情况都可能导致精度不高。检查训练集和开发集的准确性,如果训练集的准确度远远高于开发/测试集,则模型可能过度,如果训练集的准确性与开发/测试集上的精度一样低,那么它可能是不合适的。

对于过度精细化,更多数据或更简单的学习结构可能会起作用,同时使您的结构更复杂,更长的训练时间可以解决不足之处问题