神经网络陷入困境



我正在尝试使用神经网络进行分类(我正在使用tensorflow)。不幸的是,我的神经网络的训练一直停留在42%的准确率。我有4个类,我试图将数据分类到其中。不幸的是,我的数据集没有很好地平衡,这意味着:

  1. 43%的数据属于第1类(是的,我的网络只能预测这一点)
  2. 37%至2级
  3. 13%至3级
  4. 7%至4级

我使用的优化器是AdamOptimizer,成本函数是tf.nn.softmax_cross_entropy_with_logits。

我想知道我的训练停留在42%的原因是否真的是我的数据集没有很好地平衡,或者是因为数据的性质真的是随机的,真的没有找到模式。

目前我的NN包括:

  1. 输入层
  2. 2个卷积层
  3. 7层完全连接
  4. 输出层

我试图改变网络的这种结构,但结果总是一样的。我还尝试了支持向量分类,结果基本相同,只是略有变化。

其他人遇到过类似的问题吗?有人能给我一些如何摆脱这个问题的提示吗?

谢谢,Gerald

我假设您已经检查了两次、三次和四次输入的数据是否符合预期。


这个问题非常开放,甚至是一个需要研究的话题。但也有一些事情可以有所帮助。

就更好的训练而言,有两种正常的方法可以让人们用不平衡的数据集训练神经网络。

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

也就是说,如果你的学习率很好,神经网络最终通常会(在坐了好几个小时之后)跳出只预测一节课,但它们仍然很少以严重偏斜的数据集结束。


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

通过从所有类中随机选择元素来创建一个新的数据集,这样你就有了偶数的所有元素(即,如果有700个类4的例子,那么通过从每个类中随机选取700个例子来构建一个数据集)

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

尽管如此,本文建议,即使使用随机标签,它也应该能够找到它所理解的一些模式。

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

至于过度拟合,更多的数据或更简单的学习结构可能会起作用,同时使你的结构更复杂,更长的训练时间可能会解决拟合不足的问题

最新更新