在Tensorboard中绘制单个层的梯度

时间:2018-02-09 15:31:21

标签: python tensorflow tensorboard google-cloud-ml

我有一个GCMLE实验,我想绘制张量流中层次渐变的全局范数。我可以在张量流中使用所有渐变的全局范数,但我想专门绘制仅用于嵌入的渐变。这是我目前的代码

gradients, variables = zip(*train_op.compute_gradients(loss))
tf.summary.scalar("gradients", tf.global_norm(gradients)) 

我也知道我应该能够使用tf.trainable_variables()获取所有变量,但我不确定分离每一层的最简单方法是什么?我猜我需要知道每个图层/变量名称并创建代表感兴趣的特定变量的张量?我认为它需要像:

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()/ print所有变量名称。有没有办法在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")

1 个答案:

答案 0 :(得分:2)

这样的事情:

        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)

让我知道这是否有效。