Следуя предложению от @user728291, мне удалось просмотреть градиенты в тензометрическом шкафу, используя функцию optimize_loss
следующим образом. Функция вызова Синтаксис optimize_loss является
optimize_loss(
loss,
global_step,
learning_rate,
optimizer,
gradient_noise_scale=None,
gradient_multipliers=None,
clip_gradients=None,
learning_rate_decay_fn=None,
update_ops=None,
variables=None,
name=None,
summaries=None,
colocate_gradients_with_ops=False,
increment_global_step=True
)
Функция требует global_step
и зависит от некоторых других импорта, как показано ниже.
from tensorflow.python.ops import variable_scope
from tensorflow.python.framework import dtypes
from tensorflow.python.ops import init_ops
global_step = variable_scope.get_variable( # this needs to be defined for tf.contrib.layers.optimize_loss()
"global_step", [],
trainable=False,
dtype=dtypes.int64,
initializer=init_ops.constant_initializer(0, dtype=dtypes.int64))
Затем замените ваш типичный учебная операция
training_operation = optimizer.minimize(loss_operation)
с
training_operation = tf.contrib.layers.optimize_loss(
loss_operation, global_step, learning_rate=rate, optimizer='Adam',
summaries=["gradients"])
Тогда есть слияние заявление для ваших резюме
summary = tf.summary.merge_all()
Затем в tensorflow сессии на конец каждого r un/epoch:
summary_writer = tf.summary.FileWriter(logdir_run_x, sess.graph)
summary_str = sess.run(summary, feed_dict=feed_dict)
summary_writer.add_summary(summary_str, i)
summary_writer.flush() # evidently this is needed sometimes or scalars will not show up on tensorboard.
Место, где logdir_run_x
- это другой каталог для каждого запуска. Таким образом, когда TensorBoard работает, вы можете посмотреть каждый прогон отдельно. Градиенты будут находиться под вкладкой гистограммы и будут иметь метку OptimizeLoss
. Он отобразит все веса, все смещения и параметр beta
в качестве гистограмм.
UPDATE: Используя tf slim, есть другой способ, который также работает и, возможно, более чист.
optimizer = tf.train.AdamOptimizer(learning_rate = rate)
training_operation = slim.learning.create_train_op(loss_operation, optimizer,summarize_gradients=True)
Устанавливая summarize_gradients=True
, который не используется по умолчанию, вы будете затем получить градиент сводки для всех весов. Они будут отображаться в Tensorboard под summarize_grads
См функцию [optimize_loss] (https://github.com/tensorflow/tensorflow/blob/c936c06a20b867eaa868e9f2c4fb53856391b18f/tensorflow/contrib/layers/python/layers/optimizers.py#L41), который еще предстоит документированы.Либо используйте эту функцию для оптимизации, либо скопируйте ее [реализацию градиентных гистограмм] (https://github.com/tensorflow/tensorflow/blob/c936c06a20b867eaa868e9f2c4fb53856391b18f/tensorflow/contrib/layers/python/layers/optimizers.py#L114). – user728291
Спасибо user728291. Это очень помогло мне –