两层神经网络的性能比单层差

SRo*_*mes 2 machine-learning neural-network tensorflow

我正在学习 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)
Run Code Online (Sandbox Code Playgroud)

我尝试用这个非常简单的网络替换它,添加一个新层,但准确率现在下降到 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)
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

Sal*_*ali 5

没有任何错误。问题是,增加层数并不自动意味着更高的准确度(否则机器学习就会得到某种解决,因为如果你需要图像分类器有更好的准确度,你只需在初始阶段添加 +1 层即可获得胜利)。

为了向您表明这不仅仅是您的问题 - 请查看这篇高级论文:图像识别的深度残差学习,其中他们发现增加层数会降低评分函数(这并不重要)及其架构克服这个问题(这很重要)。这是其中的一小部分:在此输入图像描述

更深的网络具有更高的训练误差,因此测试误差也更高。