smm*_*smm 5 python neural-network tensorflow
我是 tensorflow 和神经网络的新手。我试图理解,在执行梯度下降函数后权重如何更新?示例代码如下。
with graph.as_default():
weights = tf.Variable(
tf.truncated_normal([image_size * image_size, num_labels]))
biases = tf.Variable(tf.zeros([num_labels]))
logits = tf.matmul(train_dataset, weights) + biases
loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=train_labels, logits=logits))
loss=loss+tf.multiply(beta, nn.l2_loss(weights))
optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
with tf.Session(graph=graph) as session:
tf.global_variables_initializer().run()
_, l, predictions = session.run([optimizer, loss, train_prediction])
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,当运行“session.run()”时,变量权重和偏差将被更新。它会在“GradientDescentOptimizer”计数的任何值的上下文中更新还是只是另一组“truncated_normal”值?
如果正则化应用如下,
loss=loss+tf.multiply(beta, nn.l2_loss(weights))
Run Code Online (Sandbox Code Playgroud)
那么,张量流如何知道在正则化权重的上下文中更新权重的正确变量是什么?我没有得到 TF 的工作。
看一下下面来自Tensorflow官网的图片的下图,它解释了 Graph 和 Session 的概念:
\n\n\n\n根据文档:
\n\n\n\n\n运行 \xe2\x80\x9csession.run()\xe2\x80\x9d 时,变量权重和偏差\n 将被更新。
\n
实际上它们的计算值并未更新。例如,看看下面的例子:
\n\na = tf.Variable(2)\nwith tf.Session() as sess:\n sess.run(a.initializer)\n print(sess.run(a))\n
Run Code Online (Sandbox Code Playgroud)\n\n在此示例中,不会发生任何更新。
\n\n再看一遍上面的图片,正如你在图片中看到的那样,当我们前进时,我们了解哪些参数需要更新,因此在后退时,参数根据损失进行更新SGD optimizer
。
归档时间: |
|
查看次数: |
1243 次 |
最近记录: |