池化一维张量
Posted
技术标签:
【中文标题】池化一维张量【英文标题】:Pooling for 1D tensor 【发布时间】:2021-11-08 00:03:21 【问题描述】:我正在寻找一种通过应用池化操作来减少一维张量长度的方法。我该怎么做?如果我申请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)
【问题讨论】:
【参考方案1】:我认为您的意思是:
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
【讨论】:
我不确定我是否关注你。我放了两个数字来表示 kernel_size 和 stride。 如果我添加一组您建议的新括号广告,我仍然会收到同样的错误。 @albus_c 编辑了我的答案 我仍然遇到同样的错误。我知道我应该将 numpy 数组转换为二维张量,其中一维设置为一。 @albus_c 是的,MaxPool1d
需要 2 或 3 维 kernel_size
【参考方案2】:
你的初始化很好,你已经定义了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])
【讨论】:
【参考方案3】:为了后代:解决方案是使用 A_tensor.reshape(768,1)
重塑张量。
【讨论】:
这是不正确的,看看结果张量的形状:它是空的。额外的维度应该添加first,而不是last。以上是关于池化一维张量的主要内容,如果未能解决你的问题,请参考以下文章