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

使用Einops rearrange遇维度不匹配错误,求助解决方案

问题解决步骤

1. 错误原因分析

你的输入张量是3维(torch.Size([3, 337, 225]),对应通道数C、高度H、宽度W),但你写的rearrange模式(b1 b2) h w c期望输入是4维张量,这直接导致维度不匹配错误。此外,当前图像高度337无法被2整除,后续拆分时也会触发错误。

2. 具体修正方案

步骤1:调整图像尺寸,确保可被分块参数整除

修改Resize操作,将图像调整为高度和宽度能被b1=2、b2=2整除的尺寸,比如(336, 224):

process = transforms.Compose([
    transforms.Resize((336, 224)),  # 336=2*168,224=2*112
    transforms.ToTensor()
])

步骤2:修正Einops的rearrange模式

根据输入张量的3维格式(C, H, W),调整模式以匹配维度,同时实现2x2分块拼接的需求:

from einops import rearrange

cat = Image.open('cat.jpeg').convert('RGB')
cat = process(cat)

# 模式解析:将Cx(b1*h)x(b2*w) 重组为 (b1*h)x(b2*w)xC
result = rearrange(cat, 'c (b1 h) (b2 w) -> (b1 h) (b2 w) c', b1=2, b2=2)

3. 模式解释

  • 输入模式c (b1 h) (b2 w):对应输入张量的3个维度,其中高度H被拆分为b1(分块行数)和h(单块高度)的乘积,宽度W被拆分为b2(分块列数)和w(单块宽度)的乘积。
  • 输出模式(b1 h) (b2 w) c:将分块按行拼接成新的高度b1*h,按列拼接成新的宽度b2*w,同时将通道维度移到最后(符合PIL图像的HxWxC格式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:10:49