caffe BaseDataLayer 学习

来源:互联网 发布:ct数据处理软件有哪些 编辑:程序博客网 时间:2024/05/16 23:59
template <typename Dtype>class BaseDataLayer : public Layer<Dtype> { public:  explicit BaseDataLayer(const LayerParameter& param);//构造函数  virtual void LayerSetUp(const vector<Blob<Dtype>*>& bottom,      const vector<Blob<Dtype>*>& top);  virtual void DataLayerSetUp(const vector<Blob<Dtype>*>& bottom,      const vector<Blob<Dtype>*>& top) {}//这个函数根据具体的数据层来实现  // 数据层没有bottoms,因此reshaping is trivial.  virtual void Reshape(const vector<Blob<Dtype>*>& bottom,      const vector<Blob<Dtype>*>& top) {}//这个函数根据具体的数据层来实现  //数据层不存在Backward  virtual void Backward_cpu(const vector<Blob<Dtype>*>& top,      const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) {}  virtual void Backward_gpu(const vector<Blob<Dtype>*>& top,      const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) {} protected:  TransformationParameter transform_param_;//数据转化参数,比如图片的翻转,随机裁剪等(具体看proto里面有哪些操作)。  shared_ptr<DataTransformer<Dtype> > data_transformer_;//根据上面的trainsform_param_来创建的一个类。  bool output_labels_;//数据层存在两种数据,一个是图片数据和标签,如果top的大小等于1的话就没有标签。};
template <typename Dtype>BaseDataLayer<Dtype>::BaseDataLayer(const LayerParameter& param)    : Layer<Dtype>(param),      transform_param_(param.transform_param()) {//构造函数实现的是调用Layer的构造函数,其次就是对transform_param_就行赋值}template <typename Dtype>void BaseDataLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom,      const vector<Blob<Dtype>*>& top) {//LayerSetUp实现的是是否要输出Labels,并且构造DataTransformer这个类。  if (top.size() == 1) {    output_labels_ = false;  } else {    output_labels_ = true;  }  data_transformer_.reset(      new DataTransformer<Dtype>(transform_param_, this->phase_));  data_transformer_->InitRand();  //子类要设置top的大小  DataLayerSetUp(bottom, top);}
0 0