TensorFlow MNIST教程 - 测试精度非常低



我一直从TensorFlow开始,一直遵循此标准MNIST教程。

然而,与预期的92%精度相反,训练集获得的准确性以及测试集的准确性不会超过67%。我熟悉SoftMax和多项式回归,并使用Scratch Python实现以及使用Sklearn.linear_model.logisticRegress,获得了超过94%的速度。

我使用CIFAR-10数据集尝试了相同的尝试,在这种情况下,准确性太低,仅约10%,这与随机分配的类相同。这使我怀疑我的TensorFlow安装,但我不确定。

这是我对TensorFlow MNIST教程的实现。如果有人可以查看我的实施。

您构造了图形,指定了损耗函数并创建了优化器(正确(。问题是您仅使用一次优化器:

sess_tf.run(train_step, feed_dict={x: train_images_reshaped[0:1000], y_: train_labels[0:1000]})

因此,基本上您只运行一次梯度下降一次。显然,只有在正确的方向上只有一小步之后,您就无法快速收敛。您需要沿线做一些事情:

for _ in xrange(many_steps):
  X, Y = get_a_new_batch_from(mnist_data)
  sess_tf.run(train_step, feed_dict={x: X, y_: Y})

如果您将无法弄清楚如何修改我的伪代码,请咨询教程,因为根据我的记忆,它们很好地介绍了。

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

W的初始化可能会导致您的网络除了随机猜测而不会学习任何东西。因为毕业生将为零,而后退实际上根本不起作用。

您最好使用W启动CC_2请参阅https://www.tensorflow.org/api_docs/python/tf/tf/truncated_normal for for for。

不确定这是否在2018年6月仍然相关,但是MNIST初学者教程不再与GitHub上的示例代码匹配。如果您下载并运行示例代码,它确实确实为您提供了建议的92%精度。

我注意到遵循教程时出了两件事:

1(意外调用SoftMax两次

教程首先告诉您定义y如下:

y = tf.nn.softmax(tf.matmul(x, W) + b)

,但后来建议您使用tf.nn.softmax_cross_entropy_with_logits定义跨渗透性,这将使意外执行以下操作变得容易:

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)

这将通过SoftMax两次发送您的逻辑(tf.matmul(x, W) + b(,这导致我被卡在67%的精度上。

但是,我注意到即使解决此问题仍然使我达到了非常不稳定的80-90%精度,这使我进入了下一期:

2(tf.nn.softmax_cross_entropy_with_logits((已弃用

他们尚未更新教程,但是tf.nn.softmax_cross_entropy_with_logits页面指示此功能已被弃用。

在GitHub上的示例代码中,他们已将其替换为tf.losses.sparse_softmax_cross_entropy(labels=y_, logits=y)

但是,您不能仅仅将功能交换 - 示例代码还更改了许多其他行的维度。

我第一次对这样做的任何人的建议是从github下载当前的工作示例代码,并尝试将其与教程概念匹配,而无需从字面上采用指令。希望他们能更新它!

最新更新