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

如何通过ConvTranspose3d将张量尺寸从[1,64,8,32,32]转为[1,3,16,112,112]

解决3D转置卷积尺寸匹配问题

首先,我们得先明确PyTorch中nn.ConvTranspose3d的输出尺寸计算公式,每个维度(深度D、高度H、宽度W)的输出尺寸遵循:

output_size = (input_size - 1) * stride - 2 * padding + kernel_size + output_padding

你的输入张量是[1, 64, 8, 32, 32],对应维度是(N, C_in, D_in, H_in, W_in),目标输出是[1, 3, 16, 112, 112]。目前你用的参数在深度D维度已经得到了正确的16帧,我们来验证一下:

  • D_in=8,stride_D=2,padding_D=1,kernel_size_D=4
  • 计算:(8-1)*2 - 2*1 +4 = 14-2+4=16,完全符合预期。

问题出在高度H和宽度W维度,当前参数得到64,而你需要112。我们可以通过调整这两个维度的stride和padding来匹配目标尺寸,同时保持深度维度的参数不变。

具体参数调整方案

我们需要让H/W维度满足:

112 = (32-1)*stride_HW - 2*padding_HW + kernel_size_HW

假设我们保持kernel_size在H/W维度还是4(和深度维度一致,方便计算),代入公式:

112 = 31*stride_HW - 2*padding_HW +4
→ 31*stride_HW -2*padding_HW = 108

通过试算,我们可以找到一组合适的参数:

  • stride_HW=4,代入得:31*4 -2*padding_HW=108 → 124-2*padding_HW=108 → padding_HW=8

这样组合起来,最终的ConvTranspose3d参数应该是:

import torch.nn as nn

conv_transpose = nn.ConvTranspose3d(
    in_channels=64,
    out_channels=3,
    kernel_size=(4, 4, 4),  # 深度D=4,H/W=4
    stride=(2, 4, 4),       # 深度D=2(保持帧数翻倍),H/W=4
    padding=(1, 8, 8),      # 深度D=1(保持帧数正确),H/W=8
    bias=False
)

验证尺寸

我们可以快速验证一下:

  • D维度输出:(8-1)*2 -2*1 +4=16 ✔️
  • H维度输出:(32-1)*4 -2*8 +4=124-16+4=112 ✔️
  • W维度输出和H完全一致,也是112 ✔️
  • 通道数从64→3,符合要求 ✔️

补充说明

如果之后遇到类似的尺寸匹配问题,你可以直接套用开头的公式,根据目标尺寸反推stride、padding和kernel_size的组合。另外,output_padding参数可以用来微调最后1-2个像素的差异(比如当公式计算结果和目标差1时),但这里我们通过调整stride和padding已经完美匹配,所以不需要用到它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:26:35