上文中提到了6種啟用函式,本文主要是對於6種啟用函式在caffe中的實現**進行一下**解析。按照上文的順序:relu、sigmod、tanh、absval、power、bnll;
【在caffe中的實現主要在兩個檔案中,.hpp(標頭檔案)和.cpp,下面也是對這兩部分**的解析;
.hpp所在路徑:~/caffe-master/include/caffe .cpp所在路徑:~/caffe-master/src/caffe 】
1. relu
2. sigmod
3. tanh
4. absval
5. power
6. bnll
1. relu
relu_layer.hpp
#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"
namespace caffe
virtual inline const char* type() const
protected:
/*** @param bottom input blob vector (length 1)
* -# @f$ (n \times c \times h \times w) @f$
* the inputs @f$ x @f$
* @param top output blob vector (length 1)
* -# @f$ (n \times c \times h \times w) @f$
* the computed outputs @f$
* y = \max(0, x)
* @f$ by default. if a non-zero negative_slope @f$ \nu @f$ is provided,
* the computed outputs are @f$ y = \max(0, x) + \nu \min(0, x) @f$.
*/virtual void forward_cpu(const vector*>& bottom,
const vector*>& top);
virtual void forward_gpu(const vector*>& bottom,
const vector*>& top);
/*** @brief computes the error gradient w.r.t. the relu inputs.
** @param top output blob vector (length 1), providing the error gradient with
* respect to the outputs
* -# @f$ (n \times c \times h \times w) @f$
* containing error gradients @f$ \frac @f$
* with respect to computed outputs @f$ y @f$
* @param propagate_down see layer::backward.
* @param bottom input blob vector (length 1)
* -# @f$ (n \times c \times h \times w) @f$
* the inputs @f$ x @f$; backward fills their diff with
* gradients @f$
* \frac = \left\
* 0 & \mathrm \; x \le 0 \\
* \frac & \mathrm \; x > 0
* \end \right.
* @f$ if propagate_down[0], by default.
* if a non-zero negative_slope @f$ \nu @f$ is provided,
* the computed gradients are @f$
* \frac = \left\
* \nu \frac & \mathrm \; x \le 0 \\
* \frac & \mathrm \; x > 0
* \end \right.
* @f$.
*/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_
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
relu_layer.cu(gpu版本的實現)
#include #include #include "caffe/layers/relu_layer.hpp"
namespace caffe
}template void relulayer::forward_gpu(const vector*>& bottom,
const vector*>& top)
template __global__ void relubackward(const int n, const dtype* in_diff,
const dtype* in_data, dtype* out_diff, dtype negative_slope)
}template void relulayer::backward_gpu(const vector*>& top,
const vector& propagate_down,
const vector*>& bottom)
}instantiate_layer_gpu_funcs(relulayer);
} // namespace caffe
設計模式中類的6種關係
縱向關係 繼承 泛化 子類is a 父類。鳥和動物 實現 唐老鴨和說話 橫向關係 強弱程度依次為 組合 聚合 關聯 依賴依賴 依賴 使用關係 工具 中實現依賴關係時,通常將乙個類的物件作為另乙個類的作方法引數 方法中的區域性變數 或者靜態方法呼叫。單向。動物和水 關聯 結構關係 來往 中實現關聯關係...
設計模式中類的6種關係
縱向關係 繼承 泛化 子類is a 父類。鳥和動物 實現 唐老鴨和說話 橫向關係 強弱程度依次為 組合 聚合 關聯 依賴 依賴 依賴 使用關係 工具 中實現依賴關係時,通常將乙個類的物件作為另乙個類的作方法引數 方法中的區域性變數 或者靜態方法呼叫。單向。動物和水 關聯 結構關係 來往 中實現關聯關...
Pytorch中的啟用函式
介紹神經網路的時候已經說到,神經元會對化學物質的刺激進行,當達到一定程度的時候,神經元才會興奮,並向其他神經元傳送資訊。神經網路中的啟用函式就是用來判斷我們所計算的資訊是否達到了往後面傳輸的條件。因為如果使用線性的啟用函式,那麼input跟output之間的關係始終為線性的,這樣完全可以不使用網路結...