参考:https://zhuanlan.zhihu.com/p/39240159

推荐:一个可视化卷积和反卷积的项目:https://github.com/vdumoulin/conv_arithmetic

1  反卷积计算

pytorch中反卷积的函数为:

class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0,output_padding=0,groups=1,bias=True, dilation=1)
# 一般为以下
nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding)

参数的含义如下:

  • in_channels(int) – 输入信号的通道数
  • out_channels(int) – 卷积产生的通道数
  • kernel_size(int or tuple) - 卷积核的大小
  • stride(int or tuple,optional) - 卷积步长,即要将输入扩大的倍数。
  • padding(int or tuple, optional) - 输入的每一条边补充0的层数,高宽都增加2*padding
  • output_padding(int or tuple, optional) - 输出边补充0的层数,高宽都增加padding
  • groups(int, optional) – 从输入通道到输出通道的阻塞连接数
  • bias(bool, optional) - 如果bias=True,添加偏置
  • dilation(int or tuple, optional) – 卷积核元素之间的间距

而对于输入输出的计算,首先参数out_channels指定输出的通道数,即一定是output_size*output_size*out_channels,故主要计算输出的output_size,公式如下:

一般来说用以下公式:

例子:

# Generator Code
# 生成器 反卷积
class Generator(nn.Module):def __init__(self, ngpu):super(Generator, self).__init__()self.ngpu = ngpu  # Number of GPUs available. Use 0 for CPU mode. 可用的 GPUs 数量。self.main = nn.Sequential(# input is Z, going into a convolution   100维 nn.ConvTranspose2d( nz, ngf * 8, 4, 1, 0, bias=False), #(1-1)*1+4-2*0=4  nn.BatchNorm2d(ngf * 8),nn.ReLU(True),# state size. (ngf*8) x 4 x 4   4*4*512'''class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1)'''nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False), # (4-1)*2-2*1+4=8nn.BatchNorm2d(ngf * 4),nn.ReLU(True),# state size. (ngf*4) x 8 x 8   8*8*256nn.ConvTranspose2d( ngf * 4, ngf * 2, 4, 2, 1, bias=False), # (8-1)*2-2*1+4=16nn.BatchNorm2d(ngf * 2),nn.ReLU(True),# state size. (ngf*2) x 16 x 16  16*16*128nn.ConvTranspose2d( ngf * 2, ngf, 4, 2, 1, bias=False), # (16-1)*2-2*1+4=32nn.BatchNorm2d(ngf),nn.ReLU(True),# state size. (ngf) x 32 x 32   32*32*64nn.ConvTranspose2d( ngf, nc, 4, 2, 1, bias=False), # (32-1)*2-2*1+4=64nn.Tanh()# state size. (nc) x 64 x 64   64*64*3)def forward(self, input):return self.main(input)

2  卷积计算

Conv2d(in_channels, out_channels, kernel_size, stride=1,padding=0, dilation=1, groups=1,bias=True, padding_mode=‘zeros’)

五个常用参数的含义如下:

  • in_channels:输入的通道数目;
  • out_channels:输出的通道数目;
  • kernel_size:卷积核的大小;
  • stride:卷积每次滑动的步长;
  • padding:填充,设置在所有边界增加值为 0 的边距的大小。

卷积神将网络的计算公式:N=(W-F+2P)/S+1,其中N:输出大小,W:输入大小,F:卷积核大小,P:填充值的大小,S:步长大小

例子:

