【问题标题】:Convert tensor of size 768 to 128将大小为 768 的张量转换为 128
【发布时间】:2021-12-07 16:21:46
【问题描述】:

我想在pytorch中使用nn.Conv()对形状[197, 1, 768][197,1,128]的张量进行投影

【问题讨论】:

    标签: pytorch conv-neural-network


    【解决方案1】:

    您可以使用 6 的内核大小和步幅,因为这是输入和输出时间大小之间的因素:

    x = torch.randn(197, 1, 768)
    conv = nn.Conv1d(in_channels=1, out_channels=1, kernel_size=6, stride=6)
    out = conv(x)
    print(out.shape)
    > torch.Size([197, 1, 128])
    

    Solution Source

    【讨论】:

      【解决方案2】:

      您可以使用宽泛的内核和/或结合特定的步幅来实现此目的。如果您坚持使用1 的膨胀,那么输入/输出空间维度关系由下式给出:

      out = [(2p + x - k)/s + 1]
      

      p 是填充,k 是内核大小,s 是步幅。 []引爆了整个量的一部分。

      应用在这里你有:

      128 = [(2p + 768 - k)/s + 1]
      

      所以你会得到:

      p = 2*p + 768 - (128-1)*s # one off
      

      如果你施加p = 0s = 6,你会发现k = 6

      >>> project = nn.Conv2d(197, 197, kernel_size=(1, 6), stride=6)
      >>> project(torch.rand(1, 197, 1, 768)).shape
      torch.Size([1, 197, 1, 128])
      

      另外,一种更直接但不同的方法是使用全连接层来学习映射:

      >>> project = nn.Linear(768, 128)
      >>> project(torch.rand(1, 197, 1, 768)).shape
      torch.Size([1, 197, 1, 128])
      

      【讨论】:

      • 谢谢。但在第一个解决方案(Conv)中,我想要“3”维,而不是“4”
      • 你可以用project(torch.rand(1, 197, 1, 768))[..., 0, :]挤压dim=2
      猜你喜欢
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多