首页 > 解决方案 > 第一个时代比其他时代花费的时间更长

问题描述

我正在 Google Colab 上训练两个 CNN:VGG 和 InceptionV3。
我有 10 个类,有 11614 个训练样本和 2884 个验证样本。

这些是用于实例化模型的代码:
a) 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 个 epoch,只是为了看看结果,我发现了一些很奇怪的东西:第一个 epoch 大约需要一个小时才能完成,其余的每个 epoch 大约需要3 分钟

这些是训练的输出:
a) 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

b) InceptionV3:

    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 突然开始过拟合,尽管在我看来这不应该发生:需要训练的参数更少,我什至添加了一个 dropout 层。

任何想法为什么在时代有显着差异?

编辑:显然我没有包含我添加密集层的 Inception 实例化版本,但是当我训练时,有一个。

标签: pythontensorflowkerasgoogle-colaboratory

解决方案


推荐阅读