保存张量流模型并加载它以进行进一步训练

Saving a tensorflow model and loading it for further training

我正在 python 中的一个相对较大的数据集 (27G) 上训练我使用 TensorFlow 制作的 CNN 模型。由于我的 RAM 无法导入所有数据以输入模型,因此我改为执行以下操作:

  1. 通过数据集(100)读取数据集(0)
  2. 进行数据处理
  3. 训练模型 20 个时期
  4. 保存模型
  5. 读取数据集 (101) 到 (200)

并对即将到来的数据重新进行处理和训练。我使用 model.save(filepath) 函数,它保存了整个模型(权重、优化器状态和...)。

以下是每次训练后保存和加载模型的简单代码:

loop():
   dataprocessing

training_data, training_labels = processed_data()

mod = load_model('Mytf.h5')
history.append(mod.fit(training_data,training_label,batch_size=10,epochs=40))
mod.save('Mytf.h5') 
    
del training_data
del training_label

但是,我最终在每次训练后以大约相同的新数据损失 (mse) 开始,并在 20 个时期后(例如训练后)再次以相同的损失结束。

这种做法正确吗?还是我错过了一个基本概念?

如果这是不正确的,TensorFlow 是否有助于程序训练到某个点,然后程序生成新的处理数据以在同一时期输入模型的能力? (例如,将数据集 (0) 的处理数据训练到数据集 (100),比如 1/3 时期,模型 stops 训练和程序处理新数据,然后以该确切状态输入模型) .

ps:我确保我正确地保存了模型,只需加载它并查看它是否产生与针对该特定数据进行训练时相同的 accuracy/loss设置结束。

我宁愿做

Repeat 20 time:
     read next 100 datasets/datapoints
     do the data processing
     train the model for 1 epoch
     save the model

当你在 n 个数据点上 运行 20 个 epoch 时,你可能对它们过度拟合,当它看到下一个 n 个数据点时,它必须重新学习。而是 运行 每组只做 1 个 epoch,做 n 次。

此外,在您采用的方法中,而不是拟合 20 个时期,提前停止以避免过度拟合。