一维张量的池化
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_size
和 stride
。对于一维最大池,两者都应该是整数,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)
重塑张量。
我正在寻找一种通过应用池化操作来减少一维张量长度的方法。我该怎么做?如果我应用 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_size
和 stride
。对于一维最大池,两者都应该是整数,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)
重塑张量。