Keras-tuner超参数调优时val_accuracy缺失报错的原因与解决方法
问题原因
核心是指标名称不匹配:
- 你在
model.compile()里指定的评估指标是categorical_accuracy,Keras训练时输出的验证集指标会自动加上val_前缀,实际生成的指标名为val_categorical_accuracy - 你初始化Keras Tuner的
RandomSearch时,objective参数填的是val_accuracy,和实际输出的指标名不一致,因此Tuner找不到要优化的目标,触发了ValueError,同时训练过程中保存最优模型的逻辑也因为找不到val_accuracy抛出了警告。
解决方案
两种方案二选一即可:
方案1:修改Tuner的objective参数
把RandomSearch里的objective值改成和实际输出匹配的val_categorical_accuracy:
tuner = RandomSearch( _model, objective="val_categorical_accuracy", # 替换为实际生成的指标名 max_trials=10, overwrite=True, directory="tuner_random_directory", project_name="tuner_random_project_name", )
方案2:修改模型编译时的metrics参数
把model.compile()里的metrics改成"accuracy",Keras会根据损失函数和输出格式自动匹配对应的精度计算逻辑,此时验证集指标名就是val_accuracy,和你原来的objective参数匹配:
model.compile( optimizer=tf.keras.optimizers.SGD( hp.Choice("learning_rate", values=[1e-1, 1e-2, 1e-3]) ), loss="categorical_crossentropy", metrics="accuracy" # 替换为accuracy )
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

