【问题标题】:Applying a 1D Convolution on a Tensor in Pytorch在 Pytorch 中对张量应用一维卷积
【发布时间】:2020-07-16 20:16:11
【问题描述】:

我有一个表示一组 1D 信号的张量,这些信号沿列轴连接。假设我有 300 个大小为 64 的 1D 信号。所以 [64x300]

我想在 GPU 上应用平滑卷积/移动平均内核 [0.2 0.2 0.2 0.2 0.2],但我不确定执行此操作的 API 到底是什么。可以举个例子吗?

【问题讨论】:

    标签: pytorch


    【解决方案1】:

    您可以使用普通的torch.nn.Conv1d 来执行此操作。

    输入

    在您的情况下,您有 300 时间步长的 1 频道 (1D)(请 refer to documentation 这些值将适当地为 C_inL_in)。

    因此,对于您的输入,它将是(您需要1它不能被挤压!):

    import torch
    
    inputs = torch.randn(64, 1, 300)
    

    卷积

    您需要torch.nn.Conv1dkernel_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

    如果你想使用GPU,只需像这样投射你的moduleinputs

    inputs = inputs.cuda()
    module = module.cuda()
    

    更多信息请参见CUDA documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2020-05-14
      • 2022-01-10
      • 2018-03-14
      • 2020-09-26
      • 1970-01-01
      • 2019-02-05
      相关资源
      最近更新 更多