前言
之前我都是用TensorBoard记录训练过程中的Loss、mAP等标量,很容易就知道TensorBoard里的SCALARS(标量)图是怎么看的(其中横纵轴的含义、Smoothing等)。
最近在尝试模型压缩,其中的一个步骤是对模型进行稀疏训练。
稀疏训练时需要记录模型中BN层的Gamma值的分布情况(取哪些值,这些值出现的次数/频度),这时用TensorBoard里的SCALARS之类的图就不合适了,而是应该用TensorBoard里的HISTOGRAMS(直方图)和DISTRIBUTIONS(暂未找到合适的译文)。
所以我昨天学习、了解了一点HISTOGRAMS和DISTRIBUTIONS,今天做了一部分简单记录,具体见下文。
正文
HISTOGRAMS和DISTRIBUTIONS这两种图的数据源是相同的,只是从不同的视角、以不同的方式来表示数据的分布情况。
下面先介绍HISTOGRAMS,再介绍DISTRIBUTIONS。
HISTOGRAMS
上图是TensorBoard生成的一个直方图(OFFEST模式),下面介绍图中几个元素的含义。
- 数据源
- 数据源是多个一维数组
- 也在别处看到有人说可以是多维数组,但会被压缩成一维数组,有兴趣的小伙伴可以具体研究一下
- 如果你只有1个数组,也是可以的
- 数据源是多个一维数组
- 当鼠标放在图上时出现的一条黑线和数字
- 鼠标放在图上出现的一条黑线,就对应数据源里的一个一维数组
- 上图中显示的黑线对应我的第41个数组的所有元素(index为40,因为index从0开始计数的)的取值的分布情况
- 图下方的横轴
- 横轴的值和数组内元素的取值对应
- 图右方的纵轴
- 纵轴的值对应着是哪一个数组,或者说对应了数组的id、index(上边提到的40)
- 颜色
- 可以看到上图中的颜色是渐变的,靠上(id小)的颜色深,靠下(id大)的颜色浅
- 上面的用词比较“学术化”,如果看不懂,就看下边的这个解释吧
- 我的数据有99个数组,index从0到98,但右侧的纵轴值只标到了90
- 数组元素的分布范围是横轴上的数字,可以看出我的每个数组中的元素的取值大约集中在0到0.2,超过1.5的元素很少
- 我的第40个数组(说法不严谨,准确地说是id为40)中大约有505个元素的值为0.536左右
- 如果还是不懂的话,建议先去看看直方图是什么
DISTRIBUTIONS
把HISTOGRAMS搞懂后,这个图就很好懂的,因为这个图的数据源和HISTOGRAMS一样。
- 横轴
- 横轴是对应哪个数组
- 纵轴
- 数组中元素的取值
- 颜色
- 颜色深代表对应值出现的频数高
- 如上图,我的99个数组从0到98,数组中元素的取值慢慢地趋近于0
参考链接
剪枝Github
https://github.com/tanluren/yolov3-channel-and-layer-pruning
HISTOGRAMS和DISTRIBUTIONS
https://www.cnblogs.com/rainydayfmb/p/7944224.html
https://vimsky.com/article/3645.html
https://www.jianshu.com/p/8fdc43e48c86
https://blog.csdn.net/wgj99991111/article/details/84708255
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!