Keras Tuner num_layers
При добавлении цикла для генерации слоев в keras tuner слои генерируются по максимально возможному количеству. При чем первая генерация проходит правильно (в range указан диапазон 1 - 3). На первой генерации выбирается количество 2 и 2 слоя создается. Но как только выбирается и создается 3 слоя - после этого, даже если указано, что будет добавлен 1 слой (или 2) - все-равно добавляется 3 слоя
def build_model(hp):
model = Sequential()
activation_choice = hp.Choice("activation", values=["relu", "sigmoid", "tanh", "elu", "selu"])
model.add(Dense(units=hp.Int("layer_1", min_value=512, max_value=1024, step=32),
input_dim=784,
activation=activation_choice))
for i in range(hp.Int('num_layers', 1, 3)):
model.add(Dense(units=hp.Int('units_' + str(i),
min_value=32,
max_value=512,
step=32),
activation='relu'))
model.add(Dense(10, activation="softmax"))
model.compile(
optimizer=hp.Choice("optimizer", values=["adam", "rmsprop", "SGD"]),
loss=hp.Choice("loss", values=["mse", "mae", "mape", "msle", "kld"]),
metrics=['accuracy'])
return model
Первая генерация:
Hyperparameters:
|-activation: sigmoid
|-layer_1: 672
|-loss: mape
|-num_layers: 2 <--------------
|-optimizer: SGD
|-units_0: 352 <--------------
|-units_1: 32 <--------------
Вторая генерация:
Hyperparameters:
|-activation: relu
|-layer_1: 736
|-loss: msle
|-num_layers: 3 <--------------
|-optimizer: rmsprop
|-units_0: 160 <--------------
|-units_1: 416 <--------------
|-units_2: 32 <--------------
Третья и последующие генерации:
Hyperparameters:
|-activation: elu
|-layer_1: 992
|-loss: msle
|-num_layers: 1 <--------------
|-optimizer: adam
|-units_0: 96 <--------------
|-units_1: 352 <--------------
|-units_2: 128 <--------------
Hyperparameters:
|-activation: selu
|-layer_1: 768
|-loss: kld
|-num_layers: 2 <--------------
|-optimizer: rmsprop
|-units_0: 480 <--------------
|-units_1: 352 <--------------
|-units_2: 416 <--------------