torch.nn.functional.conv1d

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.conv1dF.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.conv1dF.conv1d

    • 本身只是一个执行卷积计算的函数,它并不直接管理卷积操作中的权重、偏置等参数是否可训练
    • 其使用的权重和偏置通常是由外部传入的张量,这些张量如果要参与训练(即根据反向传播更新参数),需要开发者自行在合适的训练逻辑中进行处理(比如手动将它们作为需要优化的参数传递给优化器等)。
  • torch.nn.Conv1d

    • 作为一个卷积层类,内部自动管理着卷积操作相关的权重、偏置等参数
    • 在实例化时,会根据传入的参数(如输入通道数、输出通道数、卷积核大小等)自动初始化相应的权重和偏置张量(权重通常是随机初始化,偏置默认初始化为0,不过可以通过参数进行自定义初始化)
    • 这些参数默认是可训练的,会自动参与到模型的训练过程中。在反向传播时,PyTorch会依据计算图和链式法则自动计算这些参数相对于损失函数的梯度,并通过优化器(如随机梯度下降等优化算法的实现)来更新这些参数,使得模型能够不断学习和优化。
torch.conv1d是一个函数,它是torch.nn.functional模块中的一个方法。这个函数用于执行一维卷积操作。卷积操作是深度学习中常用的一种操作,通过对输入数据和卷积核进行运算,可以提取输入数据的特征。torch.conv1d函数的参数包括输入数据、卷积核、步幅、填充等。它返回的是卷积操作的结果。在使用torch.conv1d之前,通常需要先对卷积核的权重和偏置进行初始化。可以使用torch.nn.init.constant_函数将卷积核的权重初始化为全1,将偏置初始化为0。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【Pytorch深度学习笔记 10】基本的卷积操作conv1d](https://blog.csdn.net/i13270752870/article/details/121417435)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [torch.nn.Conv1d计算过程简易图解](https://blog.csdn.net/weixin_42410798/article/details/124451826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值