添加数据降低准确性

我遇到了一个情况,给神经网络提供额外的数据反而降低了准确性,我无法理解这是如何发生的。

假设你训练了一个神经网络——仅是二元分类器——使用一组示例,每个示例有10个变量。它能够相当准确地对训练和测试集进行分类。然后使用相同的示例重新运行,但每个示例增加了额外的变量,例如每个增加了20个变量。也许这些额外变量的信号不如原始变量好,但它仍然获得了原始变量。最坏的情况是,它只需要多花一些时间来学习忽略这些额外变量,对吗?表面上看,准确性不应该降低的,对吗?

让我把我想得到的所有情况都过一遍:

  • 每次都是同一组记录。

  • 所有原始变量仍然存在,只是增加了一些额外的变量。

  • 这不是关于过拟合的问题;使用额外数据训练的网络在训练和测试集上的准确性都大大降低了。

  • 我认为这不是需要更多时间的问题。它已经运行了很长时间,现在没有任何进展的迹象。

  • 我尝试过保持学习率不变和降低学习率,两种方式的结果都是一样的。

使用TensorFlow,简单的前馈网络,带有一个隐藏层,Adam优化器。代码位于 https://github.com/russellw/tf-examples/blob/master/multilayer.py,最重要的部分是

# Inputs and outputsX = tf.placeholder(dtype, shape=(None, cols))Y = tf.placeholder(dtype, shape=None,)# Hidden layersn1 = 3w1 = tf.Variable(rnd((cols, n1)), dtype=dtype)b1 = tf.Variable(rnd(n1), dtype=dtype)a1 = tf.nn.sigmoid(tf.matmul(X, w1) + b1)pr('layer 1: {}', n1)# Output layerno = 1wo = tf.Variable(rnd((n1, no)), dtype=dtype)bo = tf.Variable(rnd(no), dtype=dtype)p = tf.nn.sigmoid(tf.squeeze(tf.matmul(a1, wo)) + bo)tf.global_variables_initializer().run()# Modelcost = tf.reduce_sum((p-Y)**2/rows)optimizer = tf.train.AdamOptimizer(args.learning_rate).minimize(cost)tf.global_variables_initializer().run()

额外数据如何可能使网络的准确性降低?我错过了什么?


回答:

结果证明,这至少与优化器的属性有关。虽然在一种情况下Adam是所有优化器中表现最好的,但在稍微不同的情况下它表现得很差,而Ftrl解决了这个问题。我不知道为什么Adam会有这种失败模式,但当前的解决方案是:将优化器设为参数,使用批处理文件循环遍历所有优化器。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注