Вы можете использовать функцию tf.gradients()
для вычисления градиента любого скалярного тензора по отношению к любому другому тензора (предполагая, что градиенты определяются для всех OPS между этими двумя тензорами):
activations = ...
loss = f(..., activations) # `loss` is some function of `activations`.
grad_wrt_activations, = tf.gradients(loss, [activation])
Визуализируя это в TensorBoard сложно, поскольку grad_wrt_activation
(обычно) представляет собой тензор с той же формой, что и activation
. Добавление tf.histogram_summary()
op, вероятно, самый простой способ визуализации
# Adds a histogram of `grad_wrt_activations` to the graph, which will be logged
# with the other summaries, and shown in TensorBoard.
tf.histogram_summary("Activation gradient", grad_wrt_activations)
Да, это именно то, что я хочу. – anders
Граф вычисляет градиенты дважды, когда используются как opt.compute_gradients(), так и tf.gradients()? Есть ли дополнительные вычислительные затраты? – anders
Граф будет содержать две копии узлов, связанных с градиентом, если вы вызываете как 'opt.compute_gradients()', так и 'tf.gradients()', но сервер должен удалять эти узлы во время исключения общего подвыражения (если нет, это будет ошибкой). – mrry