二进制和多类分类代码更改

时间:2019-05-01 12:48:40

标签: tensorflow machine-learning keras multiclass-classification

我使用的代码几乎与我在这里找到的相似...

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

该示例与二进制分类有关。我正在测试的数据要求进行多类分类。我想我需要更改激活和丢失功能。如果我有两种以上的类型,是否可以使用此处找到的相同代码?

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


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

2 个答案:

答案 0 :(得分:1)

只需将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')

答案 1 :(得分:1)

否,即多标签分类。你说多类的。这是给您的摘要:

  • 二进制:您的输出为0或1。在最后一层使用Dense(1, activation='sigmoid')之类的内容,并使用binary_cross_entropy作为损失函数。
  • 多标签:您的多个输出为0或1s; Dense(num_labels, activation='sigmoid'),然后再次binary_cross_entropy。在这种情况下,一个示例可以同时属于多个标签
  • 多类:示例属于N个类中的 1个,它们是互斥的。您将Dense(num_classes, activation='softmax')softmax_crossentropy一起使用。