首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorboard中各层的地块梯度

Tensorboard中各层的地块梯度
EN

Stack Overflow用户
提问于 2018-02-09 15:31:21
回答 1查看 2.3K关注 0票数 3

我有一个GCMLE实验,我想画出tensorflow中分层梯度的整体范数。我可以绘制tensorflow中所有梯度的全局范数,但我想专门为嵌入绘制梯度。这是我目前的代码

代码语言:javascript
复制
gradients, variables = zip(*train_op.compute_gradients(loss))
tf.summary.scalar("gradients", tf.global_norm(gradients)) 

我也知道,我应该能够获得所有的变量使用tf.trainable_variables(),但我不知道什么是最容易的方式分开每一层?我猜我需要知道每个层/变量名,并创建表示感兴趣的特定变量的张量?我想应该是这样的:

代码语言:javascript
复制
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()列表吗?还是把这些变量的名字显示在张卡上?

选项1

其中一个想法是,我应该创建感兴趣的变量的集合--例如,如果我的嵌入序列是:

代码语言:javascript
复制
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")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-09 17:27:58

就像这样:

代码语言:javascript
复制
        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)

如果这有用的话请告诉我。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48709128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档