文章目录
torch.nn.functional.conv1d
参数:
dilation:表示的是空洞卷积。
groups:分组卷积(按照通道维数划分)
举例:
import torch
import torch.nn.functional as F
# 模拟批次大小、高度、特征维度、宽度等维度的值
B = 2
H = 3
D = 4
W = 5
R = 2
N = 3
# 随机初始化xs张量,维度为 (B, H, 2, D, W)
xs = torch.randn(B, H, 2, D, W)
print("xs原始维度:", xs.shape)
# 按照前面代码逻辑,计算_B和_L(这里简化示例,假设是一种简单的计算方式)
_B = B * H
_L = W
# 对xs进行形状调整,使其符合conv1d的输入要求
xs_reshaped = xs.view(_B, -1, _L)
print("xs调整形状后维度:", xs_reshaped.shape)
# 随机初始化proj_weight张量,维度为 (2 * D, (R + N + N))
proj_weight = torch.randn(2 * D, (R + N + N))
print("proj_weight原始维度:", proj_weight.shape)
# 对proj_weight进行形状调整,使其符合conv1d的权重要求
proj_weight_reshaped = proj_weight.view(-1, D, 1)
print("proj_weight调整形状后维度:", proj_weight_reshaped.shape)
# 执行一维卷积操作,groups设置为2
x_dbl = F.conv1d(xs_reshaped, proj_weight_reshaped, groups=2)
print("x_dbl输出维度:", x_dbl.shape)
结果:
xs原始维度: torch.Size([2, 3, 2, 4, 5])
xs调整形状后维度: torch.Size([6, 8, 5])
proj_weight原始维度: torch.Size([8, 8])
proj_weight调整形状后维度: torch.Size([16, 4, 1])
x_dbl输出维度: torch.Size([6, 16, 5])
在 PyTorch 中,torch.nn.functional.conv1d(通常简称为 F.conv1d)和 torch.nn.Conv1d 存在以下一些区别:
1. 所属模块及使用方式
-
torch.nn.functional.conv1d
(F.conv1d
):
它属于PyTorch的nn.functional
模块,是一个函数形式的接口。使用时直接像调用普通函数一样传入相应的参数来执行一维卷积操作,例如:import torch import torch.nn.functional as F input_tensor = torch.randn(1, 3, 5) # 模拟输入张量,形状为(批次大小, 通道数, 长度) weight = torch.randn(6, 3, 3) # 卷积权重,形状为(输出通道数, 输入通道数, 卷积核长度) output = F.conv1d(input_tensor, weight)
这种方式更加灵活,适用于一次性的卷积操作需求,或者在自定义复杂模块中需要精细控制卷积过程参数(如步长、填充、分组等)时使用。
-
torch.nn.Conv1d
:
它是torch.nn
模块中定义的一个类,代表了一维卷积层(Layer)。使用时需要先实例化这个类,然后像使用对象的方法一样调用它来执行卷积操作,例如:import torch import torch.nn as nn conv_layer = nn.Conv1d(in_channels=3, out_channels=6, kernel_size=3) # 实例化一维卷积层 input_tensor = torch.randn(1, 3, 5) # 模拟输入张量 output = conv_layer(input_tensor) # 通过实例对象调用方法进行卷积操作
它便于将卷积层作为神经网络架构中的一个组件进行管理、组合以及参与模型的训练
2. 可训练性及参数管理
-
torch.nn.functional.conv1d
(F.conv1d
):- 本身只是一个执行卷积计算的函数,它并不直接管理卷积操作中的权重、偏置等参数是否可训练。
- 其使用的权重和偏置通常是由外部传入的张量,这些张量如果要参与训练(即根据反向传播更新参数),需要开发者自行在合适的训练逻辑中进行处理(比如手动将它们作为需要优化的参数传递给优化器等)。
-
torch.nn.Conv1d
:- 作为一个卷积层类,内部自动管理着卷积操作相关的权重、偏置等参数。
- 在实例化时,会根据传入的参数(如输入通道数、输出通道数、卷积核大小等)自动初始化相应的权重和偏置张量(权重通常是随机初始化,偏置默认初始化为0,不过可以通过参数进行自定义初始化)
- 这些参数默认是可训练的,会自动参与到模型的训练过程中。在反向传播时,PyTorch会依据计算图和链式法则自动计算这些参数相对于损失函数的梯度,并通过优化器(如随机梯度下降等优化算法的实现)来更新这些参数,使得模型能够不断学习和优化。