Google Colab断开连接后程序是否继续执行?训练中断问题咨询
兄弟,我太懂你这种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

