序列模型的 keras 调谐器结果中存在非现有层的单元

问题描述 投票:0回答:1

我正在使用 keras Tuner 进行 ANN 模型的超参数调整。我将模型中的层数更改为 2 到 5 之间,将节点更改为 10 到 30 之间。我使用 keras 调谐器的随机搜索模型来选择性能最佳的模型。 当我观察结果时,最上面的结果如下:

Best val_mse So Far: 0.03936238835255305
Total elapsed time: 01h 23m 53s
Results summary
Results in project\Sd attempt10
Showing 10 best trials
Objective(name='val_mse', direction='min')
Trial summary
Hyperparameters:
num_layers: 3
units_0: 15
units_1: 15
learning_rate: 0.001
units_2: 10
Score: 0.03936238835255305
Trial summary
Hyperparameters:
num_layers: 3
units_0: 15
units_1: 25
learning_rate: 0.01
units_2: 20
units_3: 25
units_4: 10
Score: 0.03974008063475291

我们可以看到,在第二次试验总结中,虽然没有 3 层,但存在 5 个隐藏层的单元。

我还附上了用于得出结果的代码片段。

def build_model(hp):
    model = keras.Sequential()
    for i in range(hp.Int('num_layers', 2, 5)):
        model.add(layers.Dense(units=hp.Int('units_' + str(i),
                                            min_value=10,
                                            max_value=30,
                                            step=5),
                               activation='relu'))
    model.add(layers.Dense(1, activation='linear'))
    model.compile(
        optimizer=keras.optimizers.Adam(
            hp.Choice('learning_rate', [1e-2, 1e-3, 1e-4])),
        loss='mse',#'mean_absolute_error',
        metrics=['mse','mae'])#['mean_absolute_error'])
    return model


tuner = RandomSearch(
    build_model,
    objective='val_mse',
    max_trials=25,
    executions_per_trial=3,
    directory='project',
    project_name='Sd attempt10')
tuner.search(X_train, y_train,
             epochs=100,
             validation_data=(Xnew, yact))
print(tuner.results_summary())

有人可以用结果解释这种行为吗?

python keras deep-learning neural-network keras-tuner
1个回答
0
投票

这是因为您已经在可能有 5 层的实例上训练了模型。现在它必须为该隐藏层创建最佳数量的单元,以便将其存储在例如

 num_hidden_units_5 = 30
。随着调谐器继续运行,它可能会发现 3 个隐藏层是最佳的,但当有 5 个隐藏层时,它仍然会保持隐藏单元数量的最佳值。

该模型没有一些“不可见”层,它只是跟踪最佳变量,但是当您更改层大小时,某些参数不再适用。

© www.soinside.com 2019 - 2024. All rights reserved.