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

自定义PyTorch Dataset用于BERT微调时触发TypeError如何解决

报错核心原因

你自定义Dataset子类时,Python类的特殊方法(魔法方法)命名错误:所有需要被父类识别的特殊方法,名称前后必须是双下划线,你写的是单下划线,导致Python没有识别到你定义的构造方法,传入的inputs参数无法被接收,最终触发实例化报错。

可直接运行的修复后代码
import torch
from torch.utils.data import Dataset

class MeditationsDataset(Dataset):
    def __init__(self, encodings):
        self.encodings = encodings

    def __getitem__(self, idx):
        # 编码结果本身已是Tensor类型,无需重复转换
        return {key: val[idx] for key, val in self.encodings.items()}

    def __len__(self):
        # 字典类型用键索引取值,不要用属性访问
        return len(self.encodings["input_ids"])


dataset = MeditationsDataset(inputs)
具体修改点
  • 修正所有特殊方法的命名:将单下划线包裹的_init_/_getitem_/_len_改为双下划线包裹的__init__/__getitem__/__len__,这是解决TypeError的核心修改。
  • 移除__getitem__中多余的torch.tensor()包装:你提供的编码后数据本身就是PyTorch张量,重复转换会触发张量拷贝警告,直接索引取值即可。
  • 修正__len__中的取值逻辑:你的编码结果是普通Python字典,不存在.input_ids属性,改用键访问self.encodings["input_ids"]即可避免后续运行时的属性报错。

内容的提问来源于stack exchange,提问作者Moty.R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:39:20