1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #ifndef CAFFE_ELU_LAYER_HPP_
- #define CAFFE_ELU_LAYER_HPP_
- #include <vector>
- #include "caffe/blob.hpp"
- #include "caffe/layer.hpp"
- #include "caffe/proto/caffe.pb.h"
- #include "caffe/layers/neuron_layer.hpp"
- namespace caffe {
- /**
- * @brief Exponential Linear Unit non-linearity @f$
- * y = \left\{
- * \begin{array}{lr}
- * x & \mathrm{if} \; x > 0 \\
- * \alpha (\exp(x)-1) & \mathrm{if} \; x \le 0
- * \end{array} \right.
- * @f$.
- */
- template <typename Dtype>
- class ELULayer : public NeuronLayer<Dtype> {
- public:
- /**
- * @param param provides ELUParameter elu_param,
- * with ELULayer options:
- * - alpha (\b optional, default 1).
- * the value @f$ \alpha @f$ by which controls saturation for negative inputs.
- */
- explicit ELULayer(const LayerParameter& param)
- : NeuronLayer<Dtype>(param) {}
- virtual inline const char* type() const { return "ELU"; }
- 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 = \left\{
- * \begin{array}{lr}
- * x & \mathrm{if} \; x > 0 \\
- * \alpha (\exp(x)-1) & \mathrm{if} \; x \le 0
- * \end{array} \right.
- * @f$.
- */
- 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 ELU 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 1)
- * -# @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} = \left\{
- * \begin{array}{lr}
- * 1 & \mathrm{if} \; x > 0 \\
- * y + \alpha & \mathrm{if} \; x \le 0
- * \end{array} \right.
- * @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
- #endif // CAFFE_ELU_LAYER_HPP_
|