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

Machine learning 两层神经网络的性能比单层神经网络差,machine-learning,tensorflow,neural-network,Machine Learning,Tensorflow,Neural Network,我正在学习TensorFlow,并试图创建一个简单的两层神经网络 教程代码从这个简单的网络开始,以获得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, lay

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

教程代码从这个简单的网络开始,以获得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\u len
的几个不同值以及不同数量的训练步骤得到了这个结果。(请注意,如果我省略了
weight\u var
bias\u var
随机初始化,并将所有值保持为零,那么准确率将下降到接近10%,基本上不比猜测好。)


我做错了什么?没有什么错。问题是,增加层并不自动意味着更高的精度(否则机器学习就有点解决了,因为如果你需要在图像分类器中获得更高的精度,你只需在《盗梦空间》中添加+1层就可以获胜)

为了让你知道这不仅仅是你的问题——看看这篇高级论文:他们发现增加层的数量会降低评分功能(这并不重要)和他们克服这个问题的架构(这很重要)。以下是其中的一小部分:

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


没有什么不对的。问题是,增加层并不自动意味着更高的精度(否则机器学习就有点解决了,因为如果你需要在图像分类器中获得更高的精度,你只需在《盗梦空间》中添加+1层就可以获胜)

为了让你知道这不仅仅是你的问题——看看这篇高级论文:他们发现增加层的数量会降低评分功能(这并不重要)和他们克服这个问题的架构(这很重要)。以下是其中的一小部分:

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


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