TensorBoard 具有在会话时绘制张量直方图的功能。我想要训练期间梯度的直方图。
tf.gradients(yvars,xvars)
返回一个渐变列表。
然而,tf.histogram_summary('name',Tensor)
仅接受张量,而不接受张量列表。
暂时,我做了一个解决方法。我将所有张量展平为列向量并将它们连接起来:
for l in xrange(listlength):
col_vec = tf.reshape(grads[l],[-1,1])
g = tf.concat(0,[g,col_vec])
grad_hist = tf.histogram_summary("name", g)
绘制梯度直方图的更好方法是什么?
这似乎是一件很常见的事情,所以我希望 TensorFlow 能有一个专门的函数来做这件事。
另一种解决方案(基于这个知乎答案 https://www.quora.com/Are-there-any-examples-of-tensorflow-that-shows-how-to-monitor-the-jacobian-and-or-the-hessian#uzPgw)是直接从您已经使用的优化器访问梯度。
optimizer = tf.train.AdamOptimizer(..)
grads = optimizer.compute_gradients(loss)
grad_summ_op = tf.summary.merge([tf.summary.histogram("%s-grad" % g[1].name, g[0]) for g in grads])
grad_vals = sess.run(fetches=grad_summ_op, feed_dict = feed_dict)
writer['train'].add_summary(grad_vals)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)