【发布时间】: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_var 和 bias_var 随机初始化,并将所有内容保持为零,则准确率会下降到接近 10%,基本上不比猜测好。)
我做错了什么?
【问题讨论】:
-
您应该知道,增加层数可能会导致模型更容易过度拟合,我建议您绘制误差训练曲线(Epochs vs Train/Validation Loss),如果验证损失开始增加,那么您可能正在尝试过度拟合
-
你认为
layer1_len = 10的过度拟合是合理的吗? -
嗯,这可能是一种可能性,另一个可能的假设是模型拟合不足。再一次,检查错误丢失可能会给您一些见解
-
正如@EdgarAndrésMargffoyTuay 提到的,更多的层会增加过度拟合的可能性。如果需要更多层,可以尝试减少模型中的神经元数量。
标签: machine-learning tensorflow neural-network