为什么张量没有连接到TensorBoard中的渐变?

时间:2019-09-04 12:29:01

标签: python tensorflow tensorboard

为了练习,我想在tensorflow中实现一个模型,该模型可以使我返回输入的平方。我的代码正常工作,但是当我在TensorBoard中查看计算图时,LOSS操作未连接到Gradients子图,也未连接到Adam。为什么是这样?据我了解,计算梯度,张量流必须推导损失。

这是我的代码:

import numpy as np
import tensorflow as tf

np_inp = np.array([3, 6, 4, 2, 9, 11, 0.48, 22, -2.3, -0.48])
np_outp = np.power(np_inp, 2)

inputs = tf.Variable(np_inp, name='input', trainable=False)
outputs = tf.Variable(np_outp, name='output', trainable=False)

multiplier = tf.Variable(0.1,                          
                             dtype=tf.float64, trainable=True, name='multiplier')

mul = inputs * multiplier
predict = tf.square(mul, name='prediction')

loss = tf.math.reduce_sum(tf.math.square(predict-outputs), name='LOSS')
optimizer = tf.train.AdamOptimizer(0.1)
to_minimize = optimizer.minimize(loss)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

logs_path = "./logs/unt"  # path to the folder that we want to save the logs for Tensorboard
train_writer = tf.summary.FileWriter(logs_path, sess.graph)

for i in range(100):
  sess.run(to_minimize)
print(sess.run({'mult':multiplier}))

张量板: https://gofile.io/?c=jxbWiG

谢谢!

1 个答案:

答案 0 :(得分:1)

这可能是反直观的,但是损失的实际值并未用于训练本身(尽管可以将其绘制出来以查看其进度)。优化器通常使用的是梯度,即每个变量的每次变化将如何影响损耗值。为了计算该张量,创建一个与LOSS形状相同但被一个张量填充的张量,并通过反向传播计算每个操作的梯度。如果您在图形中打开gradients框,则会看到一个LOSS_grad框。

LOSS_grad

它是由几个节点构成的张量,因为某些事物相对于自身的梯度始终是一个。从那里开始,计算其余的梯度。