卷积中add与concat操作区别及作用 您所在的位置:网站首页 addition的 卷积中add与concat操作区别及作用

卷积中add与concat操作区别及作用

2023-06-07 19:27| 来源: 网络整理| 查看: 265

卷积中add与concat操作区别及作用 几何图示区别作用区别数学解释区别程序区别

几何图示区别

在这里插入图片描述 add操作 在这里插入图片描述 N i N_i Ni​经过一个尺寸为3X3,步长为2的卷积之后,特征图尺寸减小为原来的一半然后和 P i + 1 P_{i+1} Pi+1​这个特征图做add操作,得到的结果再经过一个卷积核尺寸为3X3,stride=1的卷积层得到 N i + 1 N_{i+1} Ni+1​。

作用区别

concat作用 concat是通道数的增加,也就是说描述图像本身的特征数(通道数)增加了,而每一特征下的信息是没有增加;横向或纵向空间上的叠加. add作用 add为简单的像素叠加,是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。 如何选择 a d d 是 描 述 图 像 的 特 征 下 的 信 息 量 增 多 了 , 但 是 描 述 图 像 的 维 度 本 身 并 没 有 增 加 , 只 是 每 一 维 下 的 信 息 量 在 增 加 , 这 显 然 是 对 最 终 的 图 像 的 分 类 是 有 益 的 。 而 c o n c a t e n a t e 是 通 道 数 的 合 并 , 也 就 是 说 描 述 图 像 本 身 的 特 征 增 加 了 , 而 每 一 特 征 下 的 信 息 是 没 有 增 加 。 \red{add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concatenate是通道数的合并,也就是说描述图像本身的特征增加了,而每一特征下的信息是没有增加。} add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concatenate是通道数的合并,也就是说描述图像本身的特征增加了,而每一特征下的信息是没有增加。 因 此 a d d 相 当 于 加 了 一 种 p r i o r , 当 两 路 输 入 可 以 具 有 “ 对 应 通 道 的 特 征 图 语 义 类 似 ” ( 可 能 不 太 严 谨 ) 的 性 质 的 时 候 , 可 以 用 a d d 来 替 代 c o n c a t , 这 样 更 节 省 参 数 和 计 算 量 ( c o n c a t 是 a d d 的 2 倍 ) \red{因此add相当于加了一种prior,当两路输入可以具有“对应通道的特征图语义类似”(可能不太严谨)的性质的时候,可以用add来替代concat,这样更节省参数和计算量(concat是add的2倍)} 因此add相当于加了一种prior,当两路输入可以具有“对应通道的特征图语义类似”(可能不太严谨)的性质的时候,可以用add来替代concat,这样更节省参数和计算量(concat是add的2倍)

数学解释区别

对于两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核。下面具体式子解释一下,由于每个输出通道的卷积核是独立的,我们可以只看单个通道的输出。假设两路输入的通道分别为 X 1 , X 2 , . . . , X c X_1,X_2,...,X_c X1​,X2​,...,Xc​和 Y 1 , Y 2 , . . . , Y c Y_1,Y_2,...,Y_c Y1​,Y2​,...,Yc​. 那么concat单个输出通道为: 在这里插入图片描述 add单个输出通道为: 在这里插入图片描述

程序区别

add

def _merge_function(self, inputs): output = inputs[0] for i in range(1, len(inputs)): output += inputs[i] return output

concat

t1 = [[1, 2, 3], [4, 5, 6]] t2 = [[7, 8, 9], [10, 11, 12]] tf.concat([t1, t2], 0) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] tf.concat([t1, t2], 1) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]] # tensor t3 with shape [2, 3] # tensor t4 with shape [2, 3] tf.shape(tf.concat([t3, t4], 0)) ==> [4, 3] tf.shape(tf.concat([t3, t4], 1)) ==> [2, 6]

引用链接 [1]https://blog.csdn.net/weixin_39610043/article/details/87103358 [2]https://blog.csdn.net/andyjkt/article/details/107590669 [3]https://zhuanlan.zhihu.com/p/110204563



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有