在TensorFlow中,似乎我们必须将输入传播到顶层一次以计算当前训练错误,并再传播一次以进行参数更新。
在the Tensorflow MNIST example的底部,行:
train_accuracy = accuracy.eval(feed_dict={
x:batch[0], y_: batch[1], keep_prob: 1.0})
用于计算准确性,这需要前馈过程。
接下来,行
train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
用于更新权重参数。我认为这个过程还需要首先进行前馈传播以获得网络输出,以便可以计算反向传播算法的均方误差。
我们是否真的需要经历两次整个网络才能获得当前的训练错误并更新参数???
答案 0 :(得分:2)
无需经历两次。查看其他示例,例如mnist/convolutional.py:
_, l, lr, predictions = s.run(
[optimizer, loss, learning_rate, train_prediction],
feed_dict=feed_dict)
您在运行中同时拉动两个节点,同时获得完成的训练和列车预测。这是标准的培训方式。
一般来说,我建议先查看模型/中的示例。 “红色药丸”和“蓝色药丸”的例子意味着对张量流的非常温和的介绍,但模型中的例子更加真实。它们不是生产,但它们更接近你想要做的事情。