【问题标题】:How Can I Implement a Multiclass Multilabel Classification in Keras如何在 Keras 中实现多类多标签分类
【发布时间】:2020-10-26 01:06:18
【问题描述】:

假设我有如下一组输入输出:

input1  : [0 1 1 1 0 ... 1]
output1 : [1 2 2 3 ... 3 3 1 2 2]
...

输入始终为 0 或 1,输出始终为 1 或 2 或 3

如何在 keras 中创建适合这些输入输出的神经网络?

checkpoint_path = 'p-multilable.h5' 
checkpoint = keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, mode='max', monitor='acc', verbose=0, save_best_only=True)
model = keras.models.Sequential([
        keras.layers.Dense(1000,activation='relu', input_shape=X_train.shape[1:]),
        keras.layers.Dense(300,),
        keras.layers.Dense(300,),
        keras.layers.Dense(53)]) 


model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.fit(X_train, y_train, batch_size=100, epochs=1000, validation_data=(x_val, y_val), callbacks=[checkpoint])

我尝试将输出标准化为 0 0.5 1,但没有帮助。

我尝试了各种损失函数

我尝试定义自定义损失函数

我尝试了很多网络架构

在大多数情况下,它的 acc 约为 0.09

理论上它只不过是二元集,应该不难,但我找不到合适的方法

【问题讨论】:

    标签: keras neural-network multilabel-classification multiclass-classification


    【解决方案1】:

    对于您的最后一个分类层,您应该给它一个softmax 激活。此激活用于分类。不过,它可能需要您对输出进行一次热编码。

    【讨论】:

    • softmax 激活可以处理多标签分类吗?
    • 多标签是什么意思?
    • 根据多标签中的示例,给定输入有多个非零输出。它与一个热编码相反
    【解决方案2】:

    回答我自己的问题: 似乎有两种方法可以解决这个问题:

    1- 丑陋的方法:

    每个数字使用两个输出,所以 1 将变为 01,2 变为 10 和 3 变为 11,对于 00,您可以将其用于上述任何一项,甚至可以计算精度

    2- 不那么丑的方法:

    对每个输出使用三个 One Hot Encoded,因此 1 变为 001,2 变为 010 和3 变为 100

    您也可以使用 2D [x][3] 输入,以便获得 2D 输出 [y][3] 但似乎没有必要 p>

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 2020-12-19
      • 2019-07-10
      • 2019-02-26
      • 2020-06-26
      • 2019-05-21
      • 2017-10-25
      • 1970-01-01
      相关资源
      最近更新 更多