Python TensorFlow中梯度下降后的权值更新

Python TensorFlow中梯度下降后的权值更新,python,tensorflow,neural-network,Python,Tensorflow,Neural Network,我不熟悉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

我不熟悉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])
如果我理解正确,在运行“session.run()”时,变量权重和偏差将被更新。它是否会在“GradientDescentOptimizer”具有计数的任何值的上下文中更新,或者它只是另一组“截断的_normal”值

如果按如下方式应用正则化

loss=loss+tf.multiply(beta, nn.l2_loss(weights))

然后,tensorflow如何知道在正则化权重的上下文中更新权重的正确变量是什么?我不了解TF的工作原理。

请看下面的图片,其中解释了图形和会话概念:

根据文件:

  • 调用tf.constant()将创建一个生成值的操作,并将其添加到默认图形中
  • 调用tf.matmul(x,y)创建一个操作,该操作将tf.Tensor对象x和y的值相乘,将其添加到默认图形中,并返回表示相乘结果的tf.Tensor
  • 调用tf.train.Optimizer.minimize将向计算梯度的默认图形添加操作和张量,并返回一个操作,该操作在运行时将这些梯度应用于一组变量
运行“session.run()”时,变量的权重和偏差 将进行更新

实际上,它们的计算值没有更新。例如,请看以下示例:

a = tf.Variable(2)
with tf.Session() as sess:
    sess.run(a.initializer)
    print(sess.run(a))
在本例中,不会发生更新


再次查看上图,正如您在图中所看到的,当我们继续前进时,我们了解需要更新哪些参数,因此在后退时,根据SGD optimizer

的损失更新的参数最初是使用随机值初始化的
权重
偏差
。当您运行
session.run([…])
时,它将评估
优化器
损失
列车预测
以及这三个变量可能依赖的所有变量

例如,
优化器
依赖于
损失
列车标签上的
损失
登录
权重上的
登录
偏差
等等

当它到达终点(计算所有变量)时,它将根据
梯度下降算法更新
权重
偏差
(要了解tensorflow是如何实现的,您需要先了解梯度下降算法。查看此项)。它被称为“完成1
epoch
”。在您的情况下,您只使用了1个
epoch
,因此只有一个过程。准确性也不会那么好。要进一步优化它,请按如下方式使用:

epochs=100

with tf.Session(graph=graph) as session::
     tf.global_variables_initializer().run()
     for i in range(epochs):
         _, l, predictions = session.run([optimizer, loss, train_prediction])
这样,
session.run(…)
将运行100次,根据
loss
更新每次迭代中的
权重和
偏差

Tensorflow将更新所有使用
tf.Variable()初始化的变量。