深度学习中Concat层和Flatten层作用

一些其它层的作用参考:

Keras各种layer的作用及用法--简要总结:https://www.jianshu.com/p/86d667ee3c62

Concat层

  • Layer type: Concat
  • 头文件位置: ./include/caffe/layers/concat_layer.hpp
  • CPU 执行源文件位置:./src/caffe/layers/concat_layer.cpp
  • CUDA GPU 执行源文件位置: ./src/caffe/layers/concat_layer.cu

      Concat层的功能:Concat层实现输入数据的拼接。Concat层是一个实用程序层,它将多个输入blob连接到一个输出blob(按照给定的axis,注意除了规定的axis以外,被concat的输入bolb的其他维度的size必须一致)。

参数定义:

参数(ConcatParameter concat_param) 
定义位置: ./src/caffe/proto/caffe.proto

message ConcatParameter {
  // The axis along which to concatenate -- may be negative to index from the
  // end (e.g., -1 for the last axis).  Other axes must have the
  // same dimension for all the bottom blobs.
  // By default, ConcatLayer concatenates blobs along the "channels" axis (1).
  // 指定拼接的维度,默认为1即以channel通道进行拼接;支持负索引,即-1表示最后一个维度
  optional int32 axis = 2 [default = 1];

  // DEPRECATED: alias for "axis" -- does not support negative indexing.
  // 以后会被弃用,作用同axis一样,但不能指定为负数
  optional uint32 concat_dim = 1 [default = 1];
}

      caffe中数据通常为4个维度,即 num×channels×height×width,因此默认值1表示channels通道进行拼接。而0表示num这个维度,即数量上的叠加。

使用方法:

layer {
  name: "data_all"
  type: "Concat"
  bottom: "data_classfier"
  bottom: "data_boundingbox"
  bottom: "data_facialpoints"
  top: "data_all"
  concat_param {
    axis: 0
  }
}

     除了拼接维度外的其它维度都必须相等。比如上面,输入图像均为 24×24×3,用于分类的有150张图片,用于boundingbox回归的有50张,用于关键点回归的也有50张,则最后拼接的结果就是(150+50+50)×3×24×24

Flatten层

作用:Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。

为了更好的理解Flatten层作用,我把这个神经网络进行可视化如下图:

Caption
### 深度学习Concat 操作的使用方法与实现细节 Concat 操作是一种常见的特征融合技术,在深度学习领域被广泛应用于多分支结构的设计中。它通过将多个张量沿着指定维度拼接在一起,形成一个新的张量[^1]。 #### 1. Concat 操作的基本原理 Concat 操作的核心在于沿某一特定轴(通常是通道轴)连接两个或多个人工神经网络的输出。这种操作允许来自不同路径的信息得以保留并传递到后续。例如,在 YOLOv3 中,concat 被用来合并来自不同尺度的特征图,这些特征图可能具有不同的通道数。 #### 2. Concat 操作的优点 相比于逐元素相加 (Element-wise Add),Concat 不会对输入信息造成任何损失。此外,由于它是简单地堆叠张量而不是执行算术运算,因此不会引入额外的参数或计算开销。然而需要注意的是,虽然 concat 自身并不增加计算负担,但它可能会显著增大下一所需处理的数据规模,进而间接提升整体计算需求。 #### 3. 实现细节 以下是 Python PyTorch 下 concat 操作的一个典型例子: ```python import torch # 假设有两个形状分别为 [batch_size, channel_1, height, width] # [batch_size, channel_2, height, width] 的张量 A B A = torch.randn(2, 3, 5, 5) B = torch.randn(2, 4, 5, 5) # 将它们按通道维(dim=1)进行拼接 C = torch.cat((A, B), dim=1) print(C.shape) # 输出应为 [2, 7, 5, 5], 即新的通道数等于原两者的总 ``` 上述代码展示了如何利用 `torch.cat` 函数完成 tensor 的拼接工作。这里特别强调一点:参与 concat 运算的所有 tensors 在除了指定用于拼接的那个维度之外其他所有维度大小都需相同。 #### 4. 应用场景举例 - **目标检测框架** 如 YOLO 系列经常运用 concat 来整合高低分辨率下的特征表示; - **语义分割任务** 可借助此手段收集多次的空间上下文线索; - **推荐系统架构设计** 当面对异构数据源也可考虑采用类似的思路构建统一表征空间[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值