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

Jupyter Notebook重启后模型训练恢复与微调流程咨询

大型模型跨Jupyter会话恢复训练的疑问与验证

核心疑问

  1. 重启Jupyter Notebook后重新执行模型定义代码,之前训练得到的权重会被覆盖吗?即便EarlyStopping曾恢复最优权重,重启后执行代码也会重置吗?
  2. 手动加载Checkpoint进行模型微调的流程是否正确?
  3. 是否必须保持Jupyter持续打开才能保留模型变量?

用户提供的模型定义代码

# Define ResNet50 base model with weights from imagenet. Do NOT include top classification layers.
base_model = tf.keras.applications.resnet_v2.ResNet50V2(input_shape=input_shape, include_top=False, weights='imagenet')

# Freeze base model
base_model.trainable = False

# Define input layer
inputs = tf.keras.Input(shape=input_shape)

# Apply Data Augmentation
x = data_augmentation(inputs)

# Preproccess input using the same weights base model was trained on
x = tf.keras.applications.resnet_v2.preprocess_input(x)

# Set training = False to disable Batch Norm layers from updating
x = base_model(x, training = False)
    
# Add avaragePooling
x = tfl.GlobalAveragePooling2D()(x)

# Add dropout layer for regularization
x = tfl.Dropout(0.2)(x)

# Add prediction/output layer with 3 neurons (Class Number = 3)
outputs = tfl.Dense(3, kernel_initializer = HeNormal())(x)

model = tf.keras.Model(inputs, outputs)

base_lr = 0.004
model.compile(optimizer=Adam(learning_rate = base_lr), loss=CategoricalCrossentropy(from_logits = True), metrics=["accuracy"])

用户现有训练流程

  • 定义数据集
  • 定义带数据增强的模型,设置base_model.trainable = false
  • 编译模型
  • 定义EarlyStopping、Checkpoints、ReduceLR、tensorboard等回调
  • 执行model.fit

用户设想的微调恢复流程

# Load weights from the checkpoint with the lowest val_loss if model.get_weights() returns different weights
model.load_weights(r'.\checkpoints\ResNet50\run_23_07_2022-13_18_57\ckp_24-0.4337')

之后设置base_model.trainable = True,重新编译并执行model.fit进行微调。


解答

关于权重重置的问题

重启Jupyter Notebook后,所有内存中的变量(包括模型权重、训练状态等)都会被完全释放。重新执行模型定义代码时,模型会被重新初始化:基础层加载Imagenet预训练权重,顶层则是HeNormal()初始化的随机权重,之前训练得到的权重(包括EarlyStopping恢复的最优权重)都会丢失,相当于回到训练前的初始状态。

手动加载Checkpoint的流程正确性验证

你的设想流程是可行的,但可以优化几个细节:

  • 无需对比权重:重启后重新定义的模型必然是初始状态,直接加载最优Checkpoint即可,不用通过model.get_weights()对比。
  • 保证结构一致:必须确保重启后定义的模型结构(输入形状、层的数量/类型、初始化方式等)和训练时完全一致,否则load_weights会报错。
  • 微调的编译注意:设置base_model.trainable = True后,必须重新编译模型,且建议使用更小的学习率(比如原学习率的1/10,即base_lr / 10),避免预训练权重被破坏。

是否需要保持Jupyter持续打开?

不需要。Jupyter关闭后内存中的模型状态会销毁,但只要你通过Checkpoint保存了权重文件,下次重启会话、重新定义相同结构的模型后,加载权重就能恢复到之前的训练状态,完全可以中断会话后再继续训练。

额外优化建议

  • 保存完整模型:训练完成后可以用model.save("path/to/your/model")保存整个模型(结构+权重+编译配置),下次直接用tf.keras.models.load_model("path/to/your/model")加载,无需重新定义模型结构,更高效。
  • 自动保存最优Checkpoint:在Checkpoint回调中设置save_best_only=True,这样只会保存验证集表现最好的权重,不用手动查找val_loss最低的文件。
  • 分层解冻微调:微调时无需解冻所有层,可以只解冻ResNet的最后几个block(比如base_model.trainable = True; fine_tune_at = 100; for layer in base_model.layers[:fine_tune_at]: layer.trainable = False),既能利用预训练权重,又能减少计算量、提升训练稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:48:45