debug_info
在我们使用caffe训练网络的时候发现loss值输出不正常,第一反应就是想输出各层的中间结果进行检查。
caffe提供了一个debug_info参数作为是否输出调试信息的标志。但是,当加了这个参数,发现输出的内容让你一脸懵逼。。。像下面这张图:
d第一眼,我们可以看懂,目前计算的是向前传播阶段([Foward]),紧跟着好像是网络层名称,然后就是数据,至于是什么数据,无穷懵逼。。。
details
其实,这个debug信息格式很简单,由以下四部分组成:
- [Forward]/[Backward]:顾名思义就是提示网络进行哪个阶段的计算
- Layer XXX: 这个就是指出是哪个网络层计算的结果
- param blob x data / top blob XXX data: 这个是说明后面的数据是该层的参数/结果(x是指第x个参数,XXX是指该层网络层名字)
- data : 指代具体的计算数值,该数值是指对对应的计算结果进行绝对值取平均( ∑|xi|N )如果是该层参数,就计算该层参数的绝对值平均;如果是该层输出,就是该层输出的绝对值平均
最后一行All net params (data, diff): 则是分别计算了整个网络参数的绝对值平均和整个网络参数的和开根号(即L2 norm)。
如何了解每个param blob表示的什么意思呢?
- 第一种,通用层。它的blob一般由weight,bias组成(即blob 0: weight, blob 1: bias)
- 第二种,特殊层。 这里列举BatchNorm为例:首先可以通过查看BatchNorm的头文件来了解,如果头文件没有详细说明,可以到源文件查看。如何查看呢?首先找this->blob_这类的,一般参数都会存储在此,然后联系上下文揣测出意思。
了解了这些数字的意思,对网络训练的过程也更加清晰,对于调参也有所帮助。
2017-3-28 记