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

Google Colab断开连接后程序是否继续执行?训练中断问题咨询

解决Colab训练Keras CNN时断连后Checkpoint未保存到谷歌云盘的问题

兄弟,我太懂你这种Colab断连的憋屈了!之前训图像分类模型的时候,好几次熬到半夜断连,回头一看 checkpoint 没存上,心态直接崩了。结合你说的训练2个epoch后断连、云盘里没找到文件的情况,我给你梳理几个最可能的原因和解决办法:

  • 先确认谷歌云盘是不是真的挂载成功了
    Colab默认不会自动挂载你的云盘,要是没执行挂载命令,Keras其实是把文件存到了Colab的临时本地目录里,断连后直接就被清空了。挂载命令得这么跑:

    from google.colab import drive
    drive.mount('/content/drive')
    

    执行时会弹出授权链接,一定要完成授权步骤,看到“Mounted at /content/drive”的提示才算挂载成功。

  • 检查Checkpoint的保存路径是否正确
    你得把路径指向云盘的挂载目录,不能用本地路径。比如要存到云盘里的Colab Notebooks/cnn_checkpoints文件夹,路径得这么写:

    from keras.callbacks import ModelCheckpoint
    import os
    
    # 先创建目标文件夹,避免路径不存在导致保存失败
    save_dir = '/content/drive/MyDrive/Colab Notebooks/cnn_checkpoints'
    os.makedirs(save_dir, exist_ok=True)
    
    # 设置Checkpoint,每个epoch结束后保存完整模型
    checkpoint_path = os.path.join(save_dir, 'epoch_{epoch:02d}.h5')
    checkpoint = ModelCheckpoint(
        checkpoint_path,
        save_freq='epoch',  # 确保每个epoch都保存
        save_best_only=False  # 别只存最优模型,先保证每个epoch都有备份
    )
    
    # 训练时把checkpoint加入回调列表
    model.fit(train_generator, epochs=2, callbacks=[checkpoint])
    

    这里要注意,save_best_only如果设为True,只有当验证集指标提升时才会保存,要是第二个epoch的指标没超过第一个,云盘里就只会有第一个epoch的文件。

  • 断连时机可能卡在epoch中间
    ModelCheckpoint是在整个epoch完全结束后才会执行保存操作的,如果断连发生在第二个epoch的训练过程中(比如还在跑batch),那这个epoch的权重就存不上,但第一个epoch的文件应该能找到。你可以去云盘的目标文件夹里仔细看看,是不是漏了第一个epoch的文件?

  • 试试减小保存文件的大小,提升保存速度
    要是模型很大,保存完整模型到云盘可能会因为网络延迟超时导致保存失败。可以改成只保存权重,速度会快很多:

    checkpoint = ModelCheckpoint(
        checkpoint_path,
        save_freq='epoch',
        save_weights_only=True  # 只存权重,文件更小
    )
    

    后续恢复的时候,先重新构建模型结构,再加载权重就行:

    model = build_your_cnn_model()  # 重新定义你的模型结构
    model.load_weights('/content/drive/MyDrive/Colab Notebooks/cnn_checkpoints/epoch_02.h5')
    

另外,还有个小技巧:训练的时候可以在回调里加个打印,确认每个epoch结束后触发了保存,比如自定义个简单的回调:

from keras.callbacks import Callback

class SaveNotification(Callback):
    def on_epoch_end(self, epoch, logs=None):
        print(f"✅ Epoch {epoch+1} 训练结束,已保存模型到云盘")

# 训练时加入这个回调
model.fit(train_generator, epochs=2, callbacks=[checkpoint, SaveNotification()])

这样下次训练时,你就能在控制台看到保存提示,确认保存操作确实执行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:33:22