在 Tensorboard 中绘制各个层的梯度
Plot Gradients of Individual Layers in Tensorboard
我有一个 GCMLE 实验,我想在张量流中绘制分层渐变的全局范数。我可以在 tensorflow 中使用所有梯度的全局范数,但我想专门为嵌入绘制梯度。这是我当前的代码
gradients, variables = zip(*train_op.compute_gradients(loss))
tf.summary.scalar("gradients", tf.global_norm(gradients))
我也知道我应该能够使用 tf.trainable_variables()
获取所有变量,但我不确定分离每一层的最简单方法是什么?我猜我需要知道每个 layer/variable 名称并创建代表感兴趣的特定变量的张量?我认为它需要像这样:
list_of_embedding_variables = [somehow grab the relevant names from tf.trainable_variables]
embedding_gradients = [g for g,v in zip(gradients, variables) if variables in list_of_embedding_variables]
tf.summary.scalar("embedding_gradients", tf.global_norm(gradients))
因为我 运行 这是一个 GCMLE 实验,所以我无权访问 sess.run()/打印所有变量名称。有什么方法可以查看 GCMLE 实验保存的图中 tf.trainable_variables() 的列表?或者在 tensorboard 中显示这些变量名?
选项 1
我的一个想法是我应该创建感兴趣的变量的集合——例如,如果我的嵌入序列是:
embedding_sequence = tf.contrib.layers.embed_sequence(sequence,
vocab_size=n_tokens, embed_dim=word_embedding_size)
tf.add_to_collection("embedding_collection", embedding_sequence)
tf.summary.scalar("embedding_gradients",tf.global_norm(tf.get_collection("embedding_collection")
像这样:
grads_and_vars=train_op.compute_gradients(loss)
for g, v in grads_and_vars:
if g is not None:
#print(format(v.name))
grad_hist_summary = tf.summary.histogram("{}/grad_histogram".format(v.name), g)
sparsity_summary = tf.summary.scalar("{}/grad/sparsity".format(v.name), tf.nn.zero_fraction(g))
train_summary.append(grad_hist_summary)
train_summary.append(sparsity_summary)
tf.summary.merge(train_summary)
让我知道这是否有效。
我有一个 GCMLE 实验,我想在张量流中绘制分层渐变的全局范数。我可以在 tensorflow 中使用所有梯度的全局范数,但我想专门为嵌入绘制梯度。这是我当前的代码
gradients, variables = zip(*train_op.compute_gradients(loss))
tf.summary.scalar("gradients", tf.global_norm(gradients))
我也知道我应该能够使用 tf.trainable_variables()
获取所有变量,但我不确定分离每一层的最简单方法是什么?我猜我需要知道每个 layer/variable 名称并创建代表感兴趣的特定变量的张量?我认为它需要像这样:
list_of_embedding_variables = [somehow grab the relevant names from tf.trainable_variables]
embedding_gradients = [g for g,v in zip(gradients, variables) if variables in list_of_embedding_variables]
tf.summary.scalar("embedding_gradients", tf.global_norm(gradients))
因为我 运行 这是一个 GCMLE 实验,所以我无权访问 sess.run()/打印所有变量名称。有什么方法可以查看 GCMLE 实验保存的图中 tf.trainable_variables() 的列表?或者在 tensorboard 中显示这些变量名?
选项 1
我的一个想法是我应该创建感兴趣的变量的集合——例如,如果我的嵌入序列是:
embedding_sequence = tf.contrib.layers.embed_sequence(sequence,
vocab_size=n_tokens, embed_dim=word_embedding_size)
tf.add_to_collection("embedding_collection", embedding_sequence)
tf.summary.scalar("embedding_gradients",tf.global_norm(tf.get_collection("embedding_collection")
像这样:
grads_and_vars=train_op.compute_gradients(loss)
for g, v in grads_and_vars:
if g is not None:
#print(format(v.name))
grad_hist_summary = tf.summary.histogram("{}/grad_histogram".format(v.name), g)
sparsity_summary = tf.summary.scalar("{}/grad/sparsity".format(v.name), tf.nn.zero_fraction(g))
train_summary.append(grad_hist_summary)
train_summary.append(sparsity_summary)
tf.summary.merge(train_summary)
让我知道这是否有效。