文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

F.conv2d pytorch卷积计算方式是什么

2023-07-05 04:21

关注

这篇文章主要讲解了“F.conv2d pytorch卷积计算方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“F.conv2d pytorch卷积计算方式是什么”吧!

F.conv2d pytorch卷积计算

Pytorch里一般小写的都是函数式的接口,相应的大写的是类式接口。

函数式的更加low-level一些,如果不需要做特别复杂的配置只需要用类式接口就够了。

可以这样理解

nn.Conved是2D卷积层,而F.conv2d是2D卷积操作。

import torchfrom torch.nn import functional as F """手动定义卷积核(weight)和偏置"""w = torch.rand(16, 3, 5, 5)  # 16种3通道的5乘5卷积核b = torch.rand(16)  # 和卷积核种类数保持一致(不同通道共用一个bias) """定义输入样本"""x = torch.randn(1, 3, 28, 28)  # 1张3通道的28乘28的图像 """2D卷积得到输出"""out = F.conv2d(x, w, b, stride=1, padding=1)  # 步长为1,外加1圈padding,即上下左右各补了1圈的0,print(out.shape) out = F.conv2d(x, w, b, stride=2, padding=2)  # 步长为2,外加2圈paddingprint(out.shape)out = F.conv2d(x, w)  # 步长为1,默认不padding, 不够的舍弃,所以对于28*28的图片来说,算完之后变成了24*24print(out.shape)

在DSSINet发现又用到了空洞卷积dilated convolution

mu1 = F.conv2d(img1, window , padding=padd, dilation=dilation, groups=channel)

Dilated/Atrous convolution或者是convolution with holes从字面上就很好理解,是在标准的convolution map里注入空洞,以此来增加感受野reception field。

相比原来的正常卷积,空洞卷积多了一个超参数dilation rate,指的是kernel的间隔数量(正常的卷积是dilation rate=1)

正常图像的卷积为

F.conv2d pytorch卷积计算方式是什么

空洞卷积为

F.conv2d pytorch卷积计算方式是什么

现在我们再来看下卷积本身,并了解他背后的设计直觉,以下主要探讨空洞卷积在语义分割(semantic segmentation)的应用。

卷积的主要问题

up-sampling/pooling layer(e.g. bilinear interpolation) is deterministic(not learnable)

内部数据结构丢失,空间层级化信息丢失。

小物体信息无法重建(假设有4个pooling layer,则任何小于2^4=16 pixel的物体信息将理论上无法重建)

在这样问题的存在下,语义分割问题一直处于瓶颈期无法再明显提高精度,而dilated convolution 的设计就良好的避免了这些问题。

对于dilated convolution,我们已经可以发现他的优点,即内部数据结构的保留和避免使用down_sampling这样的特性。但是完全基于dilated convolution的结构如何设计则是一个新的问题。

pytorch中空洞卷积分为两类,一类是正常图像的卷积,另一类是池化时候。

空洞卷积的目的是为了在扩大感受野的同时,不降低图片分辨率和不引入额外参数及计算量(一般在CNN中扩大感受野都需要使用S》1的conv或者pooling,导致分辨率降低,不利于segmentation,如果使用大卷积核,确实可以达到增大感受野,但是会引入额外的参数及计算量)。

F.Conv2d和nn.Conv2d

import torchimport torch.nn.functional as F# 小括号里面有几个[]就代表是几维数据input = torch.tensor([[1,2,0,3,1],                      [0,1,2,3,1],                      [1,2,1,0,0],                      [5,2,3,1,1],                      [2,1,0,1,1]])kernel = torch.tensor([[1,2,1],                       [0,1,0],                       [2,1,0]])input = torch.reshape(input,(1,1,5,5))kernel = torch.reshape(kernel,(1,1,3,3))# stride代表的是步长的意思,即每次卷积核向左或者向下移动多少步进行相乘#  因为conv2d的input和weight对应的tensor是[batch,channel,h,w],所以上述才将它们进行reshapeoutput = F.conv2d(input,kernel,stride=1)print(output)output = F.conv2d(input,kernel,stride=2)print(output)# padding代表的是向上下左右填充的行列数,里面数字填写0output3 = F.conv2d(input,kernel,stride=1,padding=1)print(output3)
import torchimport torchvisionfrom torch.utils.data import DataLoaderfrom torch import nnfrom torch.nn import Conv2dfrom torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10('./torchvision_dataset', train=False, download=False,                                       transform=torchvision.transforms.ToTensor())# 准备好数据集就放在dataloader中进行加载dataloader = DataLoader(dataset, batch_size=64)# 开始定义一个卷积类class Zkl(nn.Module):    def __init__(self):        super(Zkl, self).__init__()        self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)    def forward(self,x):        x = self.conv1(x)        return xwriter = SummaryWriter("nn_conv2d")zkl = Zkl()# print(zkl)step = 0for data in dataloader:    imgs,target = data    output = zkl(imgs)    #print(imgs.shape)    #print(output.shape)    writer.add_images('nn_conv2d_input',imgs,step)    #因为输出是6个通道,tensorboard无法解析,所以需要reshape三个通道    output = torch.reshape(output,(-1,3,30,30))    writer.add_images('nn_conv2d_output',output,step)    step+=1writer.close()

感谢各位的阅读,以上就是“F.conv2d pytorch卷积计算方式是什么”的内容了,经过本文的学习后,相信大家对F.conv2d pytorch卷积计算方式是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