基于小土堆学习
1、卷积层
卷积操作涉及到一个称为“卷积核”或“滤波器”的小窗口,在输入数据上滑动,并对每个位置上的数据进行加权求和,可能还会加上一个偏置项。这个加权求和的结果就构成了输出特征图(feature map)中的一个元素。卷积核的权重在训练过程中通过反向传播算法学习得到。
卷积层的特点
- 局部连接:卷积层中的每个神经元只与输入数据的一个局部区域相连,这使得网络能够关注到数据的局部特征。
- 权重共享:在卷积层中,同一个卷积核的权重在滑动过程中是共享的,这意味着无论卷积核滑动到输入数据的哪个位置,它都使用相同的权重。这大大减少了模型的参数数量。
- 多卷积核:一个卷积层可以有多个不同的卷积核,每个卷积核都可以提取输入数据的一种特定特征。因此,卷积层的输出通常是一个深度增加的特征图,其中每个深度切片都是由一个不同的卷积核生成的。
- 步长和填充:卷积操作可以通过步长(stride)和填充(padding)来控制输出特征图的尺寸。步长决定了卷积核滑动的距离,而填充则决定了在输入数据边缘添加多少零值。
在PyTorch中,卷积层是用来处理图像、视频、文本或语音数据中的空间层次结构的重要工具。以下是您提到的各种卷积层的简要概述:
-
nn.Conv1d:应用于一维输入信号(例如时间序列或文本数据)的卷积层。它适用于多个输入平面组成的输入信号。
-
nn.Conv2d:应用于二维输入信号(如图像)的卷积层。它同样适用于多个输入平面组成的输入信号。
-
nn.Conv3d:应用于三维输入信号(如视频或三维医学图像)的卷积层。它适用于多个输入平面组成的输入信号。
-
nn.ConvTranspose1d:应用于一维输入信号的转置卷积层。转置卷积常用于上采样或增加输入数据的维度。
-
nn.ConvTranspose2d:应用于二维输入信号的转置卷积层。同样用于上采样或增加输入数据的维度。
-
nn.ConvTranspose3d:应用于三维输入信号的转置卷积层。也用于上采样或增加输入数据的维度。
-
nn.LazyConv1d, nn.LazyConv2d, nn.LazyConv3d:这些是带有延迟初始化in_channels参数的卷积层版本。这意味着在首次前向传递之前,不需要指定输入通道的数量。
-
nn.LazyConvTranspose1d, nn.LazyConvTranspose2d, nn.LazyConvTranspose3d:这些是带有延迟初始化in_channels参数的转置卷积层版本。
-
nn.Unfold:从批处理的输入张量中提取滑动局部块。这可以用于实现自定义的卷积操作。
-
nn.Fold:将滑动局部块数组组合成一个大的包含张量。这是nn.Unfold操作的逆操作,也常用于自定义卷积操作。
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
torch.nn.Conv2d 是 PyTorch 中用于应用二维卷积层的一个类。这个类非常适用于处理图像数据,因为它可以在图像的宽度和高度上滑动窗口(或称为“核”),从而提取特征。下面是 torch.nn.Conv2d 类参数的详细解释:
-
in_channels (int): 输入信号的通道数。例如,对于RGB图像,in_channels 就是3。
-
out_channels (int): 卷积产生的通道数。这个参数决定了卷积层输出的深度。
如果out_channels=2,就是2个卷积核,就是又会得出一个数据
-
kernel_size (int 或 tuple): 卷积核的大小。可以是一个整数,表示卷积核的高度和宽度都是这个值;也可以是一个元组 (height, width),分别指定卷积核的高度和宽度。定义了卷积核的大小,只需要设置尺寸,其中的数字不需要我们设置
-
stride (int 或 tuple, 可选): 卷积时的步长。默认值为1。可以是一个整数,表示在高度和宽度上的步长都是这个值;也可以是一个元组 (stride_height, stride_width),分别指定在高度和宽度上的步长。
-
padding (int 或 tuple, 可选): 输入边缘的填充大小。默认值为0。可以是一个整数,表示在高度和宽度上的填充都是这个值;也可以是一个元组 (padding_height, padding_width),分别指定在高度和宽度上的填充。
-
dilation (int 或 tuple, 可选): 卷积核元素之间的间距。默认值为1。可以是一个整数,表示在高度和宽度上的间距都是这个值;也可以是一个元组 (dilation_height, dilation_width),分别指定在高度和宽度上的间距。
-
groups (int, 可选): 控制输入和输出之间的连接的组数。默认值为1。当使用多个组时,可以实现类似深度可分离卷积的操作,这有助于减少计算量和参数数量。
-
bias (bool, 可选): 是否添加偏置项。默认值为True。
-
padding_mode (string, 可选): 填充的模式,可以是 - ‘zeros’、‘reflect’、‘replicate’ 或 ‘circular’。默认值为 ‘zeros’,表示使用零填充。
-
device (torch.device, 可选): 指定张量所在的设备(CPU或GPU