pytorch中torch.nn.Conv2d中的groups参数

先来看官方的说明:

  • groups = 1 时就是标准的卷积运算

  • groups=2 时就是分组为2的组卷积

分组后分两半进行卷积运算,6个卷积核分两组,最后将结果cat在一起

  • groups = input_channels的情况是这样的

当输入通道数等于输出通道数时,就是深度可分离卷积的depthwise conv,可查看mobilenet的论文理解该卷积

令我迷惑的时输出通道数不等于输入通道数时(注意输入输出通道数选取均需要能被groups整除,这意味这输出通道数一定是输入通道数的倍数了)

为此做了一个小实验:

根据结果可以看出来,实际上4个filter分了output_channels/input_channels组,例子中是两组

输入特征图的每一个channel对应一组,进行通道对通道的卷积运算

torch.nn.Conv2dPyTorch用于二维卷积操作的类模块。它有以下几个参数: 1. in_channels:输入图像的深度。对于彩色图像,深度为3(RGB通道),对于灰度图像,深度为1。 2. out_channels:输出图像的深度,即卷积核的数量。每个卷积核都会生成一个输出通道。 3. kernel_size:卷积核的大小。可以是一个整数,表示正方形卷积核的边长;也可以是一个元组,表示卷积核的高度和宽度。 4. stride:卷积核的步长。可以是一个整数,表示在高度和宽度上的相同步长;也可以是一个元组,表示在高度和宽度上的不同步长。 5. padding:输入图像四周的填充大小。可以是一个整数,表示在高度和宽度上的相同填充大小;也可以是一个元组,表示在高度和宽度上的不同填充大小。 6. dilation:卷积核元素之间的间距。可以是一个整数,表示在高度和宽度上的相同间距;也可以是一个元组,表示在高度和宽度上的不同间距。 7. groups:输入和输出通道之间的连接方式。默认值为1,表示每个输入通道都与每个输出通道连接。可以设置为其他整数,以实现分组卷积操作。 8. bias:是否使用偏置项。默认为True,表示使用偏置项;设置为False则不使用偏置项。 下面是一个示例代码,演示了如何使用torch.nn.Conv2d进行二维卷积操作: ```python import torch import torch.nn as nn # 创建输入张量 input_tensor = torch.randn(1, 3, 32, 32) # 输入深度为3的32x32图像 # 创建卷积层 conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1) # 执行卷积操作 output_tensor = conv_layer(input_tensor) # 输出结果的形状 print(output_tensor.shape) # 输出:torch.Size([1, 64, 32, 32]) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值