【问题标题】:Tune a pre-existing model with Keras Tuner使用 Keras Tuner 调整预先存在的模型
【发布时间】:2020-09-20 23:00:52
【问题描述】:

我将Keras Tuner 视为一种进行超参数优化的方法,但我看到的所有示例都显示了一个全新的模型正在定义中。例如,来自 Keras Tuner Hello World

def build_model(hp):
    model = keras.Sequential()
    model.add(layers.Flatten(input_shape=(28, 28)))
    for i in range(hp.Int('num_layers', 2, 20)):
        model.add(layers.Dense(units=hp.Int('units_' + str(i), 32, 512, 32),
                               activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))
    model.compile(
        optimizer=keras.optimizers.Adam(
            hp.Choice('learning_rate', [1e-2, 1e-3, 1e-4])),
        loss='sparse_categorical_crossentropy',
        metrics=['accuracy'])
    return model

我已经有一个想要调整的模型,但这是否意味着我必须用拼接到主体的超参数来重写它,如上所述,或者我可以简单地将超参数传递给顶部的模型?比如这样:

def build_model(hp):
    model = MyExistingModel(
        batch_size=hp['batch_size'],
        seq_len=hp['seq_len'],
        rnn_hidden_units=hp['hidden_units'],
        rnn_type='gru',
        num_rnn_layers=hp['num_rnn_layers']
    )
    optimizer = optimizer_factory['adam'](
        learning_rate=hp['learning_rate'],
        momentum=0.9,
    )
    model.compile(
        optimizer=optimizer,
        loss='sparse_categorical_crossentropy',
        metrics=['sparse_categorical_accuracy'],
    )
    return model

据我所知,上述似乎有效。模型初始化 args 都通过 HyperParameters 实例传递到内部 TF 层,并从那里访问......虽然我不太确定 如何 将它传递进去......我认为可以通过预定义一个HyperParameters 对象并将其传递给调谐器来完成,然后将其传递给build_model

hp = HyperParameters()
hp.Choice('learning_rate', [1e-1, 1e-3])

tuner = RandomSearch(
    build_model,
    max_trials=5,
    hyperparameters=hp,
    tune_new_entries=False,
    objective='val_accuracy')

在内部,我的模型有两个 RNN(LSTM 或 GRU)和一个 MLP。但是我还没有遇到过 Keras Tuner build_model,它采用这样的现有模型,只需传入超参数即可。该模型相当复杂,我希望避免重新定义它(以及避免代码重复)。

【问题讨论】:

    标签: tensorflow machine-learning keras keras-tuner


    【解决方案1】:

    确实,这可能的,正如this GitHub issue 所言...

    但是,我没有通过 hyperparameters 参数将 hp 对象传递给 Tuner,而是以建议的 here 的方式覆盖 Tuner run_trial 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多