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

基于Mediapipe的LSTM手部动作训练报错求助:尺寸不匹配与属性错误

解决LSTM手势识别训练中的两个错误

第一个错误:Reshape尺寸不匹配

问题原因

输入张量实际总元素数(4032)与指定的目标形状(163263=32256)不匹配。即便你将batch_size改为2后数值匹配,但硬编码batch_size的做法缺乏灵活性,后续若输入batch_size变化(如验证集batch不同)仍会出问题。

解决方法

将硬编码的self.batch_size改为动态获取当前输入的batch_size:

# 原代码
x = x.reshape(self.batch_size, self.seq_len, CFG.num_feats * 21)

# 修改后代码
x = x.reshape(x.size(0), self.seq_len, CFG.num_feats * 21)

x.size(0)会自动读取输入张量的第一维(即当前batch_size),无论输入batch是多少都能完成正确reshape。

第二个错误:torchsummary的AttributeError

问题原因

torchsummary在解析模型结构时,会调用模型的forward方法并检查返回值。如果你的LSTM模型forward方法返回的是元组(tuple)(比如同时返回输出和隐藏层状态),torchsummary会尝试调用返回值的.size()方法,而元组没有该属性,因此触发报错。

解决方法

方法1:临时修改模型forward方法(仅用于查看结构)

如果你的模型forward方法是类似这样的:

def forward(self, x):
    # 中间计算逻辑
    return output, hidden_state

可以临时改为只返回输出张量:

def forward(self, x):
    # 中间计算逻辑
    return output

查看完模型结构后,再恢复原返回逻辑即可。

方法2:用Lambda包装模型(无需修改原模型)

在调用torchsummary的位置,用lambda将模型包装为仅返回输出的版本:

from torchsummary import summary

# 假设你的模型实例为model
wrapped_model = lambda x: model(x)[0]
summary(wrapped_model, input_size=(CFG.seq_len, 21, CFG.num_feats))

model(x)[0]取返回元组的第一个元素(即输出张量),让torchsummary能正常处理。

方法3:确认输入尺寸匹配

确保传入summary的input_size与实际输入尺寸(除batch_size外)一致。你的输入是[2,32,21,3],所以input_size应设为(32,21,3),对应(seq_len, num_keypoints, num_feats)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:06:07