gpt4 book ai didi

machine-learning - 在 Keras 中微调 InceptionV3

转载 作者:行者123 更新时间:2023-11-30 09:08:23 26 4
gpt4 key购买 nike

我正在 Keras 中使用迁移学习实现卷积神经网络,方法是使用来自 keras.applications 的预训练 InceptionV3 模型,如下所示

#Transfer learning with Inception V3
base_model = applications.InceptionV3(weights='imagenet', include_top=False, input_shape=(299, 299, 3))

## set model architechture
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(y_train.shape[1], activation='softmax')(x)
model = Model(input=base_model.input, output=predictions)

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

model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

model.summary()

我正在关注一篇博客文章,该文章说在卡住基本模型后必须对模型进行几个时期的训练。我已经对模型进行了 5 个 epoch 的训练,得到的 acc 为 0.47。之后acc并没有太大改善。然后我停止了训练,像这样解冻了一些层,并卡住了前 2 个卷积层。

for layer in model.layers[:172]:
layer.trainable = False
for layer in model.layers[172:]:
layer.trainable = True

并使用学习率较低的 SGD 进行编译。

当 acc 因层卡住而没有太大改善时,我停止训练模型的方法是否正确?我应该训练更长时间吗?

如何知道卡住层时停止训练的正确时间?

最佳答案

恕我直言,在损失/准确性停止改善之前,您不必训练随机初始化的层。

当我使用 InceptionV3 进行微调时,我只训练了额外的密集层 2 个 epoch,尽管再训练几个 epoch 很可能会带来更好的损失/准确性。初始训练的纪元数取决于您的问题和数据。(对我来说,2 个时期达到了约 40%。)

我认为只训练密集层太长时间是浪费时间。训练它以获得比随机初始化更好的东西。然后解冻更多层并与密集层一起训练它们更长时间。一旦您的 Dense 层给出了合理的预测,就可以很好地训练其他层,特别是您在 InceptionV3 中进行了批量归一化,可以稳定早期层的梯度方差。

关于machine-learning - 在 Keras 中微调 InceptionV3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46502207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com