6

我在 Eager Execution 中使用 TensorFlow 1.12,我想在训练期间检查不同点的梯度值和权重以进行调试。这个答案使用 TensorBoard 来获得很好的权重和梯度分布图,这正是我想要的。但是,当我使用Keras 的 TensorBoard 回调时,我得到了这个:

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

换句话说,这与急切执行不兼容。有没有其他方法可以打印梯度和/或权重?大多数非 TensorBoard 的答案似乎都依赖于基于图形的执行。

4

1 回答 1

3

在 Eager Execution 中,您可以直接打印权重。至于梯度,您可以使用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)
于 2019-09-11T10:02:38.790 回答