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

时间:2020-11-05 22:36:01

标签: keras resuming-training

我正在使用Google Colab的免费版本,由于1.内存限制:我的数据集太大而无法容纳在内存中;或2.训练时间超过了12小时(这段时间之后,我会自动断开连接)。 因此,我想拆分大型数据集,在第一部分进行训练,保存模型,然后在第二部分继续进行训练。我在一个模型上尝试了这种方法,我可以一次训练所有模型以查看最终结果是否相同。但事实并非如此-分两批训练的模型的效果更差。

我的方法:

  1. 常规火车:有效拆分:

    X_train,X_valid,y_train,y_valid = train_test_split(X,y,test_size = 0.1,random_state = 42)

  2. 将火车和有效数组一分为二:

    X_train1 = X_train [:746] y_train1 = y_train [:746] X_train2 = X_train [746:] y_train2 = y_train [746:] X_valid1 = X_valid [:83] y_valid1 = y_valid [:83] X_valid2 = X_valid [83:] y_valid2 = y_valid [83:]

  3. 定义模型(我在回调中定义ModelCheckpoint(例如'path / test_model.h5'))

  4. 仅使用拆分数据集的前半部分训练模型:

    结果= model.fit(X_train1,y_train1,batch_size = 32,纪元= 50,回调=回调,validation_data =(X_valid1,y_valid1))

  5. 保存模型:

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

  • 这时,model.evaluate的结果是:损失:0.3074-准确性:0.8449-精度_2:0.9083-召回_2:0.4602,F1 = 0.6108456
  1. 重新加载模型:

    模型= load_model('/ path / partly_trained.h5')

  2. 继续训练另一半:

    results = model.fit(X_train2,y_train2,batch_size = 32,epochs = 50,callbacks = callbacks,validate_data =(X_valid2,y_valid2))

  • 此时model.evaluate的结果是:损失:0.2653-准确性:0.8542-精度_2:0.8912-召回_2:0.5331,F1 = 0.66711

如果我一次训练所有相同模型和数据集的结果:损失:0.2646-精度:0.8592-精度:0.8906-召回率:0.6760,F1 = 0.7686

为什么结果如此不同?学习曲线更加奇怪,请参阅附件。您有什么想法吗?文件“ path / test_model.h5”中的权重会怎样?当我从第二部分开始训练时,来自第一部分训练的内容是否被更新或重写?我以后可以使用它们进行预测吗? 谢谢! training all at oncetraining on the 1st halftraining on the 2nd half

0 个答案:

没有答案