@@ -25,6 +25,7 @@ void MVNLayer<Dtype>::Reshape(const vector<Blob<Dtype>*>& bottom,
2525 Dtype* multiplier_data = sum_multiplier_.mutable_cpu_data ();
2626 caffe_set (sum_multiplier_.count (), Dtype (1 ), multiplier_data);
2727 eps_ = this ->layer_param_ .mvn_param ().eps ();
28+ add_eps_before_sqrt_ = this ->layer_param_ .mvn_param ().add_eps_before_sqrt ();
2829}
2930
3031template <typename Dtype>
@@ -57,10 +58,15 @@ void MVNLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
5758 variance_.mutable_cpu_data ()); // E((X-EX)^2)
5859
5960 // normalize variance
60- caffe_powx (variance_.count (), variance_.cpu_data (), Dtype (0.5 ),
61- variance_.mutable_cpu_data ());
62-
63- caffe_add_scalar (variance_.count (), eps_, variance_.mutable_cpu_data ());
61+ if (add_eps_before_sqrt_) {
62+ caffe_add_scalar (variance_.count (), eps_, variance_.mutable_cpu_data ());
63+ caffe_powx (variance_.count (), variance_.cpu_data (), Dtype (0.5 ),
64+ variance_.mutable_cpu_data ());
65+ } else {
66+ caffe_powx (variance_.count (), variance_.cpu_data (), Dtype (0.5 ),
67+ variance_.mutable_cpu_data ());
68+ caffe_add_scalar (variance_.count (), eps_, variance_.mutable_cpu_data ());
69+ }
6470
6571 caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, num, dim, 1 , 1 .,
6672 variance_.cpu_data (), sum_multiplier_.cpu_data (), 0 .,
0 commit comments