【问题标题】:Multioutput Multiclassification problem with KerasKeras 的多输出多分类问题
【发布时间】:2020-10-27 02:35:53
【问题描述】:

我有一个数据集,其中包含一张/两张/三张/...卡片的图像。 因为我总共有 52 张不同的卡片,所以我有 52 个类 -> 因此我的输出层中有 52 个神经元。

使用每张图像一张卡片训练网络非常适合 CNN。 一个标签看起来像这样:例如 [0,0,...,1,0,0]。 这是我完成这项任务的网络的最后一层:

model.add(layers.Dense(52, activation='softmax'))
optimizer = keras.optimizers.Adam(lr=0.00001) 
model.compile(loss='categorical_crossentropy',metrics=['accuracy'],optimizer=optimizer)

为每张图片训练两张或更多卡片对我来说更具挑战性。 由于现在一张图像包含多张卡片,因此该图像的可能标签如下所示:[0,1,0,...,1,0,0]。 我将从相同的网络架构开始,但是: 我认为对于这个问题,我现在必须在最后一层使用 sigmoid 而不是 softmax(因为每个类都是独立的)。 对于损失,我会简单地使用类似mse = tf.keras.losses.MeanSquaredError() 至于准确性,我不确定。

model.add(layers.Dense(52, activation='sigmoid'))
adam = keras.optimizers.Adam(lr=0.00001) 
model.compile(loss=mse ,metrics=['__?__'],optimizer=adam)

这些设置有什么问题?

我搜索了很多 - 但令人困惑的是,我没有找到一些有用的 cmets。人们总是给出一些使用 YOLO 的提示 - 但我不会检测对象 - 我只想分类:例如,图片中有一张红桃 A 和一张红桃王 - 它们在哪里并不重要。

还有一个困惑:我多次表示 CNN 只能对单类问题进行分类——这是真的吗?我希望不是 - 但如果是,为什么以及如何使用 keras 解决我的问题?

这是整个网络:

model = models.Sequential()
model.add(layers.Conv2D(32, (5, 5), activation='relu',input_shape=(500, 500, 3)))
model.add(BatchNormalization())
model.add(layers.MaxPooling2D((4, 4)))
model.add(layers.Conv2D(64, (5, 5), activation='relu'))
model.add(layers.MaxPooling2D((4, 4)))
model.add(BatchNormalization())
model.add(layers.Conv2D(64, (5, 5), activation='relu'))
model.add(layers.MaxPooling2D((3, 3)))
model.add(BatchNormalization())
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(BatchNormalization())

model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dropout(0.2))
model.add(layers.Dense(52, activation='softmax'))

【问题讨论】:

    标签: keras multiclass-classification


    【解决方案1】:

    我红了好几次,CNN只能分类单类问题

    这是错误的。使用 CNN,您可以训练二进制分类问题、多类问题以及多标签问题。实际上,您正在寻找的是多标签问题。

    多标签分类问题中,您可以使用 [0,1,0,...,1,0,0] 作为目标输出。因此,对于一个输入样本,多个类可能同时为真!在这种情况下,训练有素的网络的输出可能是 [0.01, 0.99, 0.001, ..., 0.89, 0.001, 0.0001]。因此,您可以在一个网络中使用多个独立的二元分类。

    我将链接另一个我更详细回答的非常相似的问题。我已经讨论了您可以使用的特定指标、激活和损失函数:

    multilabel classification

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2020-10-05
      • 2017-06-02
      • 2018-12-15
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多