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

PyTorch Lightning循环训练时模型在epoch 0提前停止原因排查

问题解决:PyTorch Lightning循环训练多模型仅第一个正常的问题

问题原因

你复用了同一个EarlyStopping回调实例,而这个回调是带内部状态的(比如记录最佳验证损失、已等待轮次等)。第一个模型训练完成后,回调的状态没有被重置,后续模型训练时,回调会直接沿用之前的状态,导致刚进入训练就触发停止条件,只跑了epoch0就结束。

修复方案

每次训练新模型时,创建新的EarlyStopping回调实例,确保每个模型的回调状态独立。

修改后的核心代码

将EarlyStopping的创建移到训练循环内部:

def train_model(train_loader, val_loader, test_loader, num_epochs, device):
    models = [
        BaseModel("efficientnet_b0"),
        BaseModel("mobilenet_v2"),
        BaseModel("mobilenet_v3_large"),
    ]

    for model in models:
        model = model.to(device)
        logger = TensorBoardLogger("lightning_logs", name=model.architecture)
        # 每次循环创建新的EarlyStopping实例
        early_stop_callback = EarlyStopping(
            monitor="val_loss", patience=3, verbose=False, mode="min"
        )
        trainer = pl.Trainer(
            max_epochs=num_epochs,
            callbacks=[early_stop_callback],
            accelerator="gpu",
            devices=1,
            logger=logger,
        )
        trainer.fit(model, train_loader, val_loader)
        trainer.test(model, test_loader)

验证说明

修改后,每个模型都会使用独立的回调实例,内部状态互不干扰,所有模型都能按预期完成多轮训练,直到触发EarlyStopping的patience条件或达到max_epochs。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:25:55