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

时间:2016-11-17 12:27:10

标签: 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))

compute_gradients

  

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

但我没有" GradValue" + VariableName格式符合预期,但只看到[-0.58050966]; [-0.33137798]之类的值而没有变量名。如何打印变量名称?

1 个答案:

答案 0 :(得分:4)

如您所述,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)