如何使用Tensorboard检测消失和爆炸的梯度?

时间:2020-02-19 01:10:19

标签: python tensorflow machine-learning deep-learning tensorboard

我有两个“子问题”

1)考虑到"un-deprecate write_grads for fit #31173"write_grads=True中目前不推荐使用Tensorboard callback的事实,我如何使用Tensorboard检测消失或爆炸的梯度?

2)我想我可以根据Tensorboard的Distributions and Histograms选项卡中的权重分布和直方图判断模型是否受到梯度消失的影响。我的问题是我没有可比较的参照系。当前,我的偏见似乎在“移动”,但我无法确定我的内核权重(Conv2D层)是否在“移动” /“改变”“足够”。有人可以通过经验法则在Tensorboard中进行视觉评估吗?即如果仅底部25%的内核权重在移动,那么这足够好/不够好吗?或者,也许有人可以从tensorBoard上发布两个消失梯度与非消失梯度的参考图像。

这是我的直方图和分布,是否可以判断我的模型是否受到消失梯度的影响? (为简洁起见,省略了一些图层)。谢谢。

enter image description here

enter image description here

enter image description here

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

我目前正面临着相同的问题,并且使用Tensorboard来解决该问题。

即使弃用了write_grads,您仍然可以通过将tf.keras.Model类子类化并使用{{1}中的gradient.Tape手动计算梯度来管理网络每一层的梯度}}方法。

类似的事情对我有用

train_step

然后,您应该能够可视化训练中任何训练步骤的梯度分布以及内核值的分布。

此外,可能值得尝试绘制随时间变化的规范分布而不是单个值。