| namespace caffe { | |
| /** | |
| * @brief Computes @f$ y = x + \log(1 + \exp(-x)) @f$ if @f$ x > 0 @f$; | |
| * @f$ y = \log(1 + \exp(x)) @f$ otherwise. | |
| * | |
| * @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 = \left\{ | |
| * \begin{array}{ll} | |
| * x + \log(1 + \exp(-x)) & \mbox{if } x > 0 \\ | |
| * \log(1 + \exp(x)) & \mbox{otherwise} | |
| * \end{array} \right. | |
| * @f$ | |
| */ | |
| template <typename Dtype> | |
| class BNLLLayer : public NeuronLayer<Dtype> { | |
| public: | |
| explicit BNLLLayer(const LayerParameter& param) | |
| : NeuronLayer<Dtype>(param) {} | |
| virtual inline const char* type() const { return "BNLL"; } | |
| protected: | |
| /// @copydoc BNLLLayer | |
| virtual void Forward_cpu(const vector<Blob<Dtype>*>& bottom, | |
| const vector<Blob<Dtype>*>& top); | |
| virtual void Forward_gpu(const vector<Blob<Dtype>*>& bottom, | |
| const vector<Blob<Dtype>*>& top); | |
| /** | |
| * @brief Computes the error gradient w.r.t. the BNLL 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{\partial E}{\partial y} @f$ | |
| * with respect to computed outputs @f$ y @f$ | |
| * @param propagate_down see Layer::Backward. | |
| * @param bottom input Blob vector (length 2) | |
| * -# @f$ (N \times C \times H \times W) @f$ | |
| * the inputs @f$ x @f$; Backward fills their diff with | |
| * gradients @f$ | |
| * \frac{\partial E}{\partial x} | |
| * @f$ if propagate_down[0] | |
| */ | |
| virtual void Backward_cpu(const vector<Blob<Dtype>*>& top, | |
| const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom); | |
| virtual void Backward_gpu(const vector<Blob<Dtype>*>& top, | |
| const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom); | |
| }; | |
| } // namespace caffe | |