最近要對模型進行壓縮使用slimming,因此需要scale層對scale_diff進行l1正則。所以對原始碼進行了閱讀。
公式: y = ax + b。
公式比較簡單。上述公式的意思是,對feature map乘以a,並加b。乙個feature map共用乙個a,因此 a的維度是 c ,這是理解原始碼的前提。
反向傳播:
> bias_layer_; //對於偏置項的學習直接呼叫bias 層
vector
*> bias_bottom_vec_;
vector
bias_propagate_down_;
int bias_param_id_;
blobsum_multiplier_; //儲存
blobsum_result_;
blobtemp_;
int axis_;
int outer_dim_, scale_dim_, inner_dim_;
template
void scalelayer::backward_cpu(const
vector
*>& top,
const
vector
& propagate_down, const
vector
*>& bottom)
const
bool scale_param = (bottom.size() == 1);
blob* scale = scale_param ? this->blobs_[0].get() : bottom[1];
if ((!scale_param && propagate_down[1]) ||
(scale_param && this->param_propagate_down_[0])) else
if (sum_result_.count() == 1) else
} else
if (outer_dim_ != 1) else
} else }}
} if (propagate_down[0]) }}}
caffe原始碼 之 Relu層
本文主要實現caffe框架中 src caffe layers relu layer.cpp檔案,該檔案實現的是啟用函式relu。relu是近些年非常流行的啟用函式。相比於sigmoid與tanh,它具有一定的優越性,這三者對比可見它的函式公式是f x max 0,x 換句話說,這個啟用函式就是乙個...
caffe原始碼 卷積層
input 3 5 5 c h w pading 1 步長 2 卷積核 2 3 3 3 n c k k output 2 3 3 c h w 如下圖所示 首先需要理解caffe裡面的im2col和col2im 然後 卷積層 其實和 全連線層 差不多了 input 3 4 4 c h w 卷積核 1 ...
Roi Pooling層caffe原始碼解讀
在看fasterrcnn以及和maskrcnn的時候,發現自己對fasterrcnn的roi pooling層的原理還是不是很明白,之前只是知道roi pooling是將rpn輸出的乙個roi的區域對映成乙個固定大小的map,再送入後面的分類層進行分類。最近看了下roi pooling層的原始碼,頓...