代码之家  ›  专栏  ›  技术社区  ›  reese0106

在Tensorboard中绘制各个层的梯度

  •  3
  • reese0106  · 技术社区  · 6 年前

    我有一个GCMLE实验,我想在tensorflow中绘制逐层梯度的全局范数。我可以在tensorflow中使用所有梯度的全局范数,但我想专门为嵌入绘制梯度。这是我的当前代码

    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()/打印所有变量名。有没有办法查看tf列表。GCMLE实验中保存的图形中的trainable\u 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 回复  |  直到 6 年前
        1
  •  4
  •   Momin    6 年前

    类似这样:

            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)
    

    让我知道这是否有效。