You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对(512,20,32)张量在行维度执行AvgPool得到(512,10,32)

解决AvgPool1d对指定维度池化的问题

你的问题核心是nn.AvgPool1d默认对输入的最后一维执行池化操作,而你需要池化的是中间的20维度(对应目标形状的10)。

解决方案:调整维度顺序

先将需要池化的维度转移到最后一维,执行池化后再还原维度顺序即可:

import torch
import torch.nn as nn

# 定义池化层
pool = nn.AvgPool1d(kernel_size=2, stride=2)
# 生成测试数据
data = torch.rand(512, 20, 32)

# 调整维度:把要池化的20维度放到最后(AvgPool1d默认处理最后一维)
data_permuted = data.permute(0, 2, 1)  # 形状变为 (512, 32, 20)
# 执行池化,此时池化作用在最后一维20,得到10
out = pool(data_permuted)  # 形状变为 (512, 32, 10)
# 还原维度顺序
out = out.permute(0, 2, 1)  # 最终形状 (512, 10, 32)

print(out.shape)  # 输出 torch.Size([512, 10, 32])

原代码失败原因

PyTorch的nn.AvgPool1d要求输入格式为(批量大小N, 通道数C, 序列长度L),你的输入(512,20,32)被解析为:

  • N=512:批量大小
  • C=20:通道数
  • L=32:要池化的序列维度

因此池化操作被应用在了最后一维32上,导致输出形状变为(512,20,16),而非预期的结果。

内容的提问来源于stack exchange,提问作者user3668129

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:20:36