【问题标题】:Multiclassification task using keras [closed]使用 keras 的多分类任务 [关闭]
【发布时间】:2020-10-31 01:09:33
【问题描述】:

对一张图像中的多个对象进行分类(不是检测!)是个问题。我怎样才能使用 keras 做到这一点。

例如,如果我在这张图片中有 6 个类(狗、猫、鸟……)和两个不同的对象(猫和鸟)。标签的格式为:[0,1,1,0,0,0] 推荐使用哪种指标、损失函数和优化器?我想使用 CNN。

【问题讨论】:

    标签: python machine-learning keras conv-neural-network multiclass-classification


    【解决方案1】:

    关键字是“多标签分类”。 在输出层中,您有多个神经元,每个神经元代表您的一个类。

    现在您应该对每个神经元单独使用二元分类。 因此,如果您有 3 个类别,则网络的输出可能是 [0.1, 0.8, 0.99],这意味着:第一个类别为真,概率为 10%,第二个类别为真,概率为 80%,最后一个类别为真类为 99%。因此,网络决定对于单个输入图像,两个类同时为真!

    在 Keras/Tensorflow 中实现这一点非常容易。 您可以使用一些 binary_crossentropy 作为您的 损失函数 和 Sigmoid 函数作为最后一层中的 激活。因此,您可以获得每个输出神经元的区间 (0, 1) 中的值。 作为指标,您可以使用准确度,它告诉您有多少图像被正确分类(作为相对频率)。

    请看下面的例子:

    from tensorflow.keras.layers import *
    from tensorflow.keras.activations import *
    from tensorflow.keras.models import *
    from tensorflow.keras.optimizers import *
    import numpy as np
    
    # put your data right here:
    num_classes = 3 # here I'm assuming 3 classes, e.g. dog, cat and bird
    x_train = np.zeros((100, 128, 128, 3)) # I'm just using zeros to simplify the example
    y_train = np.zeros((100, num_classes))
    
    model = Sequential()
    # put your conv layer / conv blocks here:
    model.add(Conv2D(32, kernel_size=3, activation='relu', input_shape=(128, 128, 3)))
    model.add(Flatten())
    model.add(Dense(units=num_classes, activation='sigmoid'))
        
    model.compile(
            loss="binary_crossentropy",
            optimizer=Adam(0.005),
            metrics=["accuracy"])
    training_history = model.fit(x=x_train, y=y_train, epochs=5)
    

    我使用的是 TensorFlow 2.2.0。 我希望这会对你有所帮助:)

    【讨论】:

    • 感谢您的回答。我已经尝试过这些设置,但也有一些不太正确的地方,因为准确度从 90% 左右开始。我认为它以错误的方式测量准确性。有什么建议吗?
    • 编辑:我将准确性更改为 categorical_accuracy。现在准确率保持在 2% 左右
    • 准确率的值取决于您的问题。精度越高,您的网络就越好。准确度应该是正确的选择,因为 categorical_accuracy 适用于只有一个类为真的多类问题。在我们的例子中,我们有一个多二进制类问题。我刚刚使用此设置处理了我的项目,它的效果非常准确。
    猜你喜欢
    • 2017-08-02
    • 2016-12-03
    • 2017-10-25
    • 2017-09-27
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多