如何在 TensorFlow 中使用变量名称打印当前变量梯度值?

Bra*_* Ds 4 tensorflow

我想打印当前变量梯度值以及所有变量的名称。

我正在使用以下代码:

import tensorflow as tf
import numpy as np

x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name = "Wvar")
b = tf.Variable(tf.zeros([1]), name = "Bvar")
y = W * x_data + b

loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
grads_and_vars = optimizer.compute_gradients(loss)

train = optimizer.apply_gradients(grads_and_vars)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for step in range(201):
     sess.run(train)
     if step % 50 == 0:
       for gv in grads_and_vars:
            print(str(sess.run(gv[0])) + " - " + str(sess.run(gv[1].name)))
            #print(step, sess.run(W), sess.run(b))
Run Code Online (Sandbox Code Playgroud)

计算梯度

返回:(梯度,变量)对的列表。

但我没有得到预期的“GradValue”+ VariableName 格式,但只看到[-0.58050966]; [-0.33137798]没有变量名称的值。如何打印变量名称?

syg*_*ygi 5

正如您所指出的,compute_gradients返回对列表(梯度,值)。要打印渐变的值,您需要run在会话中使用它。另一方面,变量的名称是静态的,因此您只需要执行以下操作:

for step in range(201):
     sess.run(train)
     if step % 50 == 0:
       for gv in grads_and_vars:
            print(str(sess.run(gv[0])) + " - " + gv[1].name)
Run Code Online (Sandbox Code Playgroud)