keras "All layer names should be unique" 在作业数量上使用 optuna 超参数优化器时出错
keras "All layer names should be unique" error while using optuna hyperparameters optimizer with number of jobs
我正在使用 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()
,当我删除它时,我不再收到错误。可以删除它吗?有什么影响?还有其他解决方案吗?
基于 tensorflow 中 GPU-trained 模型的类似经验,您正在处理 GPU 内存不会像 CPU RAM 那样自动清除的事实。我会建议以下解决方案(如果它不起作用,请告诉我):
from tensorflow.keras.backend import clear_session
import gc
然后在定义将用于 cross-validation 运行 的任何 algorithm_model
之前调用 clear_session()
。另外,在那个 run/replicate 的最后,在你返回 objective 函数分数之后,调用下面两行来清除你的记忆:
gc.collect()
del algorithm_model
有关未使用 Optuna 的 cross-validation 的更多详细信息,请参阅 this answer to a related question。不,你不能摆脱对 clear_session()
的调用,因为这是从你的 GPU 内存中清除模型的原因!
tf.keras.backend.reset_uids()
就是你所需要的。
我正在使用 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()
,当我删除它时,我不再收到错误。可以删除它吗?有什么影响?还有其他解决方案吗?
基于 tensorflow 中 GPU-trained 模型的类似经验,您正在处理 GPU 内存不会像 CPU RAM 那样自动清除的事实。我会建议以下解决方案(如果它不起作用,请告诉我):
from tensorflow.keras.backend import clear_session
import gc
然后在定义将用于 cross-validation 运行 的任何 algorithm_model
之前调用 clear_session()
。另外,在那个 run/replicate 的最后,在你返回 objective 函数分数之后,调用下面两行来清除你的记忆:
gc.collect()
del algorithm_model
有关未使用 Optuna 的 cross-validation 的更多详细信息,请参阅 this answer to a related question。不,你不能摆脱对 clear_session()
的调用,因为这是从你的 GPU 内存中清除模型的原因!
tf.keras.backend.reset_uids()
就是你所需要的。