# batch norm 和leaky relu函数促进了健康的梯度流
class Discriminator(nn.Module):def __init__(self, ngpu):super(Discriminator, self).__init__()self.ngpu = ngpuself.main = nn.Sequential(# input is (nc) x 64 x 64     128,3*64*64nn.Conv2d(nc, ndf, 4, 2, 1, bias=False), # 64-4+2/2+1=32  nn.LeakyReLU(0.2, inplace=True),# state size. (ndf) x 32 x 32  64*32*32nn.Conv2d(ndf, ndf * 2, 4, 2, 1, bias=False), # 32-4+2/2+1=16nn.BatchNorm2d(ndf * 2),nn.LeakyReLU(0.2, inplace=True), # state size. (ndf*2) x 16 x 16  128*16*16nn.Conv2d(ndf * 2, ndf * 4, 4, 2, 1, bias=False), # 16-4+2/2+1=8nn.BatchNorm2d(ndf * 4), # 256nn.LeakyReLU(0.2, inplace=True),# state size. (ndf*4) x 8 x 8   256*8*8nn.Conv2d(ndf * 4, ndf * 8, 4, 2, 1, bias=False), # 8-4+2/2+1=4nn.BatchNorm2d(ndf * 8),nn.LeakyReLU(0.2, inplace=True),# state size. (ndf*8) x 4 x 4  512*4*4nn.Conv2d(ndf * 8, 1, 4, 1, 0, bias=False), # 4-4/2+1=1nn.Sigmoid() # 128,1*1024)def forward(self, input):return self.main(input)

一些点:

  • Conv1d:用于文本数据,只对宽度进行卷积,对高度不进行卷积,而Conv2d:用于图像数据,对宽度和高度都进行卷积
  • Conv2d(输入通道数, 输出通道数, kernel_size(长和宽)),当卷积核为方形时,只写一个就可以,但是当卷积核不是方形时,长和宽都要写,如下nn.Conv2d(H,W,....)

卷积和反卷积输出的计算公式相关推荐

  1. 卷积、空洞卷积、反卷积与空洞反卷积的计算公式(全)

    前言: 经常使用的卷积有卷积.空洞卷积.反卷积与空洞反卷积的,下面总结了他们的计算公式. 一.卷积计算公式 卷积神将网络的计算公式为: N=(W-F+2P)/S+1 其中 N:输出大小 W:输入大小 ...

  2. cnn stride and padding_彻底搞懂CNN中的卷积和反卷积

    前言 卷积和反卷积在CNN中经常被用到,想要彻底搞懂并不是那么容易.本文主要分三个部分来讲解卷积和反卷积,分别包括概念.工作过程.代码示例,其中代码实践部分主结合TensorFlow框架来进行实践.给 ...

  3. 卷积与反卷积、步长(stride)与重叠(overlap)及 output 的大小

    1. 卷积与反卷积 如上图演示了卷积核反卷积的过程,定义输入矩阵为 III(4×44\times 44×4),卷积核为 KKK(3×33\times 33×3),输出矩阵为 OOO(2×22\time ...

  4. 深度可分离卷积、空洞卷积、反卷积、感受野计算、上采样

    文章目录 输出特征图尺寸的计算 Depthwise卷积和Pointwise运算成本比较低 空洞卷积 反卷积 上采样 输出特征图尺寸的计算 Depthwise卷积和Pointwise运算成本比较低 如何 ...

  5. 一文搞懂转置卷积(反卷积)

    ↑ 点击蓝字 关注极市平台 作者丨土豆@知乎 来源丨https://zhuanlan.zhihu.com/p/158933003 极市导读 转置卷积在一些文献中也被称为反卷积,人们如果希望网络学习到上 ...

  6. tensorflow 卷积、反卷积形式的去噪自编码器

    tensorflow 卷积.反卷积形式的去噪自编码器 对于去噪自编码器,网上好多都是利用全连接神经网络进行构建,我自己写了一个卷积.反卷积形式的去噪自编码器,其中的参数调优如果有兴趣的话,可以自行修改 ...

  7. 卷积与反卷积(转置卷积)关系的公式推导 及其各自的形式

    1. 卷积与反卷积(转置卷积)的关系推导: 2. Transposed Convolution, Fractionally Strided Convolution or Deconvolution h ...

  8. 卷积,反卷积,空洞卷积

    卷积神经网络中卷积核的作用在于特征的抽取,越是大的卷积核尺寸就意味着更大的感受野,当然随之而来的是更多的参数.早在1998年,LeCun大神发布的LetNet-5模型中就会出,图像空域内具有局部相关性 ...

  9. 对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解

    参考: https://zhuanlan.zhihu.com/p/28749411 https://zhuanlan.zhihu.com/p/28186857 https://blog.yani.io ...

  10. 深度学习中的卷积与反卷积

    转载自:http://blog.csdn.net/panglinzhuo/article/details/75207855 卷积与反卷积操作在图像分类.图像分割.图像生成.边缘检测等领域都有很重要的作 ...

最新文章

  1. bigquery按照小时来聚合数据
  2. 使用LoadRunner对Web Services进行调用--Add Service Call
  3. 自动运维_无Agent自动化运维平台spug
  4. python设置默认密码_使用Python生成随机密码的示例分享
  5. 台式计算机如何升级,台式电脑升级系统的方法
  6. 1982:【19CSPJ普及组】数字游戏
  7. 04-07 接口请求构造
  8. python机器学习库sklearn——参数优化(网格搜索GridSearchCV、随机搜索RandomizedSearchCV、hyperopt)
  9. Ubuntu18.04报错:bin/bash: prebuilts/misc/linux-x86/bison/bison: cannot execute binary file解决
  10. log4j实现日志脱敏
  11. 淘客基地【推好单-好券】安卓IOS更新公告
  12. 功能测试用例设计方法,一文带你了解用例设计,再也不担心用例了
  13. Struts2通配符和它的各种问题总结
  14. 小米8到小米10一键刷机教程,快速获取Root权限下载安装twrp,magisk教程
  15. Android shape属性大全
  16. 5.1.2全景声音箱摆位_5.1.2全景声系统私人家庭影院设计方案
  17. 物理 常见力与牛顿三定律
  18. 如何调整网站竞价关键词
  19. Pipeline并行处理模型
  20. 外包公司值不值得去?外包公司的面试特点

热门文章

  1. python识别颜色并提取轮廓_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
  2. 使用Python分析网易云歌曲评论信息,通过可视化处理我发现了这些有趣的规律...
  3. “你没有权限操作该项”phpcms权限解决一例
  4. linux bond服务是什么,linux 查看bond
  5. 如何使用FSMC让OLED屏幕刷新率飞起来?
  6. 学习笔记-Wood‘s anomalies
  7. 银河帝国----基地边缘
  8. 求职简历中一些常见的问题
  9. 51单片机 独立按键k1控制数码管移位 k2控制数值加
  10. WIN10下删除Hiberfil.sys文件