Тюнер Keras: несоответствие между количеством используемых слоев и количеством сообщенных слоев - PullRequest
0 голосов
/ 23 апреля 2020

Используя пример с веб-сайта Keras Tuner, я написал простой код настройки

base_model = tf.keras.applications.vgg16.VGG16(input_shape=IMG_SHAPE,
                                              include_top=False, 
                                              weights='imagenet')
base_model.trainable = False

def build_model(hp):
    model = tf.keras.Sequential();
    model.add(base_model);

    for i in range(hp.Int('num_layers', 1, 2)):
        model.add(tf.keras.layers.Conv2D(filters=hp.Int('Conv2D_' + str(i),
            min_value=32,
            max_value=512,
            step=32),
            kernel_size=3, activation='relu'));
        model.add(tf.keras.layers.Dropout(hp.Choice('rate', [0.3, 0.5])));

    model.add(tf.keras.layers.GlobalAveragePooling2D());
    model.add(tf.keras.layers.Flatten());
    model.add(tf.keras.layers.Dropout(0.2));
    model.add(tf.keras.layers.Dense(5, activation='softmax'));

    model.compile(optimizer=tf.keras.optimizers.RMSprop(hp.Choice('learning_rate', [1e-4, 1e-5])),
        loss='categorical_crossentropy',
        metrics=['accuracy']);

    return model


epochs = 2
callback = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=3)

tuner = RandomSearch(
    build_model,
    objective='val_accuracy',
    max_trials=24,
    executions_per_trial=1,
    directory=LOG_DIR);

tuner.search_space_summary();

tuner.search(train_generator,
             callbacks=[callback],
             epochs = epochs,
             steps_per_epoch = train_generator.samples // BATCH_SIZE,
             validation_data = valid_generator,
             validation_steps = valid_generator.samples // BATCH_SIZE,
             verbose = 1);

tuner.results_summary();
models = tuner.get_best_models(num_models=2);

Однако, когда я запускаю его с разным количеством слоев, но он показывает несоответствие между количеством сообщаемых слоев и значением num_layers. Например, он сообщает о трех слоях Conv2D и все же показывает num_layers как 1. Почему?

[Trial summary]
 |-Trial ID: 79cd7bb6146b4c243eb2bc51f19985de
 |-Score: 0.8444444537162781
 |-Best step: 0
 > Hyperparameters:
 |-Conv2D_0: 448
 |-Conv2D_1: 448
 |-Conv2D_2: 512
 |-learning_rate: 0.0001
 |-num_layers: 1
 |-rate: 0.5

1 Ответ

0 голосов
/ 03 мая 2020

Любой увиденный гиперпараметр будет отображаться в сводке, что означает, что после запуска пробной версии, содержащей три слоя, все последующие сводки будут содержать три размера слоев. Это не означает, что он использует все три слоя, что обозначено печатью num_layers: 1 для этого конкретного испытания.

См. Сообщение omalleyt12 здесь для получения более подробной информации: https://github.com/keras-team/keras-tuner/issues/66#issuecomment -525923517

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...