我正在学习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_var
和bias_var
随机初始化,并将所有内容保持为零,则精度会降至接近10%,基本上不会比猜测好。)
我做错了什么?
答案 0 :(得分:2)
没有错。问题是增加图层并不会自动意味着更高的准确性(否则机器学习会有所解决,因为如果你需要在图像分类器中获得更好的准确性,你只需要在开始时添加+1层并声称获胜)。
为了向您展示这不仅仅是您的问题 - 请看一下这篇高级论文:Deep Residual Learning for Image Recognition他们看到增加层数会降低评分功能(这并不重要)和他们的解决这个问题的架构(这很重要)。以下是其中的一小部分:
更深的网络具有更高的训练误差,从而导致测试错误。