我使用的代码与我在这里找到的几乎相似...
https://towardsdatascience.com/classify-butterfly-images-with-deep-learning-in-keras-b3101fe0f98
该示例与二元分类相关。我正在测试的数据需要多类分类。我想我需要更改激活和损失函数。如果我有超过 2 种类型,我可以使用此处找到的相同代码吗?
https://github.com/bertcarremans/Vlindervinder/blob/master/model/CNN.ipynb
更新: 我还有一个问题。如果我有足够的数据,是否需要增强?
不,这是多标签分类。你说多类。以下是给您的摘要:
-
二进制:单个输出为 0或 1。您在最后一层中使用类似
Dense(1, activation='sigmoid')
的东西,binary_cross_entropy
作为损失函数。 -
多标签:您有多个 0或 1 的输出;
Dense(num_labels, activation='sigmoid')
又一次binary_cross_entropy
.在这种情况下,一个示例可以同时属于多个标签。 -
多类:示例属于N 个类中的 1个,它们是互斥的。您将
Dense(num_classes, activation='softmax')
与softmax_crossentropy
一起使用。
只需将binary_crossentropy
更改为categorical_crossentropy
:
cnn.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
如果您的标签不是独热编码的,请修改以下行:
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(IMG_SIZE,IMG_SIZE),
batch_size = BATCH_SIZE,
class_mode='categorical')
validation_generator = validation_datagen.flow_from_directory(
'data/validation',
target_size=(IMG_SIZE,IMG_SIZE),
batch_size = BATCH_SIZE,
class_mode='categorical')