pytorch的nn.Conv2d()参数及尺寸计算详解(与Tensorflow.nn.Conv2d相比)

参数详解

in_channels,
#输入数据的通道数(如彩色图片,一般为3)
out_channels,
#输出数据的通道数(就是我想让输出多少通道,就设置为多少)
kernel_size,
#卷积核的尺寸(如(3,2),3与(3,3)等同)
stride = 1,
#卷积步长,就是卷积操作时每次移动的格子数
padding = 0,
#原图周围需要填充的格子行(列)数,无填充的话卷积到边缘会直接忽略该边缘
dilation = 1,
#空洞卷积的空洞指数,一般默认为1即可
groups = 1,
#分组卷积的组数,一般默认设置为1,不用管
bias = True,
#卷积偏置,一般设置为False,True的话可以增加模型的泛化能力
padding_mode = 'zeros’
#设置边缘填充值为0,或别的数,一般都默认设置为0

torch.nn.Conv2d(    in_channels,  #输入数据的通道数(如彩色图片,一般为3)
					out_channels,
### PyTorch中 `nn.Conv2d` 参数详解 #### 1. 参数含义 `nn.Conv2d` 是 PyTorch 中用于实现二维卷积操作的模块。以下是其主要参数的详细解释: - **in_channels**: 输入张量的通道数,表示输入图像或特征图的深度[^3]。 - **out_channels**: 输出张量的通道数,即卷积层输出的特征图数量,通常卷积核的数量一致[^3]。 - **kernel_size**: 卷积核的大小,可以是一个整数(表示方形卷积核)或一个元组(表示非方形卷积核)。例如,`kernel_size=3` 表示 \(3 \times 3\) 的卷积核,而 `kernel_size=(3, 5)` 表示 \(3 \times 5\) 的卷积核[^1]。 - **stride**: 卷积核在输入上滑动的步幅,默认值为 1。较大的步幅会减少输出的空间尺寸[^1]。 - **padding**: 在输入边界添加的零填充量。默认值为 0,表示不进行填充。如果设置为 1,则会在输入的每个维度上增加一行/列的零填充[^2]。 - **dilation**: 卷积核元素之间的间距。默认值为 1,表示标准卷积。当 dilation 大于 1 时,称为扩张卷积或空洞卷积。 - **groups**: 控制输入和输出之间的连接方式。默认值为 1,表示所有输入通道都参卷积运算。如果设置为输入通道数,则表示分组卷积,每组独立计算[^1]。 - **bias**: 是否为卷积层添加偏置项。默认值为 True,表示添加偏置[^1]。 - **padding_mode**: 指定填充的方式。可选值包括 `'zeros'`(零填充)、`'reflect'`(反射填充)、`'replicate'`(复制边缘值填充)和 `'circular'`(循环填充),默认为 `'zeros'`[^2]。 #### 2. 示例代码 以下是一个简单的代码示例,展示如何使用 `nn.Conv2d`: ```python import torch import torch.nn as nn # 定义卷积层 conv_layer = nn.Conv2d(in_channels=1, out_channels=4, kernel_size=3, stride=1, padding=1) # 创建一个输入张量 (batch_size=1, channels=1, height=5, width=5) input_tensor = torch.randn(1, 1, 5, 5) # 应用卷积操作 output_tensor = conv_layer(input_tensor) print("Input Tensor Shape:", input_tensor.shape) print("Output Tensor Shape:", output_tensor.shape) ``` 运行上述代码后,`output_tensor` 的形状将是 `(1, 4, 5, 5)`。这是因为通过设置 `padding=1`,输入张量的高度和宽度保持不变,同时生成了 4 个输出通道[^3]。 #### 3. 计算公式 对于输入张量形状为 \(N \times C_{\text{in}} \times H_{\text{in}} \times W_{\text{in}}\),经过卷积操作后,输出张量的形状为 \(N \times C_{\text{out}} \times H_{\text{out}} \times W_{\text{out}}\),其中: \[ H_{\text{out}} = \left\lfloor \frac{H_{\text{in}} + 2 \cdot \text{padding} - \text{dilation} \cdot (\text{kernel_size} - 1) - 1}{\text{stride}} + 1 \right\rfloor \] \[ W_{\text{out}} = \left\lfloor \frac{W_{\text{in}} + 2 \cdot \text{padding} - \text{dilation} \cdot (\text{kernel_size} - 1) - 1}{\text{stride}} + 1 \right\rfloor \] #### 4. 注意事项 - 如果需要保留输入张量的空间尺寸不变,可以通过设置 `padding` 为 \(\frac{\text{kernel_size} - 1}{2}\) 来实现(前提是 `kernel_size` 为奇数)[^1]。 - 当 `groups=in_channels=out_channels` 时,表示深度可分离卷积(Depthwise Convolution)[^1]。 - 在实际应用中,`nn.Conv2d` 常其他层(如激活函数、池化层等)结合使用,以构建复杂的神经网络模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值