我正在进行简单的图像分类。每个物体必须根据其材料(铝,铁,铜)属于其中一个类别 每个班级只有一张图片,例如例如,所有铝材料不与铁材料一起出现在同一张照片中。该模型运行良好,准确性很好。但是我不知道如何处理不适合这三个类别的图像。假设我提交了一块木头的照片。这个不经意地不适合3个类别中的任何一个,但我的模型似乎“猜测”其中一个,并给出这些随机类别之一的假阳性以及高概率。我理解model.predict()的结果不能为零,理想情况。我测试了softmax和sigmoid激活无济于事。我还尝试创建一个名为“无”的虚假类别,并使用没有任何上述材料的对象的随机照片训练模型。结果是整个模型变得不可靠并且失去了我之前的大部分准确性。
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=(64, 64, 3)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(classes, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
checkpoint = ModelCheckpoint(filepath='c:/Users/data/models/model-{epoch:02d}-{val_loss:.2f}.hdf5',save_best_only=True)
callbacks_list = [checkpoint]
model.fit(x_train, y_train,
batch_size=75,
epochs=20,
verbose=1,
validation_data=(x_valid, y_valid), callbacks=[checkpoint])
答案 0 :(得分:0)
您需要添加另一个类,该类将标记与现有标签不匹配的项目。所以你有铝,铁,铜和none_of_the_above
在线更改模型:
model.add(Dense(classes, activation='sigmoid'))
到
model.add(Dense(classes+1, activation='sigmoid'))
并修改您的数据以将wood标记为none_of_the_above。您将需要很多与铝,铁,铜不匹配的示例。
现在添加自定义准确性:
def ignore_accuracy_of_class(class_to_ignore=0):
def ignore_acc(y_true, y_pred):
y_true_class = K.argmax(y_true, axis=-1)
y_pred_class = K.argmax(y_pred, axis=-1)
ignore_mask = K.cast(K.not_equal(y_pred_class, class_to_ignore), 'int32')
matches = K.cast(K.equal(y_true_class, y_pred_class), 'int32') * ignore_mask
accuracy = K.sum(matches) / K.maximum(K.sum(ignore_mask), 1)
return accuracy
return ignore_acc
并将其添加到编译:
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy', ignore_accuracy_of_class(4)])
ignore_accuracy_of_class中的4是要忽略的标签。现在,您既拥有整个模型的准确性,也拥有仅所选的铝,铁,铜标签的准确性。
答案 1 :(得分:-1)
根据我的理解,这在监督学习中几乎是不可能的。
监督学习需要一些数据集,让机器学习。但是,属于“无”的类别太多了。几乎不可能涵盖无类别下的所有其他材料。最糟糕的是,有监督的学习将主要认识到所训练的内容。所以当你的测试中出现一些全新的东西时。很可能,系统会根据给定的训练忽略或给出一个结果。
一种更适合您应用的方法是无监督学习。使用无监督学习进行图像分类应该有很多资源和研究。其中一份样本文件:
欢迎任何反馈。我纠正了。谢谢