Keras继续在Google Colab上训练中断的课程

Keras继续在Google Colab上训练中断的课程,keras,resuming-training,Keras,Resuming Training,我正在使用免费版本的谷歌Colab&由于1的原因,我无法进行一些实验。内存限制:我的数据集太大,无法放入内存或2。训练时间超过12小时(在此之后,我会自动断开连接)。 因此,我想分割大数据集,在上半年进行训练,保存模型,然后在下半年继续训练。我在一个模型上尝试了这种方法,我可以一次对所有的模型进行训练,看看最终的结果是否相同。但事实并非如此——分两批训练的模型表现更差 我的方法: 普通列车:有效分割: X_序列,X_有效,y_序列,y_有效=序列测试分割(X,y,测试大小=0.1,随机状态=42

我正在使用免费版本的谷歌Colab&由于1的原因,我无法进行一些实验。内存限制:我的数据集太大,无法放入内存或2。训练时间超过12小时(在此之后,我会自动断开连接)。 因此,我想分割大数据集,在上半年进行训练,保存模型,然后在下半年继续训练。我在一个模型上尝试了这种方法,我可以一次对所有的模型进行训练,看看最终的结果是否相同。但事实并非如此——分两批训练的模型表现更差

我的方法:

  • 普通列车:有效分割:

    X_序列,X_有效,y_序列,y_有效=序列测试分割(X,y,测试大小=0.1,随机状态=42)

  • 将序列和有效阵列一分为二:

    列车1=列车[:746] y_列车1=y_列车[:746] X_列车2=X_列车[746:] y_列车2=y_列车[746:] X_valid1=X_valid[:83] y_valid1=y_valid[:83] X_valid2=X_valid[83:] y_valid2=y_valid[83:]

  • 定义模型(我在回调中定义ModelCheckpoint(例如“path/test_model.h5”))

  • 仅使用分割数据集的前一半训练模型:

    结果=model.fit(X_train1,y_train1,批次大小=32,时代=50,回调=回调,验证数据=(X_valid1,y_valid1))

  • 保存模型:

    model.save('/path/partial_trained.h5')

    • 此时,model.evaluate的结果为:损失:0.3074-准确度:0.8449-精密度:0.9083-召回率:0.4602,F1=0.6108456
  • 重新加载模型:

    模型=加载模型('/path/partial_trained.h5')

  • 另一半继续培训:

    结果=模型.fit(X_-train2,y_-train2,批量大小=32,年代=50,回调=回调,验证数据=(X_-valid2,y_-valid2))

    • 此时model.evaluate的结果为:损失:0.2653-准确度:0.8542-精密度:0.8912-召回率:0.5331,F1=0.66711
    如果我一次对同一个模型和数据集进行训练,结果是:损失:0.2646-准确度:0.8592-精度:0.8906-召回率:0.6760,F1=0.7686

    为什么结果如此不同?更奇怪的是学习曲线,见附件。你知道会出什么问题吗?“path/test_model.h5”文件中的权重会发生什么变化?当我在下半场开始训练时,上半场训练的内容是否得到更新或重写?我可以稍后使用它们进行预测吗? 谢谢 ,