二进制和多classclassification代码更改

Binary and multi-class classification code change

我使用的代码与我在此处找到的几乎相似...

https://towardsdatascience.com/classify-butterfly-images-with-deep-learning-in-keras-b3101fe0f98

该示例与二进制class化有关。我正在测试的数据要求 multi-class classification。我想我需要更改激活和损失函数。如果我有 2 种以上类型,我可以使用此处找到的相同代码吗?

https://github.com/bertcarremans/Vlindervinder/blob/master/model/CNN.ipynb


更新: 我还有一个问题。如果我有足够的数据,是否有必要进行扩充?

只要把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')

不是,那是多标签class化。你说的多class。这里有一个总结:

  • Binary: 你有 single 0 或 1 的输出。你在最后一层使用类似 Dense(1, activation='sigmoid') 的东西,并且binary_cross_entropy 作为损失函数。
  • 多标签:你有多个输出0或1; Dense(num_labels, activation='sigmoid')binary_cross_entropy。在这种情况下,一个示例可以同时属于多个标签
  • Multi-class:例子属于1 out of N classes,他们互为独家的。您将 Dense(num_classes, activation='softmax')softmax_crossentropy 一起使用。