1、如何有效閱讀caffe原始碼
1、caffe原始碼閱讀路線最好是從src/cafffe/proto/caffe.proto開始,了解基本資料結構記憶體物件和磁碟檔案的一一對映關係,中間過程都由protobuffer工具自動完成。
2、看include/目錄中.hpp標頭檔案,通過標頭檔案類申明理解整個框架。從基類向派生類,掌握這些類。
3、看src/目錄中.cpp和.cu原始檔,亦可以按需求派生新的類。
4、編寫各類工具,整合到caffe內部,如tools/下就有訓練模型,提取特徵,轉換資料格式等工具。
2、relu啟用函式
啟用函式,用在各個卷積層和全連線層輸出位置。啟用函式是深度網路非線性的主要**。通常包括:simgoid(f(x)=(1+e-x)-1)和tanh(f(x)=sinhx/coshx,圖形類似於arctanx,但是值域是[-1,1])作為啟用函式。
用relu(f(x)=max(0,x))作為啟用函式的原因是:加速收斂、解決了梯度消失問題
3、relu函式caffe原始碼解析
在models/bvlc_alexnet/train_val.prototxt網路模型設定中找到了relu層描述
//relu層,新的非線性層
layer
下面開始按步驟解析原始碼:
3.1、閱讀src/cafffe/proto/caffe.proto中relu層引數
//儲存relu層引數的資料結構類
message reluparameter
optional engine engine = 2 [default = default];
}
3.2、閱讀include/caffe/layers/relu_layer.hpp中類申明
//標頭檔案中的 #ifndef/#define/#endif,防止該標頭檔案被重複引用
#ifndef caffe_relu_layer_hpp_
#define caffe_relu_layer_hpp_
#include #include "caffe/blob.hpp"
#include "caffe/layer.hpp"
#include "caffe/proto/caffe.pb.h"
#include "caffe/layers/neuron_layer.hpp"
//relulayer,派生於neuronlayer,實現了relu啟用函式計算
namespace caffe
//虛內聯函式,const成員函式,返回類名字串
virtual inline const char* type() const
protected: //bottom為輸入,top為輸出
//前向傳播函式
//cpu版本前饋實現
virtual void forward_cpu(const vector*>& bottom,
const vector*>& top);
//gpu版本前饋實現
virtual void forward_gpu(const vector*>& bottom,
const vector*>& top);
//反向傳播函式
//top為輸出blob,propagate_down為bottom索引,bottom為輸入blob
virtual void backward_cpu(const vector*>& top,
const vector& propagate_down, const vector*>& bottom);
virtual void backward_gpu(const vector*>& top,
const vector& propagate_down, const vector*>& bottom);
};} // namespace caffe
#endif // caffe_relu_layer_hpp_
3.3、閱讀src/caffe/layers/relu_layer.cpp中**
#include #include #include "caffe/layers/relu_layer.hpp"
namespace caffe
}template //定義反向傳播函式
void relulayer::backward_cpu(const vector*>& top,
const vector& propagate_down,
const vector*>& bottom)
}}#ifdef cpu_only
stub_gpu(relulayer);
#endif
instantiate_class(relulayer);
} // namespace caffe
零基礎學Python
零基礎學python 1 1 python是一門指令碼語言 2 python的優勢 1 語法和結構比較簡單,易入門 2 能夠跨平台使用 3 應用範圍廣,設計到作業系統 3d動畫 web 雲計算,企業應用等多方面。3 idle 是乙個python shell,類似於windows的cmd視窗 4 pr...
零基礎學C C
零基礎學c c 零基礎學c c 199 孿生素數 題目描述 在素數的大家庭中,大小相差為2的兩個素數稱之為一對 孿生素數 如3和5 17和19等。請你程式設計統計出不大於自然數n的素數中,孿生素數的對數。輸入一行乙個正整數n 1 n 10000 輸出若干行,每行2個整數,之間用乙個空格隔開,從小到大...
零基礎學python 一
每次學習語言總是要了解其背景python也不例外。首先python的創始人為 guido van rossum 1989年聖誕節期間,在 阿姆斯特丹 guido為了打發聖誕節的無趣,決心開發乙個新的指令碼 解釋程式 做為abc 語言的一種繼承。看看人家外鬼子程式設計師 哎不得不佩服。他在業餘時間開發...