池化一维张量

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_sizestride。对于一维最大池,两者都应该是整数,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

以上是关于池化一维张量的主要内容,如果未能解决你的问题,请参考以下文章

如何为一维信号(加速度计信号)选择张量的形状?由于张量形状,我不断收到值错误

Pytorch 张量操作 Python切片操作

在 Keras 中,如何任意调整一维张量的大小?

如何从给定的索引和值列表创建一维稀疏张量?

tensorflow——创建和操控张量

张量(tensor)的阶、形状、数据类型