Caffe 代码解读之全连接层concat layer

本文深入解析Caffe中的concat层,探讨如何将多个layer拼接在一起。内容涵盖官方文档、layer的setup、reshape、Forward_cpu和Backward_cpu过程,特别解释了bottom的vector blob用法、CHECK_**宏的作用以及count函数在blob层中的意义,帮助读者掌握全连接层在前向传播和反向传播中的实现细节。
摘要由CSDN通过智能技术生成

今天,我们看一下caffe的拼接层,即将两个或多个layer进行拼接。
首先,看一下caffe官方文档。
concat


同其他layer一样,分为setup、reshape、Forward_cpu、Backward_cpu。

//concat_layer 用来实现两个或者多个blob的链接,即多输入一输出
//支持在num 维度上的链接(concat_dim = 0 : (n1+n2+...+nk)∗c∗h∗w )
//和channel维度上的链接(concat_dim = 1 : n∗(c1+c2+...+ck)∗h∗w)。

//axis ,dim :0 为 num 维度链接,1 为 channel 维度链接
//这里需要给出axis或concat_dim
template <typename Dtype>
void ConcatLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom,
      const vector<Blob<Dtype>*>& top) {
  const ConcatParameter& concat_param = this->layer_param_.concat_param();
  CHECK(!(concat_param.has_axis() && concat_param.has_concat_dim()))
      << "Either axis or concat_dim should be specified; not both.";
}

template <typename Dtype>
void ConcatLayer<Dtype>::Reshape(const vector<Blob<Dtype>*>& bottom,
      const vector<Blob<Dtype>*>& top) {
  //获取axis,确定拼接哪一维度
  const int num_axes = bottom[0]->num_axes();
  const ConcatParameter& concat_param = this->layer_param_.concat_param();
  //以下都在获取、判断axis的
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值