TensorFlow:如何在急切执行中检查梯度和权重?

时间:2019-09-08 23:55:10

标签: tensorflow gradient-descent eager-execution

我正在使用TensorFlow 1.12进行急切的执行,并且我想在训练期间检查调试中不同点的渐变值和权重。 This answer使用TensorBoard来获得各个时期的权重和梯度分布的漂亮图形,这就是我想要的。但是,当我使用Keras' TensorBoard callback时,我得到了:

WARNING:tensorflow:Weight and gradient histograms not supported for eagerexecution, setting `histogram_freq` to `0`.

换句话说,这与急切执行不兼容。还有其他打印渐变和/或维斯的方法吗?大多数非TensorBoard答案似乎都依赖于基于图的执行。

1 个答案:

答案 0 :(得分:2)

在急切执行中,您可以直接打印砝码。至于梯度,可以使用tf.GradientTape来获得损失函数相对于某些权重的梯度。这是显示如何打印渐变和权重的示例:

import tensorflow as tf

tf.enable_eager_execution()

x = tf.ones(shape=(4, 3))
y = tf.ones(shape=(4, 1))
dense = tf.layers.Dense(1)

# Print gradients
with tf.GradientTape() as t:
    h = dense(x)
    loss = tf.losses.mean_squared_error(y, h)
gradients = t.gradient(loss, dense.kernel)
print('Gradients: ', gradients)

# Print weights
weights = dense.get_weights()
print('Weights: ', weights)