Caffe 里 top[i]->cpu_diff() bottomp[i]->cpu_diff() 取出梯度,这些梯度在默认的情况下 caffe将其设置为0

来源:互联网 发布:云端网络 编辑:程序博客网 时间:2024/05/21 07:55

Caffe 里 top[i]->cpu_diff() bottomp[i]->cpu_diff() 取出梯度,这些梯度在默认的情况下 caffe将其设置为0,只有在有梯度往前传播,top和bottom的梯度发生更新后,才会有所改变
this->type():Convolution
top[0]->cpu_diff()[0]:0.000000
top[0]->cpu_diff()[1]:0.000000
top[0]->cpu_diff()[10]:0.000000
top[0]->cpu_diff()[20]:0.000000
top[0]->cpu_diff()[50]:0.000000
top[0]->cpu_diff()[60]:0.000000
top[0]->cpu_diff()[35]:0.000000

this->type():Convolution
top[0]->cpu_diff()[0]:0.000000
top[0]->cpu_diff()[1]:0.000000
top[0]->cpu_diff()[10]:0.000000
top[0]->cpu_diff()[20]:-0.001144
top[0]->cpu_diff()[50]:-0.000111
top[0]->cpu_diff()[60]:0.000000
top[0]->cpu_diff()[35]:0.000379

但是即使没有BP,网络的learnable_params还是会发生变化的,因为在没有BP的情况下,learnable_params的梯度保持为默认值0,但是还有weight decay,它会导致learnable_params的变化。
(gdb) p this->blobs_[0]->cpu_data()[0]
$80 = -0.283210695

(gdb) p this->blobs_[0]->cpu_data()[0]
$86 = -0.274512082

0 0