使用 Keras Tuner 的未知度量 val_accuracy

Posted

技术标签:

【中文标题】使用 Keras Tuner 的未知度量 val_accuracy【英文标题】:Unknown metric val_accuracy using Keras Tuner 【发布时间】:2021-12-28 18:17:29 【问题描述】:

我正在尝试在 Google Colab 中将 keras Tuner 与时尚 mnist 数据集一起使用,这是我的代码:

!pip install keras-tuner
import tensorflow as tf
import kerastuner
import numpy as np

print("TensorFlow version: ", tf.__version__)

(x_train, y_train) , (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

def create_model(hp):

  num_hidden_layers = 1
  num_units = 8
  dropout_rate = 0.1
  learning_rate = 0.01

  if hp:
    num_hidden_layers = hp.Choice('num_hidden_layers', values = [1,2,3])
    num_units = hp.Choice('num_units', values = [8,16,32])
    dropout_rate = hp.Float('dropout_rate', min_value = 0.1, max_value = 0.5)
    learning_rate = hp.Float('learning_rate', min_value = 0.0001, max_value = 0.01)

  model = tf.keras.models.Sequential()

  model.add(tf.keras.layers.Flatten(input_shape = (28,28)))
  model.add(tf.keras.layers.Lambda(lambda x: x/255.))

  for _ in range(0, num_hidden_layers):
    model.add(tf.keras.layers.Dense(num_units, activation='relu'))
    model.add(tf.keras.layers.Dropout(dropout_rate))

  model.add(tf.keras.layers.Dense(10, activation='softmax'))

  model.compile(
      loss='sparse_categorical_crossentropy',
      optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),
      metrics=['accuracy']
  )

  return model

class CustomTuner(kerastuner.tuners.BayesianOptimization):
  def run_trial(self, trial, *args, **kwargs):
    kwargs['batch_size'] = trial.hyperparameters.Int('batch_size', 32, 128, step=32)
    super(CustomTuner, self).run_trial(trial, *args, **kwargs)

tuner = CustomTuner(
    create_model,
    objective='val_accuracy',
    max_trials = 20,
    directory= 'logs',
    project_name='fashion_minist',
    overwrite=True,
)

search = tuner.search(
    x_train, y_train,
    validation_data=(x_test, y_test),
    epochs = 5,
)

我收到以下错误:

ValueError: Unknown metric: val_accuracy

我做错了什么?我在训练过程中得到了val_accuracy 值,但是当第一次试验结束时,它会因这个错误而停止。

【问题讨论】:

我做了一些测试,发现错误在 CustomTuner 中,如果我尝试使用默认调谐器,它工作正常 可能和这个Issue有关 【参考方案1】:

遇到同样的问题,运气好吗?不过,上面评论中的问题链接似乎并不相关。

MWE:

class MyTuner(kt.Hyperband):
    def run_trial(self, trial, *fit_args, **fit_kwargs):
        fit_kwargs['batch_size'] = trial.hyperparameters.Int('batch_size', 32, 256, step=32)
        print("batch size" + str(fit_kwargs['batch_size']))
        super(MyTuner, self).run_trial(trial, *fit_args, **fit_kwargs)


tuner = MyTuner(create_model,
                     objective='val_accuracy',
                     max_epochs=5,
                     factor=2,
                     directory='tuner',
                     project_name='fashion_mnist')

early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)

tuner.search(X_train, 
             y_train, 
             epochs=5, 
             validation_split=.2, 
             callbacks=[early_stopping])

我尝试同时使用args / kwargsfit_args / fit_kwargs,两者都出现同样的错误。

【讨论】:

不,我还没有找到任何解决这个问题的办法...

以上是关于使用 Keras Tuner 的未知度量 val_accuracy的主要内容,如果未能解决你的问题,请参考以下文章

TensorBoard 的 Keras Tuner Trials 目录的命名

将 TensorBoard 与 Keras Tuner 一起使用

使用 Keras Tuner RandomSearch 错误进行超参数调优

Keras Sklearn Tuner 模块“sklearn”没有属性“管道”

将参数发送到 Keras Tuner 模型构建器函数

使用 OpenCV readNetFromTensorFlow 运行 Keras DNN 模型(UNet):错误:操作解码器_stage0_upsampling/Shape 中的未知层类型形状