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

中断训练后全连接神经网络(FNN)状态异变原因及续训可行性咨询

训练中断后神经网络进入平台期的原因及可行性分析

问题描述

训练平面全连接神经网络时,中断训练查看结果后继续训练,有时会立即进入训练平台期,训练特性发生明显变化。

训练代码

iters = 10000
optimizer=torch.optim.LBFGS(model.parameters(), lr=0.001)
def train():
    for step in iters:
        def closure():
            optimizer.zero_grad()
            loss  = model(input)
            loss.backward()
            return loss
        optimizer.step(closure)
        if step % 2 == 0:
            current_loss = closure().item()
            pbar.set_description("Step: %d | Loss: %.6f" %
                                 (step, current_loss))
train()

中断后进入平台期的核心原因

你使用的LBFGS优化器依赖训练过程中积累的历史二阶梯度信息(比如曲率近似值、迭代方向缓存)来计算参数更新方向。中断训练后如果只保存了模型参数,没有保存优化器的内部状态,重启训练时优化器会从头初始化,丢失了之前的历史信息——原本朝着最优方向收敛的节奏被完全打断,新的优化过程可能直接陷入局部平坦区域,也就是你看到的平台期。

另外,代码中每次迭代都重新定义closure函数,虽不影响语法,但如果中断重启时数据批次加载、模型状态恢复有偏差,也会加剧这个问题,但核心诱因仍是LBFGS的历史状态丢失。

中断后继续训练的可行性

完全可行,但必须做好完整的状态保存与恢复,不能只保存模型参数:

  • 中断前,要同时保存模型的state_dict、优化器的state_dict(包含LBFGS所需的历史信息),以及当前的迭代步数step。
  • 重启时,先加载模型参数,再加载优化器状态,接着从记录的step开始迭代,而非从头开始。

修改后的示例代码(添加状态保存/恢复逻辑):

import torch
import os

# 初始化配置
iters = 10000
optimizer=torch.optim.LBFGS(model.parameters(), lr=0.001)
start_step = 0
checkpoint_path = "train_checkpoint.pth"

# 加载已有 checkpoint(如果存在)
if os.path.exists(checkpoint_path):
    checkpoint = torch.load(checkpoint_path)
    model.load_state_dict(checkpoint['model_state'])
    optimizer.load_state_dict(checkpoint['optimizer_state'])
    start_step = checkpoint['step']

def train():
    for step in range(start_step, iters):
        def closure():
            optimizer.zero_grad()
            loss = model(input)
            loss.backward()
            return loss
        optimizer.step(closure)
        if step % 2 == 0:
            current_loss = closure().item()
            pbar.set_description("Step: %d | Loss: %.6f" % (step, current_loss))
            # 定期保存 checkpoint
            torch.save({
                'model_state': model.state_dict(),
                'optimizer_state': optimizer.state_dict(),
                'step': step
            }, checkpoint_path)
train()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:11:02