栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

PyTorch Week 3——卷积

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PyTorch Week 3——卷积

系列文章目录

PyTorch Week 3——nn.Module的容器:Sequential、ModuleList、ModuleDice
PyTorch Week 3——模型创建

PyTorch Week 2——Dataloader与Dataset

PyTorch Week 1

PyTorch Week 3——卷积
  • 系列文章目录
  • 前言
  • 一、1d、2d、3d卷积
  • 二、pytorch中的nn.Conv2d()
    • 1.参数
    • 2.代码解读
  • 3、转置卷积
    • 1、卷积的算法实现
    • 2 代码解读
  • 三、转置卷积
  • 总结


前言

卷积层是我在自己项目中经常用到的操作,尤其是2d卷积。
卷积操作:卷积核在特征图上滑动,卷积核与特征图上对应位置相乘再求和。
卷积核的参数在TensorFlow中通常为(上一特征层的层数×卷积核的宽度w×卷积核的高度h×卷积核的数量),另外还有stride步长和padding填充来决定特征图的尺寸。

一、1d、2d、3d卷积

卷积的维度取决于卷积核滑动的方向,2d卷积核在平面上滑动,3d卷积核在空间中滑动

二、pytorch中的nn.Conv2d() 1.参数

代码如下(示例):

nn.Conv2d(in_channels,
		  out_channels,#卷积核的个数,等于输出的通道数
		  kernel_size,
		  stride=1,
		  padding=0,
		  dilation=1,空洞卷积大小
		  groups=1,分组卷积设置,参考AlexNet特征提取器的结构
		  bias=True,
		  padding_model='zeros'

输出特征图的尺寸计算:

输出特征图的尺寸 = (输入特征图的尺寸-卷积核的尺寸)/ 步长 + 1
若有padding, 输出特征图的尺寸=(输入特征图的尺寸+2padding - 卷积核的尺寸)/步长 + 1
若有padding和空洞卷积,输出特征图的尺寸 =(输入特征图的尺寸+2
padding - 空洞率*(卷积核的尺寸-1))/ 步长 + 1

2.代码解读

代码如下(示例):

path_img = os.path.join(os.path.dirname(os.path.abspath(__file__)), "lena.png")#文件绝对路径=当前文件路径//文件名
img = Image.open(path_img).convert('RGB')  # 使用Image.open打开图片,并转换为BGR三通道,值域为0~255

# convert to tensor
img_transform = transforms.Compose([transforms.ToTensor()])#定义transform,以Compose包装ToTensor,功能为转为张量
img_tensor = img_transform(img)#调用transform
img_tensor.unsqueeze_(dim=0)  #扩张维度,增加batchsize层

conv_layer = nn.Conv2d(3, 1, 3)   # 定义2d卷积层,input:(i, o, size),i=3,指输入的图片通道数为3,o=1,指卷积核的数量为1或者说输出的特征图数量/通道数为1,size=3,指卷积核的尺寸为3,则卷积核的参数权重weights:(o, i , h, w),是(1,3,3,3),即1个3层的3×3卷积核
nn.init.xavier_normal_(conv_layer.weight.data)#初始化卷积层的weight,初始化方式为xarier_normal

# calculation
img_conv = conv_layer(img_tensor)#将图片的tensor输入conv_layer,计算得到img_conv,仍为img图片格式


3、转置卷积 1、卷积的算法实现

参考im2col方法实现卷积算法,了解了卷积的算法实现。

简单来说就是将卷积在图像上滑动点乘的过程,通过分别展开图像的子集和子集对应的卷积核,转化成矩阵相乘的过程,具体算法实现这里mark一下,这里值得深扒总结。

转置卷积,卷积核的展开矩阵与正常卷积的展开矩阵在形状上是相互转置的关系。

转置卷积与卷积的参数一致
简单的输出尺寸的计算方法与卷积输出尺寸的计算是互逆的
完整的计算:

卷积的输出尺寸 = (卷积的输入尺寸 - 1)× 步长 - 2 × padding + 空洞率 × (卷积核的尺寸 - 1)+ 输出padding + 1
好复杂!

2 代码解读
    conv_layer = nn.ConvTranspose2d(3, 1, 3, stride=2)   # input:(i, o, size)
    nn.init.xavier_normal_(conv_layer.weight.data)

    # calculation
    img_conv = conv_layer(img_tensor)



可以看出,输入是512,卷积核是3,1,3,3,输出 = (512 - 1)× 2 + 3 = 1025,

三、转置卷积 总结

本文学习了2d卷积的概念,pytorch中的nn.Conv2d、nn.ConvTranspose2d参数及使用方法,mark了python实现卷积算法。
参考链接:
im2col方法实现卷积算法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/342115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号