10.5 VGG16模型复用

10.5.1 微调(Finetuining)

(1) trainable参数变动

在进行Finetuning对模型重新训练时,对于部分不需要训练的层可以通过设置trainable=False来确保其在训练过程中不会被修改权值。

(2) 全连接层的神经元个数

预训练的VGG是在ImageNet数据集上进行训练的,对1000个类别进行判定,由于需要进行的是猫狗分类,所以应该将最后的分类类别改为两类即可。

10.5.2 代码变动

在类的初始化时,将需要共享的参数传递进来。

图 10-11 初始化改动

卷积操作设置参数为不可训练,后面会将预训练模型的参数进行传入。

图 10-12 卷积操作改动

全连接操作可以进行训练,对我们新加入的数据集进行拟合。

图 10-13 全连接操作改动

对卷积层进行改动,其中的参数均不可训练,使用预训练模型的参数。

图 10-14 卷积层改动

设定最后三层全连接均可训练,将最后的输出改为2,因为我们的问题是个二分类问题。

图 10-15 全连接层改动

10.5.3 载入权重

图 10-16 载入权重

权重文件:https://www.cs.toronto.edu/~frossard/vgg16/vgg16_weights.npzarrow-up-right

分类文件: https://www.cs.toronto.edu/~frossard/vgg16/imagenet_classes.pyarrow-up-right

> 示例代码

Last updated

Was this helpful?