我有一个张量,代表一组一维信号,它们沿着列轴连接在一起。假设我有300个尺寸为64的1D信号。所以[64x300]
我想在GPU上对其应用[0.2 0.2 0.2 0.2 0.2]的平滑卷积/移动平均内核,但是我不确定确切要使用什么API。能给我一个例子吗?
答案 0 :(得分:2)
您可以使用常规的torch.nn.Conv1d
来完成此操作。
在您的情况下,您有1
个频道(1D
),其时间步长为300
(请refer to documentation,这些值将分别为C_in
和{{1} }。
因此,您的输入应该是(您需要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]
。我假设您的输出必须具有相同的大小(bias
),因此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
和module
:
inputs
有关更多信息,请参见CUDA documentation。