为什么张量没有连接到 TensorBoard 中的梯度?
Why tensors not connected to gradients in TensorBoard?
为了练习,我想在 tensorflow 中实现一个模型,它返回输入的平方。我的代码工作正常,但是当我查看 TensorBoard 中的计算图时,LOSS 操作没有连接到梯度子图,也没有连接到 Adam。为什么是这样?据我了解,计算梯度时,tensorflow 必须导出损失。
这是我的代码:
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
提前致谢!
这可能有悖于直觉,但损失的实际值并未用于训练本身(尽管绘制它以查看其进度可能很有用)。优化器一般使用的是梯度,即每个变量的每次变化对损失值的影响。为了计算这个,创建了一个与 LOSS
形状相同但填充了 1 的张量,并通过反向传播计算每个操作的梯度。如果您打开图表中的 gradients
框,您将看到代表此的 LOSS_grad
框。
它是使张量为 1 的几个节点,因为某物相对于自身的梯度始终为 1。从那里开始计算其余的梯度。
为了练习,我想在 tensorflow 中实现一个模型,它返回输入的平方。我的代码工作正常,但是当我查看 TensorBoard 中的计算图时,LOSS 操作没有连接到梯度子图,也没有连接到 Adam。为什么是这样?据我了解,计算梯度时,tensorflow 必须导出损失。
这是我的代码:
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
提前致谢!
这可能有悖于直觉,但损失的实际值并未用于训练本身(尽管绘制它以查看其进度可能很有用)。优化器一般使用的是梯度,即每个变量的每次变化对损失值的影响。为了计算这个,创建了一个与 LOSS
形状相同但填充了 1 的张量,并通过反向传播计算每个操作的梯度。如果您打开图表中的 gradients
框,您将看到代表此的 LOSS_grad
框。
它是使张量为 1 的几个节点,因为某物相对于自身的梯度始终为 1。从那里开始计算其余的梯度。