【问题标题】:Two layer neural network performs worse than single layer两层神经网络的性能比单层差
【发布时间】:2017-10-20 22:26:21
【问题描述】:

我正在学习 TensorFlow,并尝试创建一个简单的两层神经网络。

教程代码https://www.tensorflow.org/get_started/mnist/pros从这个简单的网络开始,得到92%的准确率:

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)

我尝试用这个非常简单的网络替换它,添加一个新层,但现在准确率下降到 84%!!!

layer1_len = 10
w1 = weight_var([784, layer1_len])
b1 = bias_var([layer1_len])
o1 = tf.nn.relu(tf.matmul(x, w1) + b1)
w2 = weight_var([layer1_len, 10])
b2 = bias_var([10])
y = tf.nn.softmax(tf.matmul(o1, w2) + b2)

我通过 layer1_len 的几个不同值以及不同数量的训练步骤得到了该结果。 (请注意,如果我省略 weight_varbias_var 随机初始化,并将所有内容保持为零,则准确率会下降到接近 10%,基本上不比猜测好。)

我做错了什么?

【问题讨论】:

  • 您应该知道,增加层数可能会导致模型更容易过度拟合,我建议您绘制误差训练曲线(Epochs vs Train/Validation Loss),如果验证损失开始增加,那么您可能正在尝试过度拟合
  • 你认为layer1_len = 10 的过度拟合是合理的吗?
  • 嗯,这可能是一种可能性,另一个可能的假设是模型拟合不足。再一次,检查错误丢失可能会给您一些见解
  • 正如@EdgarAndrésMargffoyTuay 提到的,更多的层会增加过度拟合的可能性。如果需要更多层,可以尝试减少模型中的神经元数量。

标签: machine-learning tensorflow neural-network


【解决方案1】:

没有错。问题是增加层数并不会自动意味着更高的准确度(否则机器学习会得到解决,因为如果您需要在图像分类器中获得更高的准确度,您只需将 +1 层添加到 inception 并声称胜利)。

为了向您展示这不仅仅是您的问题 - 看看这篇高级论文:Deep Residual Learning for Image Recognition 他们看到增加层数会降低评分函数(这并不重要)及其架构克服这个问题(这很重要)。这是其中的一小部分:

网络越深,训练误差越大,因此测试误差越大。

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2015-10-24
    • 2018-11-24
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多