torch.nn.Conv2d 是 PyTorch 顶用于界说二维卷积层的类。它在卷积神经麇集(CNN)中庸碌用于料理图像数据。以下是该类的用法和参数的详备先容:
类界说
Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
记取,在将样本数据传递给 Conv2d 层之前,确保其形态为 (batch_size, channels, height, width)。
参数
in_channels:输入通谈数。指定输入数据的通谈数。举例,关于RGB图像,in_channels为 3。
out_channels:输出通谈数。指定卷积层输出的特征图的通谈数。这不时决定了卷积核的数目。
kernel_size:卷积核的大小。不错是一个整数或一个元组(kH, kW),分歧指定卷积核的高度和宽度。
stride(默许为 1):卷积操作的步幅。不错是一个整数或一个元组 (sH, sW),分歧指定在垂直和水平日朝上的步幅。
padding(默许为):填充是指在愚弄卷积之前,在输入张量的周围添加零(或其他值,具体取决于填充模式)。用于收尾输出的空间维度。不错是一个整数或一个元组 (padH, padW),指定在输入数据的垂直和水平角落添加的填充像素数。
dilation(默许为 1):扩展率。不错是一个整数或一个元组 (dH, dW),指定卷积核元素之间的间距。
groups(默许为 1):分组卷积。指定卷积分组的数目。in_channels和out_channels齐必须能被groups整除。(这个参数先按默许值,现在还用不到,先无论他。)
bias(默许为 True):是否为每个输出通谈添加偏置项。
padding_mode(默许为‘zeros’):用于指定填充模式。不错是 ‘zeros’、‘reflect’ 、 ‘replicate’和’circular’。
不同的填充模式会影响输入数据角落的料理形势。以下是padding_mode的几个选项过火含义:
'zeros'(默许):
– 在输入数据的角落填充零。这是最常用的填充模式,因为它约略且辩论恶果高。当不需要相称料理角落特征时,这是一个好的选拔。
'reflect':
– 使用输入数据角落的值进行反射填充。这意味着角落的值会被镜像反射到填充区域。
– 这种模式有助于保留角落特征,因为它不会引入新的零值。
'replicate':
– 使用输入数据角落的值进行复制填充。这意味着角落的值会被复制到填充区域。
– 这种模式也有助于保留角落特征,因为它不会引入新的值,仅仅复制现存的角落值。
circular:
– 将输入张量的左角落将被复制到右角落,上角落将被复制到下角落,依此类推,从而在卷积操作中创建一个不绝的角落料理,使得卷积核在规模处的操作大致议论到输入数据的周期性特征。
谨防:
• ‘zeros’(置零):适用于一般用途,但可能会引入东谈主为规模
• ‘reflect’(反射):能更好地保留图像的局部特征
• ‘replicate’(复制):能平滑地扩展角落信息
• ‘circular’(轮回):适用于周期性数据或特定鸿沟的愚弄
示例:
是不是照旧对这几个填充模式云里雾里、傻傻分不显现,没事儿,底下让我用一个约略的例子来解说“torch.nn.Conv2d”中的padding_mode参数。
输入一个 3×3 的张量:
1 2 34 5 67 8 9
填充像素数 padding=1, 底下列出了每种填充模式的输出收尾:
padding_mode=‘zeros’:
0 0 0 0 00 1 2 3 00 4 5 6 00 7 8 9 00 0 0 0 0
padding_mode=‘reflect’:
5 4 5 6 52 1 2 3 25 4 5 6 58 7 8 9 85 4 5 6 5
padding_mode=‘replicate’:
1 1 2 3 31 1 2 3 34 4 5 6 67 7 8 9 97 7 8 9 9
padding_mode=‘circular’:
9 7 8 9 73 1 2 3 16 4 5 6 49 7 8 9 73 1 2 3 1
代码示例
底下的例子展示了若何使用Conv2d:
import torchimport torch.nn as nn# Define a convolutional layerconv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)# Example input: a batch of 2 RGB images of size 64x64input_tensor = torch.randn(2, 3, 64, 64)# Forward pass through the convolutional layeroutput_tensor = conv_layer(input_tensor)print(output_tensor.shape) # Output shape will be [2, 16, 64, 64]
创建Conv2d层后,不错将其动作神经麇集的一部分使用。以下是一个约略的例子,展示如安在神经采汇注使用Conv2d:
import torchimport torch.nn as nnimport torch.nn.functional as Fclass SimpleCNN(nn.Module):def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1) self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.fc1 = nn.Linear(16 * 16 * 16, 10)def forward(self, x): x = F.relu(self.conv1(x)) x = self.pool(x) x = x.view(-1, 16 * 16 * 16) x = self.fc1(x)return x# 创建麇集实例net = SimpleCNN()# 创建一个输入张量input_tensor = torch.randn(1, 3, 32, 32) # (batch_size, channels, height, width)# 前向传播output = net(input_tensor)print(output)
蚁合学问亚博体育(中国)官方网站,柔润你我。
Powered by 亚博买球app-新版 @2013-2022 RSS地图 HTML地图
Powered by365建站