微调
所谓微调: 冻结模型库的底部的卷积层,
共同训练新添加的分类器层和顶部部分卷积层。
这允许我们“微调”基础模型中的高阶特征表示,以使它们
与特定任务更相关。
只有分类器已经训练好了,才能微调卷积基的顶部卷积层。如果有没有这样的话,刚开始的训练误差很大,微调之前这些卷积层学到的表示会被破坏掉
微调步骤
一、在预训练卷积基上添加自定义层
二、冻结卷积基所有层
三、训练添加的分类层
四、解冻卷积基的一部分层
在1.0版本基础上添加
covn_base.trainable = True
len(covn_base.layers)
fine_tune_at = -3
for layer in covn_base.layers[:fine_tune_at]:
layer.trainable = False
model.compile(optimizer=keras.optimizers.Adam(lr=0.0005/10),
loss='binary_crossentropy',
metrics=['acc'])
initial_epochs = 12
fine_tune_epochs = 10
total_epochs = initial_epochs + fine_tune_epochs
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=total_epochs,
initial_epoch=initial_epochs,
validation_data=test_generator,
validation_steps=50)