MCPcopy Create free account
hub / github.com/BVLC/caffe / Forward_cpu

Method Forward_cpu

src/caffe/layers/mvn_layer.cpp:31–71  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29
30template <typename Dtype>
31void MVNLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
32 const vector<Blob<Dtype>*>& top) {
33 const Dtype* bottom_data = bottom[0]->cpu_data();
34 Dtype* top_data = top[0]->mutable_cpu_data();
35 int num;
36 if (this->layer_param_.mvn_param().across_channels())
37 num = bottom[0]->num();
38 else
39 num = bottom[0]->num() * bottom[0]->channels();
40
41 int dim = bottom[0]->count() / num;
42
43 // subtract mean
44 caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, bottom_data,
45 sum_multiplier_.cpu_data(), 0., mean_.mutable_cpu_data()); // EX
46 caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, num, dim, 1, -1.,
47 mean_.cpu_data(), sum_multiplier_.cpu_data(), 0.,
48 temp_.mutable_cpu_data());
49 caffe_add(temp_.count(), bottom_data, temp_.cpu_data(), top_data); // X-EX
50
51 if (this->layer_param_.mvn_param().normalize_variance()) {
52 // compute variance using var(X) = E((X-EX)^2)
53 caffe_powx(bottom[0]->count(), top_data, Dtype(2),
54 temp_.mutable_cpu_data()); // (X-EX)^2
55 caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, temp_.cpu_data(),
56 sum_multiplier_.cpu_data(), 0.,
57 variance_.mutable_cpu_data()); // E((X-EX)^2)
58
59 // 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());
64
65 caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, num, dim, 1, 1.,
66 variance_.cpu_data(), sum_multiplier_.cpu_data(), 0.,
67 temp_.mutable_cpu_data());
68
69 caffe_div(temp_.count(), top_data, temp_.cpu_data(), top_data);
70 }
71}
72
73template <typename Dtype>
74void MVNLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top,

Callers

nothing calls this directly

Calls 6

caffe_add_scalarFunction · 0.85
numMethod · 0.80
countMethod · 0.80
cpu_dataMethod · 0.45
mutable_cpu_dataMethod · 0.45
channelsMethod · 0.45

Tested by

no test coverage detected