转置卷积(逆卷积)A guide to convolution arithmetic for deep learning 阅读笔记

首先 , 转置卷积有时被称为逆卷积 但这是不准确的,因为这个过程不是数学的逆运算 不推荐使用转置卷积的说法

input->卷积->转置卷积->output
input 与output并不同
有时被称为逆卷积 是因为 output与input有相同的shape
然后keep in mind that 对于转置卷积 都有一个与其等价的普通卷积的形式 不过要在输入上做一些变化

众所周知 一般卷积操作会使图片shape越来越小 而转置卷积可以用来增大shape 故一般用于上采样

众所周知 卷积操作可以看作矩阵相乘
图片来自:https://blog.csdn.net/tsyccnh/article/details/87357447图片来自:https://blog.csdn.net/tsyccnh/article/details/8735744744的input经过33的卷积核得到2*2的output
可以看作一个(1,16)@(16,4)=(1,4)
那么反过来 把 (1,4)来乘以(16,4)transpose =(1,16)就变回了原来的大小
图片来自:https://blog.csdn.net/tsyccnh/article/details/87357447#图片来自:https://blog.csdn.net/tsyccnh/article/details/87357447,侵删


从这个角度理解起来似乎比较简单…但还是不知道具体怎么操作(
首先 转置卷积可以看作把卷积的output作一些变化之后的 卷积

如果想增大卷积操作的输出shape 比较自然地 会想到zero padding
但是单纯的增加padding,虽然保证了输出shape增大 但是却没有考虑数据之间的关系 (比如p如果大于卷积核 就必然出现边缘一个0,这显然不是想要的)

https://arxiv.org/abs/1603.07285文中作者是这么解释的
考虑一个 (4,4) 的input 经过(3,3)的卷积 (步长为1 padding为0)
i = 4, k = 3, s = 1 and p = 0
output: (2,2)
这个很好想象 图就无了
注意到 input 左上角的元素只影响了output左上角的元素

那么在转置卷积中 我们通过补0操作 让output '(也就是转置卷积的输出)只受
input '(这里也就是转置卷积的输入,普通卷积的输出)的左上角的元素影响
为了维持这种关系

#Im not sure if I get the essence...

如图:
i = 4, k = 3, s = 1 and p = 0
也就是说 zero_padding’=2(p’=2)
比较容易的 得到一个关系式子
p’ = k − 1
o '= i '+(k-1)


对于步长仍为1 但有zero_padding的卷积 的转置卷积的等价卷积

它只需要更少的zero_padding ’
p’=k-p-1
o '=i '+(k-1)-2p

#关于这些式子的推出步骤 一会考虑步长后一并给出 这个例子就是s=1时的特例


但对于步长不为1的卷积操作的转置卷积呢(s>1)
应该有个与该转置卷积对应的步长(s<1)的卷积…
做法是output(卷积的输出 为网络中转置卷积的输入)的每列每行间插入0
注意 与转置卷积等价的卷积 步长总为1,如图
s=2的话 output间插(2-1) 个0
s=s 插(s-1)个0
怎么补图为s=2的情况 插入了1个0

#注意 这个例子中包含了一个zero_padding' (p'=1)

也就是
i’=o+(o-1)*(i-1)

o=(i-k+2p)/s+1

o’=(i’-k+2p’)/1 +1

i=o’

其中i为卷积操作input的边长 (正方形)
i‘是o经过插0后得到的结果 shape
o是卷积得到的结果 在神经网络中 这一般是转置卷积的输入 但不是文中的i’
文中的i’是与该转置卷积等价的卷积操作中经过插值之后的结果 留意数学式比较好理解

解出
p’=k-p-1
o’=i’+k-2p-1

计算
o’=(o+(s-1)(o-1)+2*(k-p-1)-k)/1 +1

#     i' 	         p'

化简得
o’=(o-1)*s-2p+k

对应pytorch文档
在这里插入图片描述Hin换成o就一样了(
我觉得 为什么要这么插0 补0 是为了维持某种关系 而其结果上 表现如此

说法有点乱 建议看下论文但我觉得论文里说的也挺乱的
https://arxiv.org/abs/1603.07285
参考的还有:
https://blog.csdn.net/qq_27261889/article/details/86304061
https://blog.csdn.net/tsyccnh/article/details/87357447

如果有错误请指正

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB深度学习工具箱中的Convolution3DLayer是一种用于三维卷操作的神经网络层。它可以在三维空间中对输入进行卷操作,并生成相应的特征图。Convolution3DLayer通常用于处理带有深度信息的数据,例如视频或三维图像数据。 Convolution3DLayer是深度学习模型中的关键组件之一。它通过应用一组可学习的卷核对输入三维数据进行卷操作。这些卷核用于提取输入数据中的不同特征,并生成特征图。特征图可以表示输入数据的不同抽象级别的特征,从低级特征到高级语义特征。 Convolution3DLayer具有一些重要的参数,包括卷核大小、步幅、填充等。这些参数可以在构建模型时进行设,以满足特定任务的要求。此外,Convolution3DLayer也具有参数共享的特性,即同一组卷核在不同空间位进行共享。这种共享可以显著减少模型的参数量,降低计算复杂度,并增强模型的泛化能力。 Convolution3DLayer通常与其他类型的层结合使用,如池化层、批归一化层和激活函数层。通过使用这些层,可以构建更复杂的深度学习模型,以实现更高级的任务,如目标识别、目标检测和视频分割等。 在使用MATLAB深度学习工具箱时,通过调用Convolution3DLayer函数可以方便地创建和配Convolution3DLayer层。调用trainNetwork函数可以对整个深度学习模型进行训练和优化。此外,借助其他工具箱中的函数和方法,还可以对模型进行评估和推理,以获得相应的预测结果。 总的来说,MATLAB深度学习工具箱中的Convolution3DLayer是一个强大的工具,可以在三维空间中对输入数据进行卷操作,并用于构建和训练具有深度感知能力的神经网络模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值