我是深度学习的新手,我有一些概念上的问题。我在这里遵循了一个简单的教程,并在 Keras 中训练了一个模型来对 10 类徽标进行图像分类。我准备了 10 个班级,每个班级有近 100 张图片。当图像是这 10 个徽标之一时,我的训练Resnet50
模型表现异常出色,概率为 1.00。但问题是,如果我传递一个非徽标项目,一个在视觉上完全不相关的随机图像,它仍然以接近 1.00 的概率将其标记为那些徽标之一!
我糊涂了。我错过了什么吗?为什么会这样?如何找到解决方案?我需要在视频帧中找到徽标。但是现在,每一帧都被标记为一个标志的可能性很高!
这是我的简单训练代码:
def build_finetune_model(base_model, dropout, fc_layers, num_classes):
for layer in base_model.layers:
layer.trainable = False
x = base_model.output
x = Flatten()(x)
for fc in fc_layers:
# New FC layer, random init
x = Dense(fc, activation='relu')(x)
x = Dropout(dropout)(x)
# New softmax layer
predictions = Dense(num_classes, activation='softmax')(x)
finetune_model = Model(inputs=base_model.input, outputs=predictions)
return finetune_model
finetune_model = build_finetune_model(base_model, dropout=dropout, fc_layers=FC_LAYERS, num_classes=len(class_list))
adam = Adam(lr=0.00001)
finetune_model.compile(adam, loss='categorical_crossentropy', metrics=['accuracy'])
filepath="./checkpoints/" + "ResNet50" + "_model_weights.h5"
checkpoint = ModelCheckpoint(filepath, monitor=["acc"], verbose=1, mode='max')
callbacks_list = [checkpoint]
history = finetune_model.fit_generator(train_generator, epochs=NUM_EPOCHS, workers=8,
steps_per_epoch=steps_per_epoch,
shuffle=True, callbacks=callbacks_list)
plot_training(history)