TensorFlow 梯度下降后权重的更新

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 的工作。

Ami*_*mir 2

看一下下面来自Tensorflow官网的图片的下图,它解释了 Graph 和 Session 的概念:

\n\n

在此输入图像描述

\n\n

根据文档:

\n\n
    \n
  • 调用 tf.constant() 创建一个生成值的操作,并将其添加到默认图表中。
  • \n
  • 调用 tf.matmul(x, y) 创建一个单独的操作,将 tf.Tensor 对象 x 和 y 的值相乘,将其添加到默认图形中,并返回一个表示相乘结果的 tf.Tensor
  • \n
  • 调用tf.train.Optimizer.minimize会将操作和张量添加到计算梯度的默认图形中,并返回一个操作,该操作在运行时会将这些梯度应用于一组变量。
  • \n
\n\n
\n

运行 \xe2\x80\x9csession.run()\xe2\x80\x9d 时,变量权重和偏差\n 将被更新。

\n
\n\n

实际上它们的计算值并未更新。例如,看看下面的例子:

\n\n
a = 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

\n