码迷,mamicode.com
首页 > 其他好文 > 详细

Dropout-----据说以后就不再XXXXX了

时间:2017-08-25 01:17:39      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:xxxxx   vector   margin   caffe   ack   layer   highlight   产生   unsigned   

 GPU和CPU实现的不一样,这里贴的是CPU中的drop out

直接看caffe里面的源码吧:(产生满足伯努利分布的随机数mask,train的时候,data除以p,......反向传播的时候,没有产生伯努利分布的随机数,

scale_ = 1. / (1. - threshold_);


template <typename Dtype> void DropoutLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) { const Dtype* bottom_data = bottom[0]->cpu_data(); Dtype* top_data = top[0]->mutable_cpu_data(); unsigned int* mask = rand_vec_.mutable_cpu_data(); const int count = bottom[0]->count(); if (this->phase_ == TRAIN) { // Create random numbers caffe_rng_bernoulli(count, 1. - threshold_, mask); for (int i = 0; i < count; ++i) { top_data[i] = bottom_data[i] * mask[i] * scale_; } } else { caffe_copy(bottom[0]->count(), bottom_data, top_data); } } template <typename Dtype> void DropoutLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top, const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) { if (propagate_down[0]) { const Dtype* top_diff = top[0]->cpu_diff(); Dtype* bottom_diff = bottom[0]->mutable_cpu_diff(); if (this->phase_ == TRAIN) { const unsigned int* mask = rand_vec_.cpu_data(); const int count = bottom[0]->count(); for (int i = 0; i < count; ++i) { bottom_diff[i] = top_diff[i] * mask[i] * scale_; } } else { caffe_copy(top[0]->count(), top_diff, bottom_diff); } } }

  

Dropout-----据说以后就不再XXXXX了

标签:xxxxx   vector   margin   caffe   ack   layer   highlight   产生   unsigned   

原文地址:http://www.cnblogs.com/wuxiangli/p/7425922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!