使用Keras-tuner进行超参数调整时关于”accuracy”的错误

我的原始MLP模型如下:

def create_model(n_hidden_1, n_hidden_2, num_classes, num_features):    # create the model    model = Sequential()    model.add(tf.keras.layers.InputLayer(input_shape=(num_features,)))    model.add(tf.keras.layers.Dense(n_hidden_1, activation='sigmoid'))    model.add(tf.keras.layers.Dense(n_hidden_2, activation='sigmoid'))    model.add(tf.keras.layers.Dense(num_classes, activation='softmax'))    # instantiate the optimizer    opt = keras.optimizers.SGD(learning_rate=LEARNING_RATE)    # compile the model    model.compile(        optimizer=opt,        loss="categorical_crossentropy",        metrics="categorical_accuracy"    )    # return model    return model

为了调整上述模型,我创建了一个Keras-tuner模型如下:

def _model(hp):    model = keras.Sequential()    model.add(tf.keras.layers.InputLayer(input_shape=(6)))    model.add(tf.keras.layers.Dense(            hp.Int("dense_1_units", min_value=32, max_value=2048, step=32, default=128),            activation="sigmoid"        ))    model.add(tf.keras.layers.Dense(        hp.Int("dense_2_units", min_value=32, max_value=2048, step=32, default=128),        activation="sigmoid"    ))    model.add(tf.keras.layers.Dense(3, activation="softmax"))    model.compile(        optimizer=tf.keras.optimizers.SGD(            hp.Choice("learning_rate", values=[1e-1, 1e-2, 1e-3])        ),        loss="categorical_crossentropy",        metrics="categorical_accuracy"    )    return model   tuner = RandomSearch(        _model,        objective="val_accuracy",        max_trials=10,        overwrite=True,        directory="tuner_random_directory",        project_name="tuner_random_project_name",    )

我收到了以下输出:

user@server:~/ $ python3 tuner.pytraining data size :  1120988validation data size :  280246Search space summaryDefault search space size: 3dense_1_units (Int){'default': 128, 'conditions': [], 'min_value': 32, 'max_value': 2048, 'step': 32, 'sampling': None}dense_2_units (Int){'default': 128, 'conditions': [], 'min_value': 32, 'max_value': 2048, 'step': 32, 'sampling': None}learning_rate (Choice){'default': 0.1, 'conditions': [], 'values': [0.1, 0.01, 0.001], 'ordered': True}Search: Running Trial #1Hyperparameter    |Value             |Best Value So Fardense_1_units     |1504              |?dense_2_units     |1440              |?learning_rate     |0.1               |?Epoch 1/235031/35031 [==============================] - 811s 23ms/step - loss: 0.5475 - categorical_accuracy: 0.7495 - val_loss: 0.5155 - val_categorical_accuracy: 0.7599WARNING:tensorflow:Can save best model only with val_accuracy available, skipping.Epoch 2/235031/35031 [==============================] - 807s 23ms/step - loss: 0.5091 - categorical_accuracy: 0.7650 - val_loss: 0.4943 - val_categorical_accuracy: 0.7751WARNING:tensorflow:Can save best model only with val_accuracy available, skipping.Traceback (most recent call last):  File "my_tuner_app_tuner_random.py", line 229, in <module>    tuner.search(train_x, train_y, epochs=2, validation_data=(validate_x, validate_y))  File "/home/user/.local/lib/python3.7/site-packages/keras_tuner/engine/base_tuner.py", line 144, in search    self.run_trial(trial, *fit_args, **fit_kwargs)  File "/home/user/.local/lib/python3.7/site-packages/keras_tuner/engine/multi_execution_tuner.py", line 103, in run_trial    trial.trial_id, metrics=averaged_metrics, step=self._reported_step  File "/home/user/.local/lib/python3.7/site-packages/keras_tuner/engine/oracle.py", line 224, in update_trial    self._check_objective_found(metrics)  File "/home/user/.local/lib/python3.7/site-packages/keras_tuner/engine/oracle.py", line 407, in _check_objective_found    objective_names, metrics.keys()ValueError: Objective value missing in metrics reported to the Oracle, expected: ['val_accuracy'], found: dict_keys(['loss', 'categorical_accuracy', 'val_loss', 'val_categorical_accuracy'])user@server:~/ $

为什么我会收到一个警告和一个值错误?

我如何解决这些问题?


回答:

我猜测您收到这个警告和错误的原因是,您必须在RandomSearch目标中使用与您的模型和Keras Tuner模型完全相同的度量标准,即categorical_accuracy。因此,您可以尝试:

tuner = RandomSearch(        _model,        objective="val_categorical_accuracy",        max_trials=10,        overwrite=True,        directory="tuner_random_directory",        project_name="tuner_random_project_name",)

因为您希望最大化验证集的分类准确率。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注