如果更多层可训练,精度会下降 - 奇怪

数据挖掘 神经网络 深度学习 喀拉斯
2022-02-14 15:48:17

我正在训练一个 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)

2个回答

准确性不是特征数量的函数。您可能听说过特征选择过程,这就是我们使用特征选择或降维的原因。这背后有巨大的理论,但在非常笼统的术语中,我们需要找出最好的特征,使我们的模型最简单,仍然保留模型中的所有相关特征。例如,添加一项新功能会降低准确性,这会严重偏向于结果,因此会导致结果不准确。

如果您的所有特征都未标准化,也可能发生这种情况,因此新添加的特征会使您的结果产生偏差,从而引入不准确性。

当您增加功能以证明增加的合理性时,您可能需要获得更多的训练数据。数据不足会导致准确性降低。