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

使用Hugging Face训练T5模型时遇RuntimeError:张量尺寸不匹配

解决T5-small训练时的RuntimeError:张量大小不一致问题

问题现象

训练基于Hugging Face的T5-small模型进行乌尔都语到英语的翻译任务时,触发以下错误:

RuntimeError: stack expects each tensor to be equal size, but got [91] at entry 0 and [23] at entry 1

问题原因

预处理阶段未对输入文本和标签文本执行**填充(padding)**操作。当使用batched=True调用map函数时,同批次内的样本长度各不相同,无法堆叠成形状统一的张量,进而导致训练时的stack操作失败。

解决方案

1. 修改预处理函数,添加填充与标签处理

更新preprocess_function,在tokenizer调用时加入填充参数,并将标签中的填充token替换为-100(T5模型会忽略-100标签的损失计算):

def preprocess_function(examples):
    # 对输入和标签执行截断+填充,统一长度为128(可根据任务调整)
    inputs = tokenizer(examples['Urdu'], truncation=True, padding='max_length', max_length=128)
    labels = tokenizer(examples['English'], truncation=True, padding='max_length', max_length=128)
    
    # 将标签中的pad token替换为-100,避免计算无效损失
    labels["input_ids"] = [
        [-100 if token == tokenizer.pad_token_id else token for token in label]
        for label in labels["input_ids"]
    ]
    
    inputs['labels'] = labels['input_ids']
    return inputs

2. 调整数据集格式设置的顺序

将datasets.set_format的调用移至预处理完成之后,确保预处理后的张量已经是统一长度:

# 先执行预处理
datasets = datasets.map(preprocess_function, batched=True)

# 再设置数据集为torch格式,指定需要的列
datasets.set_format(type="torch", columns=["input_ids", "attention_mask", "labels"])

3. 可选:验证处理后的张量形状

可以添加以下代码验证处理后的样本形状是否一致:

print("输入张量形状:", datasets['train'][0]['input_ids'].shape)
print("标签张量形状:", datasets['train'][0]['labels'].shape)

正常情况下,两者形状应完全相同(例如均为torch.Size([128]))。

核心逻辑总结

通过填充操作强制同批次样本长度统一,同时正确处理标签中的填充位置,避免无效损失计算,即可解决张量堆叠失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:03:30