1

Keras チューナーを使用して、Keras モデルでハイパーパラメータ調整を行いたいと思います。

import tensorflow as tf
from tensorflow import keras
import keras_tuner as kt

def model_builder(hp):

  model = keras.Sequential()
  model.add(keras.layers.Flatten(input_shape=(28, 28)))

  hp_units = hp.Int('units', min_value=32, max_value=512, step=32)
  model.add(keras.layers.Dense(units=hp_units, activation='relu'))
  model.add(keras.layers.Dense(10))

  hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])

  model.compile(optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),
                loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])

  return model

tuner = kt.Hyperband(model_builder,
                     objective='val_accuracy',
                     max_epochs=10,
                     factor=3)

tuner.search(train_X, train_y, epochs=50)

ここまでは順調ですね。ただし、いくつかのモデル パラメーター (入力画像のサイズなど) を の入力パラメーターとして定義したいのですがmodel_builder、方法がわかりません。

def model_builder(hp, img_dim1, img_dim2):

  model = keras.Sequential()
  model.add(keras.layers.Flatten(input_shape=(img_dim1, img_dim2)))
...

tuner = kt.Hyperband(model_builder(img_dim1, img_dim2),
                     objective='val_accuracy',
                     max_epochs=10,
                     factor=3)

一見うまくいきません。img_dim1, img_dim2を超えてモデルにフィードする方法はhp?

4

1 に答える 1