我有一个张量,它表示一组一维信号,这些信号沿列轴连接。假设我有 300 个大小为 64 的一维信号。所以 [64x300]
我想在 GPU 上应用平滑卷积/移动平均内核 [0.2 0.2 0.2 0.2 0.2],但我不确定具体的 API 是什么。可以给我举个例子吗?
最佳答案
您可以使用常规的 torch.nn.Conv1d
来执行此操作。
输入
在您的情况下,您有 1
channel (1D
),具有 300
时间步长(请 refer to documentation 这些值将适本地 C_in
和 L_in
)。
因此,对于您的输入来说,它是(您需要 1
,它无法被挤压!):
import torch
inputs = torch.randn(64, 1, 300)
卷积
您需要torch.nn.Conv1d
,kernel_size
等于5
(如您的元素所示:[0.2 0.2 0.2 0.2 0.2]
)并且没有偏差
。我假设您的输出必须具有相同的大小 (300
),因此必须在开头和结尾填充 2
元素。所有这些为我们提供了这个模块:
module = torch.nn.Conv1d(
in_channels=1, out_channels=1, kernel_size=5, padding=2, bias=False
)
该模块的权重(0.2
值)可以这样指定:
module.weight.data = torch.full_like(module.weight.data, 0.2)
torch.full_like
适用于任何大小的内核,以防您需要 5
之外的其他大小。
最后运行到平均步数即可完成:
out = module(inputs)
GPU
如果您想使用GPU
,只需像这样转换您的模块
和输入
:
inputs = inputs.cuda()
module = module.cuda()
参见CUDA documentation了解更多信息。
关于pytorch - 在 Pytorch 中对张量应用一维卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61032581/