HyperModelの定義

Keras Tunerは、Kerasモデルにおけるハイパーパラメータのチューニングを自動化するためのライブラリであり、その中心的なコンポーネントの一つが**HyperModel**です。

1. HyperModelとは何か

HyperModelは、ハイパーパラメータを含むモデル構造を定義するための抽象クラスです。これを使って、モデル構造・コンパイル・トレーニングの設定を一括して記述することで、Keras Tunerがその構造内のハイパーパラメータを自動で探索できるようになります。

Keras Tunerには以下のような方法でHyperModelを利用できます:

  • HyperModelクラスを継承して自分で定義する方法

  • hypermodel引数に関数を渡す方法(関数API)

ここでは、主にクラスベースの方法について詳述します。


2. HyperModel クラスの実装方法

基本構造

python
from kerastuner import HyperModel from tensorflow import keras from tensorflow.keras import layers class MyHyperModel(HyperModel): def build(self, hp): model = keras.Sequential() model.add(layers.Flatten(input_shape=(28, 28))) # ユニット数のハイパーパラメータ model.add(layers.Dense( units=hp.Int('units', min_value=32, max_value=512, step=32), activation='relu')) model.add(layers.Dense(10, activation='softmax')) # 学習率のハイパーパラメータ model.compile( optimizer=keras.optimizers.Adam( hp.Float('learning_rate', min_value=1e-4, max_value=1e-2, sampling='LOG')), loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model

3. ハイパーパラメータの定義方法

hpオブジェクト(HyperParametersのインスタンス)を使って、様々なハイパーパラメータを定義できます:

メソッド 用途
hp.Int() 整数の範囲を指定
hp.Float() 浮動小数点数の範囲を指定(線形/対数)
hp.Choice() 選択肢の中から1つ選ぶ
hp.Boolean() 真偽値を指定

4. HyperModelを使ったTunerの実行例

python
from kerastuner.tuners import RandomSearch hypermodel = MyHyperModel() tuner = RandomSearch( hypermodel, objective='val_accuracy', max_trials=10, executions_per_trial=1, directory='my_dir', project_name='intro_to_kt') tuner.search(x_train, y_train, epochs=5, validation_data=(x_val, y_val))

5. なぜHyperModelを使うのか

  • モデル構造とハイパーパラメータ探索空間を明確に分離できる

  • 再利用可能な構造で、他のTuner(BayesianOptimization, Hyperbandなど)でも使いまわせる

  • Tunerのパラメータと独立して、モデル定義だけに集中できる


6. まとめ

  • HyperModelは、Keras Tunerのハイパーパラメータ最適化におけるモデル定義のためのクラス

  • build(hp) メソッド内で、ハイパーパラメータとモデル構造を記述する

  • 独自のチューニング対象モデルを柔軟に設計・再利用できるメリットがある

必要に応じて、fit()メソッドもオーバーライドすることで、データ前処理や学習ループのカスタマイズも可能です。

生成日:2025/05/22