【问题标题】:Binary and multi-class classification code change二进制和多类分类代码更改
【发布时间】:2019-09-20 00:53:12
【问题描述】:

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

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

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

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


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

【问题讨论】:

    标签: tensorflow machine-learning keras multiclass-classification


    【解决方案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')
    

    【讨论】:

    【解决方案2】:

    不,那是多标签分类。你说的多类。以下是给您的摘要:

    • 二进制:单个输出为 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 一起使用。

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 2021-12-28
      • 2012-06-08
      • 2017-07-15
      • 2019-10-19
      • 2018-07-28
      • 2016-06-01
      • 2019-01-28
      • 2021-04-10
      相关资源
      最近更新 更多