【问题标题】:Keras checkpoints not being saved to google cloud bucketKeras 检查点未保存到谷歌云存储桶
【发布时间】:2021-04-07 09:12:26
【问题描述】:

我正在使用以下代码在 google 云构建运行我的模型时保存检查点:

 cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath = "gs://mybucket/checkpoints", 
                                                   verbose=0,
                                                   save_weights_only=True,
                                                   monitor='val_loss',
                                                   mode='min',
                                                   save_best_only=True)

我的构建日志中没有任何错误,但每次运行后存储桶中唯一的内容是包含源目录内容的 tf_cloud_train_tar 文件。

我在 model.fit 中使用回调 = [cp_callback]。

【问题讨论】:

  • 请参阅this SO 问题,我认为这可能会有所帮助。基本上,将模型保存在本地,然后将其写入 GCS。这与 Keras issue 中提出的方法相同。
  • 实际上我什至不需要或不想要它在 GCS 上,我宁愿它在本地编写,但是当通过 tensorflow 云使用谷歌云构建运行它时,它在本地似乎并不相同要么。
  • 您是否正确设置了路径?应该是这样的'/home/jupyter/checkpoint/best_model_{epoch}.h5',
  • @yudhiesh 是的,我是。在this guide 上,他们说只要存储目标位于谷歌存储桶中,就可以使用检查点。我已经尝试了存储桶的路径和本地路径,没有存储任何内容。

标签: tensorflow google-cloud-storage google-cloud-build


【解决方案1】:

这里留给任何可能遇到同样问题的人。

在 AI 平台上训练我的模型时,我也遇到了同样的问题。无论我做什么,ModelCheckpoint 回调都无法将其直接保存到 GCS。

我能够通过创建自定义回调来解决它。通过从 tensorflow.keras.callbacks 模块继承 Callback 类并覆盖所需的函数,我们可以在一个 epoch 的多个实例中创建一个回调来做任何我们想做的事情。

我创建了 ModelCheckpoint 回调以写入本地目录,并创建了一个自定义回调以将这些检查点文件复制到 GCS 存储桶。

在我的 github 存储库中提供了实现 -> https://github.com/Subrahmanyajoshi/Cancer-Detection-using-GCP/blob/07845c1f0c86b727e5ce043a3db4d4cb0e5ed1df/detectors/tf_gcp/trainer/callbacks.py#L10

【讨论】:

    【解决方案2】:

    我遇到这个问题有几个原因:

    • 数据集不在存储桶上,因此代码无权访问它。
    • 对没有文件的数据集使用生成器会导致无限循环,但不会崩溃。

    我切换到 AI Platform 并从 GCS 存储桶中获取数据,问题已得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-19
      • 2016-01-31
      • 2019-08-24
      • 1970-01-01
      • 2016-04-26
      • 2021-03-12
      • 2015-03-01
      • 1970-01-01
      相关资源
      最近更新 更多