void BatchNormLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) { BatchNormParameter param = this->layer_param_.batch_norm_param(); moving_average_fraction_ = param.moving_average_fraction(); use_global_stats_ = this->phase_ == TEST; if (param.has_use_global_stats()) use_global_stats_ = param.use_global_stats(); if (bottom[0]->num_axes() == 1) channels_ = 1; else channels_ = bottom[0]->shape(1); eps_ = param.eps(); if (this->blobs_.size() > 0) { LOG(INFO) << "Skipping parameter initialization"; } else { this->blobs_.resize(3); vector<int> sz; sz.push_back(channels_); this->blobs_[0].reset(new Blob<Dtype>(sz)); this->blobs_[1].reset(new Blob<Dtype>(sz)); sz[0]=1; this->blobs_[2].reset(new Blob<Dtype>(sz)); for (int i = 0; i < 3; ++i) { caffe_set(this->blobs_[i]->count(), Dtype(0), this->blobs_[i]->mutable_cpu_data()); } } }
void BatchNormLayer<Dtype, MItype, MOtype>::LayerSetUp( const vector<Blob<MItype>*>& bottom, const vector<Blob<MOtype>*>& top) { BatchNormParameter param = this->layer_param_.batch_norm_param(); moving_average_fraction_ = param.moving_average_fraction(); use_global_stats_ = this->phase_ == TEST; if (param.has_use_global_stats()) use_global_stats_ = param.use_global_stats(); if (bottom[0]->num_axes() == 1) channels_ = 1; else channels_ = bottom[0]->shape(1); eps_ = param.eps(); if (this->blobs_.size() > 0) { LOG(INFO)<< "Skipping parameter initialization"; } else { this->blobs_.resize(3); vector<int_tp> sz; sz.push_back(channels_); this->blobs_[0].reset(new Blob<Dtype>(sz, this->device_)); this->blobs_[1].reset(new Blob<Dtype>(sz, this->device_)); sz[0]=1; this->blobs_[2].reset(new Blob<Dtype>(sz, this->device_)); for (int_tp i = 0; i < 3; ++i) { caffe_set(this->blobs_[i]->count(), Dtype(0), this->blobs_[i]->mutable_cpu_data()); } } // Mask statistics from optimization by setting local learning rates // for mean, variance, and the bias correction to zero. for (int_tp i = 0; i < this->blobs_.size(); ++i) { if (this->layer_param_.param_size() == i) { ParamSpec* fixed_param_spec = this->layer_param_.add_param(); fixed_param_spec->set_lr_mult(0.f); } else { CHECK_EQ(this->layer_param_.param(i).lr_mult(), 0.f) << "Cannot configure batch normalization statistics as layer " << "parameters."; } } this->InitializeQuantizers(bottom, top); }