python - 第一个时代比其他时代花费的时间更长
问题描述
我正在 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 实例化版本,但是当我训练时,有一个。
解决方案
推荐阅读
- django - 有没有办法只跟踪 django 模型中字段的第一次更改?
- javascript - 如何循环遍历内部 HTML
- java - 使用 Spring-Social-Twitter Api inReplyToStatus 发布推文不起作用
- postgresql - 在 QGIS 中查找并行/覆盖元素
- error-handling - 图像和脚本上的 404 错误的正确设置是什么?
- reactjs - 使用 webpack 构建后 bundle.js ERR_ABORTED 404(未找到)
- visual-studio - 使用 Visual Studio 在 azure 函数中捆绑命令行工具
- reactjs - 点击时更新输入状态,来自表格列表
- javascript - 无法从多个 html 输入字段中添加或删除图像
- python - Python sqlalchemy“并非所有参数都在字节格式化期间转换”