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卷积层代码解析的主要内容,如果未能解决你的问题,请参考以下文章