【问题标题】:keras "All layer names should be unique" error while using optuna hyperparameters optimizer with number of jobs使用具有作业数量的 optuna 超参数优化器时,keras“所有层名称都应该是唯一的”错误
【发布时间】:2020-12-31 02:57:31
【问题描述】:

我正在使用 optuna 包来优化我的模型,并且我正在使用一次运行多个作业的选项。当我运行它时,我得到:

Trial  failed because of the following error: ValueError('The name "dense" is used 3 times in the model. All layer names should be unique.'

但我没有为图层分配任何名称。我有tensorflow.keras.backend.clear_session(),当我删除它时,我不再收到错误消息。可以删除它吗?有什么影响?还有其他解决办法吗?

【问题讨论】:

  • 层名应该是唯一的,为了更清楚,你应该分享你的模型。
  • @ashraful ,正如我所说,我没有给图层命名,keras 会自动创建它们。当我只使用工作时,我没有收到错误。我无法提供模型,因为代码很难理解并且包含很多模块。

标签: python keras tensorflow2.0


【解决方案1】:
tf.keras.backend.reset_uids()

就是你所需要的。

【讨论】:

    【解决方案2】:

    根据 tensorflow 中 GPU 训练模型的类似经验,您正在处理 GPU 内存不会像 CPU RAM 那样自动清除的事实。我建议以下解决方案(如果不起作用,请告诉我):

    from tensorflow.keras.backend import clear_session
    import gc
    

    然后在定义将用于交叉验证运行的任何algorithm_model 之前调用clear_session()。此外,在运行/复制结束时,在您返回目标函数分数后,调用以下两行代码来清除您的内存:

    gc.collect()
    del algorithm_model
    

    有关未使用 Optuna 的交叉验证的更多详细信息,请参阅this 对相关question 的回答。不,您无法摆脱对clear_session() 的调用,因为这会将模型从您的 GPU 内存中清除!

    【讨论】:

    • 这是一个使用 Optuna 的示例,他们保留 clear_session() 调用:medium.com/@Minyus86/optkeras-112bcc34ec73(注意,他们使用的是 keras,而不是 tf.keras,这显然会导致问题,因此您可能必须编辑他们的代码。
    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2018-09-17
    • 2022-07-15
    • 2019-01-27
    相关资源
    最近更新 更多