我正在训练一个 4 类分类器。我从 vgg16 加载预训练的权重,并且只将最后一层设置为可训练的。这给了我 0.9 的损失(分类交叉熵)和 70% 的训练准确度。
但是,我想要我的图像的特征 - 倒数第二个激活是为每个图像获取特征的一种选择。因此,我将最后一层和倒数第二层都设置为可训练的,但随后我的损失跳到 9.8,训练准确率下降到 39%。
这怎么可能发生?这是我正在使用的代码:
vgg.model.pop()
对于 vgg.model.layers 中的层:
layer.trainable = 假
vgg.model.add(密集(trn_batches.nb_class,激活='softmax'))
选择 = 亚当(lr=0.001)
#只有最后一层是可训练的
vgg.model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
vgg.model.fit_generator(trn_batches,samples_per_epoch=trn_batches.nb_sample,nb_epoch=1,
验证数据=val_batches,nb_val_samples=val_batches.nb_sample)
#使最后 2 层可训练(从 -3 开始,因为有一个 dropout 层)
对于 vgg.model.layers[-3:] 中的层:
layer.trainable = True
vgg.model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
vgg.model.fit_generator(trn_batches,samples_per_epoch=trn_batches.nb_sample,nb_epoch=1,validation_data=val_batches,nb_val_samples=val_batches.nb_sample)