PyTorch卷积层基础七问

1,普通卷积层的参数数量该如何计算?

普通卷积的操作分成3个维度,在空间维度(H和W维度)是共享卷积核权重,滑窗相乘求和(融合空间信息),在输入通道维度是每一个通道使用不同的卷积核参数并对输入通道维度求和(融合通道信息),在输出通道维度操作方式是并行堆叠(多种),有多少个卷积核就有多少个输出通道。

普通卷积层的参数数量 = 输入通道数×卷积核尺寸(如3乘3)×输出通道数(即卷积核个数) + 输出通道数(考虑偏置时)

注:对于卷积核参数共享的理解

权值是卷积核里面的数,给定一张输入图片,用一个卷积核去扫描这张图,这张图的每个位置都是被同样的卷积核扫描的,所以权重是一样的,也就是共享。

有权重共享
无权重共享

2,卷积层的输出尺寸该如何计算?

卷积输出尺寸计算公式 o = (i + 2p -k)//s  + 1

对空洞卷积 k' = d(k-1) + 1

o是输出尺寸,i 是输入尺寸,p是 padding大小,k 是卷积核尺寸,s是stride步长,d是空洞卷积dilation膨胀系数。

3,空洞卷积有什么作用?有什么缺点?

空洞卷积和普通卷积相比,空洞卷积可以在保持较小参数规模的条件下增大感受野,常用于图像分割领域。其缺点是可能产生网格效应,即有些像素被空洞漏过无法利用到,可以通过使用不同膨胀因子的空洞卷积的组合来克服该问题。

 4,什么是分组卷积,分组卷积有什么作用?

和普通卷积相比,分组卷积将输入通道分成g组,卷积核也分成对应的g组,每个卷积核只在其对应的那组输入通道上做卷积,最后将g组结果堆叠拼接。由于每个卷积核只需要在全部输入通道的1/g个通道上做卷积,参数量降低为普通卷积的1/g。分组卷积要求输入通道和输出通道数都是g的整数倍。

5,什么是深度可分离卷积,和普通卷积相比深度可分离卷积有什么优点? 

深度可分离卷积的思想是将融合空间信息和融合通道信息的操作在卷积中分成独立的两步完成。做法是先用g=m(输入通道数)的分组卷积逐通道作用融合空间信息,再用n(输出通道数)个1乘1卷积融合通道信息。其参数量为 (m×k×k)+ n×m, 相比普通卷积的参数量 m×n×k×k 显著减小。同时,由于深度可分离卷积融合空间信息与融合通道信息相互分离,往往还能比普通卷积取得更好的效果。

6,什么是转置卷积/反卷积?它有什么作用? 

一般的卷积操作后会让特征图尺寸变小,但转置卷积(也被称为反卷积)可以实现相反的效果,即放大特征图尺寸。对两种方式理解转置卷积,第一种方式是转置卷积是一种特殊的卷积,通过设置合适的padding的大小来恢复特征图尺寸。第二种理解基于卷积运算的矩阵乘法表示方法,转置卷积相当于将卷积核对应的表示矩阵做转置,然后乘上输出特征图压平的一维向量,即可恢复原始输入特征图的大小。

7,CV领域有哪些常用的上采样方法? 

除了使用转置卷积进行上采样外,在图像分割领域更多的时候一般是使用双线性插值的方式进行上采样,该方法没有需要学习的参数,通常效果也更好,除了双线性插值之外,还可以使用最邻近插值的方式进行上采样,但使用较少。此外,还有一种上采样方法是反池化。使用也不多。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyTorch是一个基于Python的科学计算库,它支持动态计算图,可用于创建深度学习模型。下面是PyTorch中一些基础API的使用: 1. 张量操作 张量是PyTorch中的基本据结构,类似于NumPy中的组。PyTorch中的张量操作与NumPy中的组操作类似,可以进行加、减、乘、除等运算。 ```python import torch # 创建张量 x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([[5, 6], [7, 8]]) # 张量加法 z = x + y # 张量乘法 z = torch.matmul(x, y) # 张量转置 z = x.t() # 张量求和 z = torch.sum(x) ``` 2. 自动求导 PyTorch中的自动求导功能可以自动计算变量的梯度。为了使用自动求导功能,需要将变量设置为`requires_grad=True`。 ```python import torch # 创建张量,并设置requires_grad=True x = torch.tensor([1.0, 2.0], requires_grad=True) y = torch.tensor([3.0, 4.0], requires_grad=True) # 计算函 z = x + y w = z.sum() # 计算梯度 w.backward() # 变量梯度 print(x.grad) print(y.grad) ``` 3. 模型构建 PyTorch中可以使用`torch.nn`模块来构建神经网络模型。`torch.nn`中包含了多种层类型,如全连接层、卷积层、池化层等。 ```python import torch.nn as nn # 定义模型类 class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.fc = nn.Linear(10, 5) def forward(self, x): x = self.fc(x) return x # 创建模型实例 model = Model() # 计算输出 input = torch.randn(1, 10) output = model(input) ``` 以上是PyTorch中一些基础API的使用,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值