caffe卷积层代码解析

Posted Vincent丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了caffe卷积层代码解析相关的知识,希望对你有一定的参考价值。

1.Forward

conv_layer.cpp

template <typename Dtype>
void ConvolutionLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
      const vector<Blob<Dtype>*>& top) {
	// blobs_声明在 layer.hpp 中,vector<shared_ptr<Blob<Dtype> > > blobs_;
	// 用于存放学习得到的参数权值 weight 和偏置参数 bias
	// weight(blobs_[0])和bias(blobs_[1])分别存放在两个blob中
  const Dtype* weight = this->blobs_[0]->cpu_data();

  // 对bottom中所有blob进行前向卷积运算
  for (int i = 0; i < bottom.size(); ++i) {
    const Dtype* bottom_data = bottom[i]->cpu_data();
    Dtype* top_data = top[i]->mutable_cpu_data();

    // 对一个Batch的每一张图片进行前向计算
    // num_定义在caffe.proto中,即在caffe.pb.h中,为BatchSize大小
    for (int n = 0; n < this->num_; ++n) {

        // 基类的forward_cpu_gemm函数 base_conv_layer.cpp
        // 计算的是top_data[n * this->top_dim_] =
        // weights * bottom_data[n * this->bottom_dim_]

    	// bottom_dim_, bias_term和top_dim定义在base_conv_layer.hpp中,
    	// int bottom_dim_; 大小默认为 C_in*H_in*W_in
    	// int top_dim_; 大小默认为 C_out*H_out*W_out
    	// bool bias_term_; 是否使用偏置项
      this->forward_cpu_gemm(bottom_data + n * this->bottom_dim_, weight,
          top_data + n * this->top_dim_);
      if (this->bias_term_) {
        const Dtype* bias = this->blobs_[1]->cpu_data();
        this->forward_cpu_bias(top_data + n * this->top_dim_, bias);
      }
    }
  }
}

  

以上是关于caffe卷积层代码解析的主要内容,如果未能解决你的问题,请参考以下文章

caffe之卷积层

Caffe代码解析Layer网络层

Caffe Code Analysis-3

Caffe Code Analysis-3

caffe源码 卷积层

Caffe 源码阅读 卷积层