当前位置:网站首页>动手学深度学习_转置卷积
动手学深度学习_转置卷积
2022-08-08 21:28:00 【CV小Rookie】
卷积是一种下采样操作,可以减少输入图像的空间维度(高和宽)。
转置卷积(transposed convolution),可以看作是卷积的逆,是一种上采样操作,增大特征图的空间维度(高和宽)。注意这里卷积的逆只针对图像大小,图像中的值发生改变。
卷积
一个最简单例子演示转置卷积如何工作:设步幅为 1 且没有填充。 假设我们有一个 的输入张量和一个
的卷积核。 以步幅为 1 滑动卷积核窗口,每行
次,每列
次,共产生
个中间结果。 每个中间结果都是一个
的张量,初始化为 0 。 为了计算每个中间张量,输入张量中的每个元素都要乘以卷积核,从而使所得的
张量替换中间张量的一部分。最后,所有中间结果相加以获得最终结果。
逐步实现:
def trans_conv(X, K):
h, w = K.shape
Y = torch.zeros((X.shape[0] + h - 1, X.shape[1] + w - 1))
for i in range(X.shape[0]):
for j in range(X.shape[1]):
Y[i: i + h, j: j + w] += X[i, j] * K
return Y
简单实现:
nn.ConvTranspose2d(1, 1, kernel_size=2, bias=False)
填充
在转置卷积中也可以添加padding操作,但是这里的padding不是向以前的卷积中的可以放大输入。可以理解缩小输入。
举例:转置卷积的 padding 设置为 1 时,转置卷积的输出中将删除第一和最后的行与列。
正常的是 input -> padding -> conv -> output 。
转置卷积就是 input -> deconv -> depadding -> output 。过程完全逆运行。
步幅
看懂前面简单的转置卷积,那步长也没什么难点。
nn.ConvTranspose2d(1, 1, kernel_size=2, stride=2, bias=False)
通道
通道更简单,使用方法完完全一致
conv = nn.Conv2d(10, 20, kernel_size=5, padding=2, stride=3)
tconv = nn.ConvTranspose2d(20, 10, kernel_size=5, padding=2, stride=3)
边栏推荐
猜你喜欢
随机推荐
Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions Paper and Code Analysis
leetcode 217存在重复元素
零数科技受邀出席2019全球未来出行大会
The crawler series: use MySQL to store data
用固态U盘让你的办公环境随身移动
Oxylabs Webinar: Web Scraping Solutions in Action
Conformer papers and code parsing (on)
Node.js 回调函数来解决SQL语句与返回值的异步问题
如果只让我推荐一本书。(第2弹)
MySQL无法启用/etc/my.cnf配置文件,重启报错Warning: World-writable config file ‘/etc/my.cnf’ is ignored的解决方法
Invalid keystore format报错问题解决
世界经济和金融秩序再定义 | 零数科技受邀出席第三届世界金融论坛
反向代理服务器能干什么?
并发场景下的死锁原因及规避解决方法
Redis之持久化机制
matlab入门基础:矩阵操作(一)
差分约束
用Multisim对振幅调制器进行仿真
"New Infrastructure of Cultural Digital Strategy and Ecological Construction of Cultural Art Chain" was successfully held
上下分页功能实现