#include #include #include "caffe/layers/relu6_layer.hpp" namespace caffe { template void ReLU6Layer::Forward_cpu(const vector*>& bottom, const vector*>& top) { const Dtype* bottom_data = bottom[0]->cpu_data(); Dtype* top_data = top[0]->mutable_cpu_data(); const int count = bottom[0]->count(); for (int i = 0; i < count; ++i) { top_data[i] = std::min(std::max(bottom_data[i], Dtype(0)), Dtype(6)); } } template void ReLU6Layer::Backward_cpu(const vector*>& top, const vector& propagate_down, const vector*>& bottom) { if (propagate_down[0]) { const Dtype* bottom_data = bottom[0]->cpu_data(); const Dtype* top_diff = top[0]->cpu_diff(); Dtype* bottom_diff = bottom[0]->mutable_cpu_diff(); const int count = bottom[0]->count(); for (int i = 0; i < count; ++i) { bottom_diff[i] = top_diff[i] * ((bottom_data[i] > 0 && bottom_data[i] < 6)); } } } #ifdef CPU_ONLY STUB_GPU(ReLU6Layer); #endif INSTANTIATE_CLASS(ReLU6Layer); REGISTER_LAYER_CLASS(ReLU6); } // namespace caffe