當您構建調整超參數的模型時,除了模型架構之外,您還定義了超參數搜索空間。為了調整超參數的模型稱為 Hyper Model。
您可以通過兩種方法定義 Hyper Model:
HyperModel
繼承 Keras Tuner
類別。另外兩個預定義的HyperModel類別 HyperXception
和HyperResNet
可用於計算機視覺應用程序。
以下模型函數中,
Int()
用來定義密集單元的搜索空間的最小值和最大值。Choice()
用於設定學習率。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',
name='dense_1'
)
)
model.add(keras.layers.Dropout(0.2))
model.add(keras.layers.Dense(10, activation='softmax'))
# 設定學習率範圍 0.01, 0.001, or 0.0001
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(),
metrics=['accuracy']
)
return model
在此設定 Tuner 如下,細節調整您可以參考官方文件。
# Instantiate the tuner
tuner = kt.Hyperband(
model_builder,
objective='val_accuracy',
max_epochs=10,
factor=3,
directory='kt_dir',
project_name='kt_hyperband'
)
另外為了節省不必要的訓練時間,定義了一個 EarlyStopping,當驗證的 loss 在 5 個 epoch 沒改善時停止訓練,以下為持續搜尋的過程。
最後將產生一組最佳超參數搜尋結果。