如何在caffe中增加一層新的layer呢?主要分為四步:
(1)在./src/caffe/proto/caffe.proto 中增加對應layer的paramter message;
(2)在./include/caffe/***layers.hpp中增加該layer的類的宣告,***表示有common_layers.hpp,
data_layers.hpp, neuron_layers.hpp, vision_layers.hpp 和loss_layers.hpp等;
(3)在./src/caffe/layers/目錄下新建.cpp和.cu(gpu)檔案,進行類實現。
(4)在./src/caffe/gtest/中增加layer的測試**,對所寫的layer前傳和反傳進行測試,測試還包括速度。(可省略,但建議加上)
這位博主新增了乙個計算梯度的網路層,簡介明了:
這幾位博主增加了自定義的loss層,可供參考:
我以新增precision_recall_loss層來學習**,主要是precision_recall_loss_layer.cpp的實現
#include #include#include
#include
#include
#include
"caffe/layer.hpp
"#include
"caffe/util/io.hpp
"#include
"caffe/util/math_functions.hpp
"#include
"caffe/vision_layers.hpp
"namespace
caffe
//進行維度變換
template void precisionrecalllosslayer::reshape(
const vector*> &bottom,
const vector*> &top)
//前向傳導
template
void precisionrecalllosslayer::forward_cpu(
const vector*> &bottom, const vector*> &top)
if (label_value == 0 && data_value >=thresh)
if (label_value == 1 && data_value if (label_value == 0 && data_value }
} //計算precision和recall
dtype precision = 0.0
; dtype recall = 0.0
;
if (true_positive + false_positive > 0
) else
if (true_positive == 0
)
if (true_positive + false_negative > 0
) else
if (true_positive == 0
)
if (prec_diff > fabs(precision -recall) //如果二c者相差小
&& precision > 0 && precision < 1
&& recall > 0 && recall < 1
)
} top[
0]->mutable_cpu_data()[0] += 1.0 -breakeven; //計算誤差
} top[
0]->mutable_cpu_data()[0] /=channels; //???
} //反向
template
void precisionrecalllosslayer::backward_cpu(
const vector*> &top,
const vector &propagate_down,
const vector*> &bottom)
} } #ifdef cpu_only
stub_gpu(precisionrecalllosslayer);
#endif //註冊該層instantiate_class(precisionrecalllosslayer);
register_layer_class(precisionrecallloss);
} //namespace caffe
template
void precisionrecalllosslayer::forward_cpu(
const vector*> &bottom, const vector*> &top)
if (label_value == 0 && data_value >= thresh)
if (label_value == 1 && data_value < thresh)
if (label_value == 0 && data_value < thresh)
} }
dtype precision = 0.0;
caffe框架下新增新層
新層yxylayer實現乙個特別簡單的功能,目的在於理解caffe中層的底層結構。yxylayer的功能 正向就是乙個直接複製的過程,反向將梯度縮放制定的倍數。有時我們的網路存在分支,但我們不希望某一分支影響之前層的更新,那麼我們就將梯度放縮0倍。該層只有乙個引數 diff scale,預設為1。在...
caffe學習系列 層解讀
層型別 accuracy layer 可以看到,caffe中計算accuracy時,是通過比較最後乙個全連線層 神經元個數 類別數 但沒有加入activation function 的輸出和資料集的labels來得到的,計算過程在accuracylayer中實現 我也一直非常困惑,計算accurac...
caffe下新增新的loss層
caffe的使用當中,最神秘的就是caffe的原始碼,而我們要做一些創新點的話,基本上都是要修改caffe的原始碼。小魚和大家分享怎麼在caffe下新增新的層。比如要新增乙個新的loss函式 euclidean loss norm layer 1 需要編寫相應的euclidean loss norm...