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

PyTorch Lightning训练时序模型报错:object of type 'method' has no len()

问题原因与解决方案

你的错误出在StockPriceDataModule类的val_dataloader和test_dataloader方法中:

在这两个方法里,你传给DataLoader的数据源是self.test_dataloader——这是你定义的方法本身,而不是在setup中初始化的self.test_dataset数据集实例。当DataLoader尝试获取数据源的长度时,它去调用了len(self.test_dataloader),但方法对象没有__len__方法,所以抛出了TypeError: object of type 'method' has no len()。

修正后的代码

把val_dataloader和test_dataloader里的self.test_dataloader替换成self.test_dataset即可:

class StockPriceDataModule(pl.LightningDataModule):
    def __init__(self, train_sequences, test_sequences, batch_size = 8):
        super().__init__()
        self.train_sequences = train_sequences
        self.test_sequences = test_sequences
        self.batch_size = batch_size
        
    def setup(self, stage=None):
        self.train_dataset = StockDataset(self.train_sequences)
        self.test_dataset = StockDataset(self.test_sequences)
        
    def train_dataloader(self):
        return DataLoader(
            self.train_dataset,
            batch_size = self.batch_size,
            shuffle = False,
            num_workers = 2
        )

    def val_dataloader(self):
        return DataLoader(
            self.test_dataset,  # 修正为数据集实例
            batch_size=1,
            shuffle = False,
            num_workers=1,
        )
    
    def test_dataloader(self):
        return DataLoader(
            self.test_dataset,  # 修正为数据集实例
            batch_size=1,
            shuffle = False,
            num_workers=1,
        )

额外提示

PyTorch Lightning会在训练/验证/测试阶段自动调用setup方法,所以你不需要手动执行data_module.setup(),可以删掉这行代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:56:06