我们上一章令卷积基全部不进行训练,在这一章我们锁定卷积基的一部分,训练另一部分,在这个过程中我们使用上一章我们训练好的全连接层部分

目录

1  导入库

2  读取模型

3  提取卷积基

4  组建新模型

5  添加数据集

6  编译模型

7  训练模型

8  预测模型


1  导入库

NLP预训练模型微调与知识蒸馏 预训练模型 微调_全连接

2  读取模型

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_02

我们看一下读取的模型

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_03

NLP预训练模型微调与知识蒸馏 预训练模型 微调_添加数据_04

  • 我们现在读取的模型之前训练的所有参数也同时读取了进来

3  提取卷积基

现在我们的整个模型都是可训练状态

然后我们提取出模型的卷积基础部分,之后可能会用到

NLP预训练模型微调与知识蒸馏 预训练模型 微调_卷积_05

我们看一下是否提取成功

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_06

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_07

NLP预训练模型微调与知识蒸馏 预训练模型 微调_全连接_08

我们现在仅仅想对最后三层做调整,所以我们设置除最后三层外的所有层为不可训练状态

NLP预训练模型微调与知识蒸馏 预训练模型 微调_添加数据_09

我们现在再看一下卷积基的情况

NLP预训练模型微调与知识蒸馏 预训练模型 微调_NLP预训练模型微调与知识蒸馏_10

我们只关注训练参数就可以了,发现比之前少了很多

NLP预训练模型微调与知识蒸馏 预训练模型 微调_卷积_11

4  组建新模型

我们首先创建一个新的模型对象,然后把修改过的卷积基加进来,之后再将训练好的模型中的全连接层加进来

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_12

我们看一下新模型的情况

NLP预训练模型微调与知识蒸馏 预训练模型 微调_NLP预训练模型微调与知识蒸馏_13

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_14

5  添加数据集

与上一章添加数据集的代码相同,我们简单看一下

NLP预训练模型微调与知识蒸馏 预训练模型 微调_添加数据_15

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_16

6  编译模型

此处我们由于要训练的参数非常多,所以我们减小学习速率,保证梯度下降

NLP预训练模型微调与知识蒸馏 预训练模型 微调_卷积_17

7  训练模型

首先我们定义之前训练的epochs数,之前我们训练了15个,之后我们定义这次要训练的epoch,我们这次训练10个,之后我们定义总的epoch数

NLP预训练模型微调与知识蒸馏 预训练模型 微调_卷积_18

  • inital_epochs这个值只要不大于总epoch写多少都行,只是给我们看的这样一个数值,与前面真实训练了多少轮无关

然后我们model.fit这样写

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_19

我们这样写显示的训练轮数就从16开始了

NLP预训练模型微调与知识蒸馏 预训练模型 微调_卷积_20

我们看一下两条曲线

  • acc

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_21

NLP预训练模型微调与知识蒸馏 预训练模型 微调_卷积_22

  • loss

NLP预训练模型微调与知识蒸馏 预训练模型 微调_tensorflow_23

NLP预训练模型微调与知识蒸馏 预训练模型 微调_NLP预训练模型微调与知识蒸馏_24

效果比前15次训练更加好,拟合程度逐渐提高

之后保存模型

NLP预训练模型微调与知识蒸馏 预训练模型 微调_NLP预训练模型微调与知识蒸馏_25

8  预测模型

预测时就跟之前一样了,我们简单看一下

NLP预训练模型微调与知识蒸馏 预训练模型 微调_全连接_26

NLP预训练模型微调与知识蒸馏 预训练模型 微调_全连接_27

NLP预训练模型微调与知识蒸馏 预训练模型 微调_卷积_28