看来网络没有在第一到第三层学到任何东西。最后一层确实发生了变化,这意味着渐变可能存在问题(如果您手动进行了篡改),则只能通过优化权重或最后一层来限制学习到最后一层。吞噬所有的错误。也可能是只有偏见才被发现。虽然网络似乎在学习一些东西,但它可能没有充分利用其潜力。这里需要更多的上下文,但是尝试学习率(例如使用较小的上下文)可能值得一试。
通常,直方图显示一个值相对于其他值的出现次数。简而言之,如果可能的值在0..9
的范围内,并且在值0
上看到数量为10
的尖峰,则意味着10个输入假定值为0
;相反,如果直方图显示所有值0..9
的平稳期为1
,则意味着对于10个输入,每个可能的值0..9
恰好出现一次。当您通过直方图的总和对所有直方图值进行归一化时,也可以使用直方图来可视化概率分布。如果这样做,您将直观地获得某个值(在x轴上)出现的可能性(与其他输入相比)。
现在对于layer1/weights
,平稳意味着:
- 大多数权重在-0.15到0.15的范围内
- (几乎)权重具有这些值中的任何一个(即,它们(几乎)均匀分布)
所述不同,几乎相同数量的权重具有值-0.15
, 0.0
, 0.15
和之间的一切。有些权重的值会稍微更小或更高。简而言之,这看起来只是权重已使用均值为零且范围为-0.15..0.15
...给予或接受的均匀分布进行了初始化。如果确实使用统一初始化,则这在尚未训练网络时很典型。
相比之下, layer1/activations
形成了类似钟形曲线(高斯)的形状:值以特定值为中心,在这种情况下为0
,但是它们也可以大于或小于该值(由于对称,因此也可能更大或更小) 。大多数值在0
的平均值附近出现,但值的范围从-0.8
到0.8
。我假设将layer1/activations
作为批次中所有图层输出的分布。您可以看到这些值确实会随着时间而变化。
第4层直方图没有告诉我任何具体信息。从形状,它只是表明周围的一些权重值-0.1
, 0.05
和0.25
趋向于以更高的概率发生;原因可能是,每个神经元的不同部分实际上接收相同的信息,并且基本上是多余的。这可能意味着您实际上可以使用较小的网络,或者您的网络有可能学习更多的区别功能以防止过度拟合。这些只是假设。
另外,如下面的评论中所述,请添加偏差单位。通过将它们排除在外,您正在将网络强制约束到可能无效的解决方案。
0
在TensorBoard中查看和理解标量值确实非常简单。但是,尚不清楚如何理解直方图。
例如,它们是我的网络权重的直方图。
(在修复了bug之后,由于sunside)
解释这些的最佳方法是什么?第1层的权重看上去基本上是平坦的,这意味着什么?
我在这里添加了网络构建代码。