Первая эпоха проходит намного дольше, чем другие - PullRequest
0 голосов
/ 13 июня 2019

Я обучаю двух CNN на Google Colab: VGG и InceptionV3.
У меня есть 10 классов, с 11614 учебными образцами и 2884 проверочными образцами.

Это коды, используемые для создания экземпляров моделей:
а) VGG (~ 250 000 свободных параметров):

    base_model = vgg16.VGG16(include_top=False, weights='imagenet',
                             input_shape=(224, 224, 3))
    for layer in base_model.layers:
      layer.trainable = False

    x = base_model.output
    x = Flatten(name='flatten', input_shape=base_model.output_shape)(x) 
    x = Dense(10, activation='softmax', name='predictions')(x)
    model = Model(inputs=base_model.input, outputs=x)

b) InceptionV3 (~ 20 000 свободных параметров):

    base_model = keras.applications.inception_v3.InceptionV3 (include_top=False,
                      weights='imagenet', input_shape=(299, 299, 3))

    for layer in base_model.layers:
      layer.trainable = False

    x = base_model.output
    x = GlobalAveragePooling2D()(x) 
    x = Dense(10, activation='softmax', name='predictions')(x)
    model = Model(inputs=base_model.input, outputs=x)

Я тренировался по 5 эпох, чтобы увидеть результаты, и обнаружил кое-что очень странное: первая эпоха занимает около час , а остальные - 3 минуты каждый.

Вот результаты тренинга:
а) VGG:

    Epoch 1/5
    362/362 [==============================] - 6260s 17s/step - loss: 1.2611 - acc: 0.6735 - val_loss: 0.9555 - val_acc: 0.7712
    Epoch 2/5
    362/362 [==============================] - 159s 440ms/step - loss: 0.9351 - acc: 0.7800 - val_loss: 1.1295 - val_acc: 0.7903
    Epoch 3/5
    362/362 [==============================] - 156s 431ms/step - loss: 0.8751 - acc: 0.8033 - val_loss: 0.8300 - val_acc: 0.8219
    Epoch 4/5
    362/362 [==============================] - 155s 429ms/step - loss: 0.8482 - acc: 0.8075 - val_loss: 0.7436 - val_acc: 0.8524
    Epoch 5/5
    362/362 [==============================] - 155s 429ms/step - loss: 0.8031 - acc: 0.8263 - val_loss: 0.9327 - val_acc: 0.7970

б) Начало V3:

    Epoch 1/5
    362/362 [==============================] - 4052s 11s/step - loss: 1.3590 - acc: 0.5542 - val_loss: 1.3469 - val_acc: 0.5455
    Epoch 2/5
    362/362 [==============================] - 249s 687ms/step - loss: 0.8921 - acc: 0.7115 - val_loss: 1.3225 - val_acc: 0.5519
    Epoch 3/5
    362/362 [==============================] - 241s 667ms/step - loss: 0.7938 - acc: 0.7347 - val_loss: 1.1960 - val_acc: 0.5999
    Epoch 4/5
    362/362 [==============================] - 239s 660ms/step - loss: 0.7589 - acc: 0.7416 - val_loss: 1.2979 - val_acc: 0.5593
    Epoch 5/5
    362/362 [==============================] - 237s 654ms/step - loss: 0.7252 - acc: 0.7505 - val_loss: 1.3122 - val_acc: 0.5565

Совершенно очевидно, что Inception внезапно начинает переоснащаться, хотя, по моему мнению, этого не должно происходить: нужно обучить меньше параметров, и я даже добавил слой выпадения.

Есть идеи, почему во времена эпохи есть существенная разница?

Редактировать: Очевидно, я не включил версию Inception, где я добавляю плотный слой, но когда я тренировался, был один.

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