【问题标题】:How can I pass arguments into the tuner-model?如何将参数传递给调谐器模型?
【发布时间】:2021-10-17 00:50:48
【问题描述】:

以下是我原来的MLP模型:

def create_model(n_hidden_1, n_hidden_2, num_classes, num_features):
    # create the model
    model = Sequential()
    model.add(tf.keras.layers.InputLayer(input_shape=(num_features,)))
    model.add(tf.keras.layers.Dense(n_hidden_1, activation='sigmoid'))
    model.add(tf.keras.layers.Dense(n_hidden_2, activation='sigmoid'))
    model.add(tf.keras.layers.Dense(num_classes, activation='softmax'))
    # instantiate the optimizer
    opt = keras.optimizers.SGD(learning_rate=LEARNING_RATE)
    # compile the model
    model.compile(
        optimizer=opt,
        loss="categorical_crossentropy",
        metrics="categorical_accuracy"
    )
    # return model
    return model

为了调优,我实现了一个 Keras-Tuner 模型如下:

def _model(hp, num_features, num_classes):
    model = keras.Sequential()
    model.add(tf.keras.layers.InputLayer(input_shape=(num_features)))
    model.add(tf.keras.layers.Dense(
            hp.Int("dense_1_units", min_value=128, max_value=2048, step=128, default=128),
            activation="sigmoid"
        ))
    model.add(tf.keras.layers.Dense(
        hp.Int("dense_2_units", min_value=128, max_value=2048, step=128, default=128),
        activation="sigmoid"
    ))
    model.add(tf.keras.layers.Dense(num_classes, activation="softmax"))

    model.compile(
        optimizer=tf.keras.optimizers.Adam(
            hp.Choice("learning_rate", values=[1e-1, 1e-2, 1e-3])
        ),
        loss="categorical_crossentropy",
        metrics="categorical_accuracy"
    )

    return model

而且,电话是这样的:

tuner = RandomSearch(
    _model(FEATURES_COUNT, CLASS_COUNT),
    objective="categorical_accuracy",
    max_trials=10,
    overwrite=True,
    directory="my_project",
    project_name="my_project",
)

但是,它会产生以下错误:

Traceback (most recent call last):
  File "C:\Users\pc\source\repos\my_project\my_tuner.py", line 219, in <module>
    _model(FEATURES_COUNT, CLASS_COUNT),
TypeError: _model() missing 1 required positional argument: 'num_classes'

如何将num_featuresnum_classes 的值传递到调谐器模型中?

【问题讨论】:

    标签: python keras keras-tuner


    【解决方案1】:

    对于 num_classes ,如文档中所述。

    可以这样传递:

    class MyHyperModel(HyperModel):
        def __init__(self, classes):
            self.classes = classes
    
    def build(self, hp):
        model = keras.Sequential()
        model.add(layers.Flatten())
        model.add(
            layers.Dense(
                units=hp.Int("units", min_value=32, max_value=512, step=32),
                activation="relu",
            )
        )
        model.add(layers.Dense(self.classes, activation="softmax"))
        model.compile(
            optimizer=keras.optimizers.Adam(
                hp.Choice("learning_rate", values=[1e-2, 1e-3, 1e-4])
            ),
            loss="categorical_crossentropy",
            metrics=["accuracy"],
        )
        return model
    
    hypermodel = MyHyperModel(classes=10)
    
    tuner = RandomSearch(
        hypermodel,
        objective="val_accuracy",
        max_trials=3,
        overwrite=True,
        directory="my_dir",
        project_name="helloworld",
    )
    
    tuner.search(x_train, y_train, epochs=2, validation_data=(x_val, y_val))
    

    https://keras.io/guides/keras_tuner/getting_started/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2018-04-18
      • 2021-12-23
      • 2012-10-05
      相关资源
      最近更新 更多