| 20 | |
| 21 | template <typename Dtype> |
| 22 | void ReLULayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top, |
| 23 | const vector<bool>& propagate_down, |
| 24 | const vector<Blob<Dtype>*>& bottom) { |
| 25 | if (propagate_down[0]) { |
| 26 | const Dtype* bottom_data = bottom[0]->cpu_data(); |
| 27 | const Dtype* top_diff = top[0]->cpu_diff(); |
| 28 | Dtype* bottom_diff = bottom[0]->mutable_cpu_diff(); |
| 29 | const int count = bottom[0]->count(); |
| 30 | Dtype negative_slope = this->layer_param_.relu_param().negative_slope(); |
| 31 | for (int i = 0; i < count; ++i) { |
| 32 | bottom_diff[i] = top_diff[i] * ((bottom_data[i] > 0) |
| 33 | + negative_slope * (bottom_data[i] <= 0)); |
| 34 | } |
| 35 | } |
| 36 | } |
| 37 | |
| 38 | |
| 39 | #ifdef CPU_ONLY |
nothing calls this directly
no test coverage detected