如何在Keras中实现多类多标签分类

如何在Keras中实现多类多标签分类,keras,neural-network,multilabel-classification,multiclass-classification,Keras,Neural Network,Multilabel Classification,Multiclass Classification,假设我有一组输入输出,如下所示: 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'

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

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.5 1,但没有效果

我尝试了各种损失函数

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

我尝试了许多网络架构

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


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

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

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

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

1-丑陋的方法:

对每个数字使用两个输出,因此1将变为012将变为103将变为11,对于00,您可以将其用于上述任何一项,甚至可以计算精度

2-不那么难看的方法:

对每个输出使用三个一个热编码,使1变为0012变为0103变为100

您也可以使用2D[x][3]输入,以便获得2D输出[y][3],但似乎没有必要回答我自己的问题: 似乎有两种方法可以克服这个问题:

1-丑陋的方法:

对每个数字使用两个输出,因此1将变为012将变为103将变为11,对于00,您可以将其用于上述任何一项,甚至可以计算精度

2-不那么难看的方法:

对每个输出使用三个一个热编码,使1变为0012变为0103变为100


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

softmax激活是否可以处理多标签分类?多标签是什么意思?根据多标签中的示例,给定输入有多个非零输出。它与一个热编码器相反。softmax激活可以处理多标签分类吗?你说的多标签是什么意思?根据多标签中的示例,给定输入有多个非零输出。这是一个热编码的反面