一维张量的池化

Pooling for 1D tensor

我正在寻找一种通过应用池化操作来减少一维张量长度的方法。我该怎么做?如果我应用 MaxPool1d,我会得到错误 max_pool1d() input tensor must have 2 or 3 dimensions but got 1

这是我的代码:

import numpy as np
import torch

A = np.random.rand(768)
m = nn.MaxPool1d(4,4)
A_tensor = torch.from_numpy(A)
output = m(A_tensor)

我想你的意思是:

m = nn.MaxPool1d((4,), 4)

docs中所述,参数为:

torch.nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

如您所见,它是一个 kernel_size,而不是 kernel_size1 kernel_size2。相反,它只是 kernel_size

您的初始化很好,您已经定义了 nn.MaxPool1d 的前两个参数:kernel_sizestride。对于一维最大池,两者都应该是整数,not tuples.

问题出在你的输入上,它应该是二维的(缺少批处理轴):

>>> m = nn.MaxPool1d(4, 4)
>>> A_tensor = torch.rand(1, 768)

那么推理会导致:

>>> output = m(A_tensor)
>>> output.shape
torch.Size([1, 192])

为了后代:解决方案是使用 A_tensor.reshape(768,1) 重塑张量。