为什么这个神经网络没有学习到任何东西?

我正在学习TensorFlow,并按照TensorFlow文档中《MNIST初学者指南》实现了一个简单的neural network。这里是链接。正如预期的那样,准确率在80-90%左右。

然后,按照同一篇文章的指引,我转向了《MNIST专家指南》,使用了ConvNet。然而,我决定改进初学者的部分。我了解神经网络是如何学习的,也知道深层网络可以比浅层网络表现得更好。我修改了《MNIST初学者指南》中的原始程序,实现了一个具有两个隐藏层、每个隐藏层16个神经元的神经网络。

它看起来像这样:

网络图像

我构建的神经网络

代码

预期的输出应该比仅使用单层时更好(假设W0的形状为[784,10],B0的形状为[10])

def build_graph():     return tf.matmul(x,W0) + B0

然而,输出显示网络根本没有在训练。准确率在任何迭代中都没有超过20%。

输出

正在提取MNIST_data/train-images-idx3-ubyte.gz

正在提取MNIST_data/train-labels-idx1-ubyte.gz

正在提取MNIST_data/t10k-images-idx3-ubyte.gz

正在提取MNIST_data/t10k-labels-idx1-ubyte.gz

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

我的问题

上面的程序有什么问题导致它完全无法泛化?我如何在不使用卷积神经网络的情况下改进它?


回答:

你的主要错误是网络对称性,因为你将所有权重初始化为零。因此,权重从未被更新。将其改为小的随机数,它就会开始学习。初始化偏置为零是可以的。

另一个问题是纯粹技术性的:print_accuracy函数在计算图中创建了新节点,由于你在循环中调用它,图会变得臃肿,最终会耗尽所有内存。

你可能还想调整超参数,并增大网络以增加其容量。

编辑:我还发现了你准确率计算中的一个错误。它应该是

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_predicted, 1))

这里是完整的代码:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注