【问题标题】:Saving a tensorflow model and loading it for further training保存张量流模型并加载它以进行进一步训练
【发布时间】:2021-03-12 15:12:02
【问题描述】:

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

  1. 通过数据集(100)读取数据集(0)
  2. 进行数据处理
  3. 将模型训练 20 个 epoch
  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 个 epoch 之后(例如训练后)再次以相同的损失结束。

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

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

ps:我确保我正确保存了模型,只需加载它并查看它是否会导致与该特定数据集的训练结束时相同的准确性/损失。

【问题讨论】:

    标签: python tensorflow machine-learning training-data


    【解决方案1】:

    我宁愿做

    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 个 epoch,请提前停止以避免过度拟合。

    【讨论】:

      猜你喜欢
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 2023-03-10
      • 2017-07-16
      相关资源
      最近更新 更多