PyTorch合并不同形状张量遇RuntimeError,求解决方法
PyTorch中合并不同形状张量的正确方法
错误原因分析
你遇到的RuntimeError本质是:pfinal的第0维度大小是6,而你试图通过expand将其扩展为15行,但expand要求被扩展的维度要么是1,要么与目标维度大小完全匹配——6和15不满足这个条件,所以无法扩展。另外,91并不是6的整数倍(91=6×15+1),用整除得到的15次也无法凑出和x一致的91行。
正确解决方案
要合并x(形状[91,6])和pfinal(形状[6,6]),必须让两者的行维度(第0维)大小一致,再按列维度(dim=-1)拼接。以下是两种可行方法:
方法1:重复后切片(简单直接)
先将pfinal重复足够多次,再截取前91行,确保行维度与x匹配:
# 重复pfinal 16次得到96行,再取前91行 pfinal_expanded = pfinal.repeat(16, 1)[:91, :] # 按列拼接 x = torch.cat((x, pfinal_expanded), dim=-1)
方法2:指定每行重复次数(精准控制)
如果需要精准分配每行的重复次数(比如让pfinal的第一行重复16次,其余5行各重复15次,刚好凑出91行),可以用repeat_interleave:
# 定义每行的重复次数:第一行16次,剩下5行各15次 repeat_counts = [16] + [15] * 5 pfinal_expanded = pfinal.repeat_interleave(repeat_counts, dim=0) # 按列拼接 x = torch.cat((x, pfinal_expanded), dim=-1)
核心逻辑
张量拼接torch.cat要求除了拼接维度外,其余所有维度的大小必须完全一致。这里拼接维度是列维度(dim=-1),所以必须保证两个张量的行维度都是91,通过重复pfinal并调整行数即可实现。
内容的提问来源于stack exchange,提问作者Abhyudaya Singh
相关产品推荐
相关产品推荐

