我正在尝试将使用 VGGFace 权重的微调 VGGFace 模型与完全重新训练的模型进行比较。当我使用微调模型时,我得到了不错的准确率分数。然而,当我通过解冻权重重新训练整个模型时,准确度变得接近随机。
我在猜测这是否是由于使用了小数据集?我知道 VGGFace 是在数百万个样本上训练的,而我的数据集只有 1400 个样本(对于二进制分类问题,每个类 700 个)。但我只是想确定我是否正确地加入了 VGGFace 模型和我的自定义模型。会不会也是学习率太快的原因?
使用以下代码设置模型。
def Train_VGG_Model(train_layers=False):
print('='*65);K.clear_session()
vggface_model=VGGFace(model='vgg16')
x=vggface_model.get_layer('fc7/relu').output
x=Dense(512,name='custom_fc8')(x)
x=Activation('relu',name='custom_fc8/relu')(x)
x=Dense(64,name='custom_fc9')(x)
x=Activation('relu',name='custom_fc9/relu')(x)
x=Dense(1,name='custom_fc10')(x)
out=Activation('sigmoid',name='custom_fc10/sigmoid')(x)
custom_model=Model(vggface_model.input,out,
name='Custom VGGFace Model')
for layer in custom_model.layers:
if 'custom_' not in layer.name:
layer.trainable=train_layers
elif 'custom_' in layer.name:
layer.trainable=True
print('Layer name:',layer.name,
'... Trainable:',layer.trainable)
print('='*65);opt=optimizers.Adam(lr=1e-5)
custom_model.compile(loss='binary_crossentropy',
metrics=['accuracy'],
optimizer=opt')
custom_model.summary()
return custom_model
callbacks=[EarlyStopping(monitor='val_loss',patience=1,mode='auto')]
model=Train_VGG_Model(train_layers=train_layers)
model.fit(X_train,y_train,batch_size=32,epochs=100,
callbacks=callbacks,validation_data=(X_valid,y_valid))
慕勒3428872
相关分类