迁移学习【二】:神经网络之微调(fine-turning)

算法实现语言Python
神经网络框架Tensorflow/Keras
所用网络LSTM

回顾,迁移学习过程:

①训练模型
②冻结模型部分层(一般指除全连接层外的所有层)
(上节内容)
————————————————————————
(本节内容)
③在冻结的层后增加或替换层 ←
④使用新数据重新训练,这时候学习率要很小(俗称微调fine-turning)←

近期更新(2022.4.25),增加了一行缺失的代码:output = Reshape([num_classes])(layer_softmax)

一、增加或替换层

承接上一节的代码,我们冻结了除全连接层外的所有层。保留了绝大部分前面训练的参数:

for layer in model.layers [:-3]:
    print(layer.name)
    layer.trainable = False

下一步,我们增加或替换网络的层(本质上就是重构网络)。

在本案例中,为方便读者理解, 我懒得改(●’◡’●) 我们保持结构不便。将1至倒数第四层的网络全部拿来:
x = model.layers[-4].output

然后在后续添加全连接层。微调的学习率要小,否则容易过拟合,这里设置学习率=0.0001(默认0.001)

x = model.layers[-4].output               

layer_dense1 = Dense(num_classes, name="dense1")(x)
layer_softmax = Activation('softmax')(layer_dense1)
output = Reshape([num_classes])(layer_softmax)
model = Model(inputs=input, outputs=output)
model.compile(Adam(learning_rate=0.0001),loss='categorical_crossentropy', metrics=['accuracy'], experimental_run_tf_function=False)
model.summary()

二、微调fine-turning

重构好模型后,使用新环境下的数据进行微调(本质上就是再训练)

x_train_fineturning是新的训练数据
y_train_fineturning是对应的标签


history2 = model.fit(x_train_fineturning,
                    y_train_fineturning,
                    batch_size=batch_size,
                    epochs=10,
                    verbose=2,
                    validation_split = 0.1,
 
                    callbacks = [
                        tf.keras.callbacks.ModelCheckpoint(filepath, monitor='val_accuracy', verbose=0, save_best_only=True, mode='max'),
                        #学习率系数0.5
                        tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.7, patience=3, verbose=1),
                        tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=6, verbose=0, mode='auto')
                           
    ])

微调过程可视化:
在这里插入图片描述
由于微调过程很容易过拟合,训练完后,为进一步检验模型泛化能力,使用测试集的数据进行测试。
在这里插入图片描述
测试结果还OK

以上便是迁移学习的简单应用,是不是很简单~

上一章 迁移学习【一】:实现神经网络层的冻结

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sinysama

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值