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

深度学习中如何在指定轮次后减小批量大小?以BiLSTM情感分类为例

如何在BiLSTM情感分类训练中逐步调整批量大小

当然可以实现这个需求,核心思路是把60轮训练拆分成多个阶段,每个阶段使用不同的批量大小,连续调用fit()方法让模型接力训练——Keras会自动保留之前训练的权重,不会从头开始。

具体实现步骤

  1. 定义批量大小与轮次的对应计划:按照你的需求,把60轮拆分为6个阶段,每个阶段10轮,批量大小依次减半:
    # 定义阶段计划:(批量大小, 该阶段训练轮数)
    stage_plans = [(256, 10), (128, 10), (64, 10), (32, 10), (16, 10), (8, 10)]
    
  2. 分阶段调用fit()训练:循环遍历每个阶段,每次指定当前阶段的批量大小、训练轮数,同时通过initial_epoch参数指定当前阶段的起始轮次,确保训练连续进行:

替换你原代码中的fit()调用部分,改为以下代码:

# 初始化起始轮次
current_epoch = 0
# 用于保存所有阶段的训练历史
all_history = []

for batch_size, epochs in stage_plans:
    # 计算当前阶段的结束轮次
    end_epoch = current_epoch + epochs
    # 分阶段训练
    history = modelBiLstm.fit(
        Xtrain, Ytrain,
        batch_size=batch_size,
        epochs=end_epoch,
        initial_epoch=current_epoch,
        validation_data=(Xtest, Ytest),
        callbacks=[lr_finder]  # 注意:如果lr_finder是学习率查找器,通常只在第一个阶段使用,按需调整
    )
    # 更新起始轮次
    current_epoch = end_epoch
    # 保存当前阶段的历史记录
    all_history.append(history)

关键说明

  • initial_epoch是核心参数:它指定模型从哪一轮开始训练,而非从头启动,保证每个阶段的训练都基于上一阶段的权重继续优化。
  • 关于回调lr_finder:如果它是学习率范围测试工具,一般只需要在第一个阶段运行,后续阶段可以移除该回调避免重复测试;如果是早停、日志类回调,可以保留。
  • 训练历史合并(可选):如果需要把所有阶段的训练数据合并成完整历史,可以拼接各阶段的history字典:
    # 合并训练历史
    combined_history = {
        'loss': [],
        'accuracy': [],
        'val_loss': [],
        'val_accuracy': []
    }
    for hist in all_history:
        combined_history['loss'].extend(hist.history['loss'])
        combined_history['accuracy'].extend(hist.history['accuracy'])
        combined_history['val_loss'].extend(hist.history['val_loss'])
        combined_history['val_accuracy'].extend(hist.history['val_accuracy'])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:45:44