Machine learning 如何用调试信息解释caffe日志?
当在培训过程中遇到困难(,等等)时,有时通过在Machine learning 如何用调试信息解释caffe日志?,machine-learning,neural-network,deep-learning,caffe,gradient-descent,Machine Learning,Neural Network,Deep Learning,Caffe,Gradient Descent,当在培训过程中遇到困难(,等等)时,有时通过在'solver.prototxt'文件中设置查看更详细的培训日志是有用的 然后,培训日志看起来像: 这是什么意思?乍一看,您可以看到此日志部分分为两部分:[向前]和[向后]。回想一下,神经网络训练是通过正向反向传播完成的: 将训练示例(批处理)送入网络,向前传递输出当前预测。 根据这一预测,计算损失。 然后导出损耗,并估计梯度,并使用该梯度向后传播 Caffe数据结构 只是快速重新盖上盖子。Caffe使用Blob数据结构来存储数据/权重/参数等。在本
'solver.prototxt'
文件中设置查看更详细的培训日志是有用的
然后,培训日志看起来像:
这是什么意思?乍一看,您可以看到此日志部分分为两部分:
[向前]
和[向后]
。回想一下,神经网络训练是通过正向反向传播完成的:将训练示例(批处理)送入网络,向前传递输出当前预测。
根据这一预测,计算损失。 然后导出损耗,并估计梯度,并使用该梯度向后传播 Caffe数据结构
只是快速重新盖上盖子。Caffe使用
Blob
数据结构来存储数据/权重/参数等。在本次讨论中,需要注意的是Blob
有两个“部分”:data
和diff
。Blob
的值存储在数据部分中。diff
部分用于存储反向传播步骤的元素梯度
向前传球
您将在日志的这一部分中看到从下到上列出的所有层。对于每个层,您将看到:
层“conv1”
是一个卷积层,它有两个参数blob:过滤器和偏置。因此,日志有三行。筛选器blob(param blob 0
)具有数据
即卷积滤波器权重的当前L2范数为0.00899。
当前偏差(param blob 1
):
这意味着当前偏差设置为0
最后但并非最不重要的一点是,“conv1”
层有一个输出,“top”
名为“conv1”
(多么原始…)。输出的L2范数为
请注意,[Forward]
过程的所有L2值都报告在相关BLOB的数据部分
损耗和梯度
在[Forward]
过程的末尾是丢失层:
在此示例中,批次损失为2031.85,计算损失的梯度w.r.t.fc1
,并将其传递给diff
部分fc1
Blob。梯度的L2量级为0.1245
向后传球
其余所有图层都自上而下列在该部分中。您可以看到,现在报告的L2震级属于BLOB的diff
部分(参数和层的输入)
最后
此迭代的最后一行日志:
报告数据和梯度的L1和L2总震级
我应该找什么?
如果有,请查看数据或差异在哪一点变成nan
:在哪一层?在哪个迭代中
看看梯度大小,它们应该是合理的。如果您开始看到带有e+8
的值,则您的数据/梯度开始膨胀。降低你的学习速度
请确保diff
s不为零。零差异意味着没有梯度=没有更新=没有学习。如果从随机权重开始,考虑生成具有较高方差的随机权重。
查看激活(而不是渐变)是否变为零。如果您正在使用,这意味着您的输入/权重将引导您进入ReLU门“未激活”的区域,从而导致。考虑在ReLU中规范化你的输入为零均值,添加层,设置<代码>负斜率< /代码>。
@thigi这取决于架构:例如,如果您使用ReLU
激活,并且输入数据
为零,则梯度为零。然后你可以考虑改变“工作点”,例如减去平均值。或者,您可以将ReLU
替换为PReLU
。@Hossein,L1表示参数的绝对值之和,而L2表示平方值之和。L2表示权重的“能量”。这两个量都表示权重的“大小”。e-8
表示的是0.00000001
的数量级:您的梯度正在消失,而不是消失exploding@Shai:是,适用于所有层。但现在已经解决了。@Shai:谢谢Shai。事实上,我已经解决了这个问题,使用了针对这类问题的预先训练的模型。但你的观点可能对其他人有用。
I1109 ...] [Forward] Layer data, top blob data data: 0.343971
I1109 ...] [Forward] Layer conv1, top blob conv1 data: 0.0645037
I1109 ...] [Forward] Layer conv1, param blob 0 data: 0.00899114
I1109 ...] [Forward] Layer conv1, param blob 1 data: 0
I1109 ...] [Forward] Layer relu1, top blob conv1 data: 0.0337982
I1109 ...] [Forward] Layer conv2, top blob conv2 data: 0.0249297
I1109 ...] [Forward] Layer conv2, param blob 0 data: 0.00875855
I1109 ...] [Forward] Layer conv2, param blob 1 data: 0
I1109 ...] [Forward] Layer relu2, top blob conv2 data: 0.0128249
.
.
.
I1109 ...] [Forward] Layer fc1, top blob fc1 data: 0.00728743
I1109 ...] [Forward] Layer fc1, param blob 0 data: 0.00876866
I1109 ...] [Forward] Layer fc1, param blob 1 data: 0
I1109 ...] [Forward] Layer loss, top blob loss data: 2031.85
I1109 ...] [Backward] Layer loss, bottom blob fc1 diff: 0.124506
I1109 ...] [Backward] Layer fc1, bottom blob conv6 diff: 0.00107067
I1109 ...] [Backward] Layer fc1, param blob 0 diff: 0.483772
I1109 ...] [Backward] Layer fc1, param blob 1 diff: 4079.72
.
.
.
I1109 ...] [Backward] Layer conv2, bottom blob conv1 diff: 5.99449e-06
I1109 ...] [Backward] Layer conv2, param blob 0 diff: 0.00661093
I1109 ...] [Backward] Layer conv2, param blob 1 diff: 0.10995
I1109 ...] [Backward] Layer relu1, bottom blob conv1 diff: 2.87345e-06
I1109 ...] [Backward] Layer conv1, param blob 0 diff: 0.0220984
I1109 ...] [Backward] Layer conv1, param blob 1 diff: 0.0429201
E1109 ...] [Backward] All net params (data, diff): L1 norm = (2711.42, 7086.66); L2 norm = (6.11659, 4085.07)
I1109 ...] [Forward] Layer conv1, top blob conv1 data: 0.0645037
I1109 ...] [Forward] Layer conv1, param blob 0 data: 0.00899114
I1109 ...] [Forward] Layer conv1, param blob 1 data: 0
I1109 ...] [Forward] Layer conv1, param blob 0 data: 0.00899114
I1109 ...] [Forward] Layer conv1, param blob 1 data: 0
I1109 ...] [Forward] Layer conv1, top blob conv1 data: 0.0645037
I1109 ...] [Forward] Layer loss, top blob loss data: 2031.85
I1109 ...] [Backward] Layer loss, bottom blob fc1 diff: 0.124506
[Backward] All net params (data, diff): L1 norm = (2711.42, 7086.66); L2 norm = (6.11659, 4085.07)