Python 每个数据点具有多个标签的案例分类

Python 每个数据点具有多个标签的案例分类,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,在机器学习的分类问题中,通常我们对单个数据点使用单个标签。如何为单个数据点使用多个标签 例如,假设一个字符识别问题。作为字母单个图像的标签,我们有字母和字体系列的编码值。然后,每个数据点有两个标签 我们如何为这一点建立keras深度学习模型?与单个标记的问题相比,应该更改哪些超参数?简而言之,让模型输出两个预测 ... previous-to-last layer / \ label_1 label_2 然后你可以做total_loss=loss_1(

在机器学习的分类问题中,通常我们对单个数据点使用单个标签。如何为单个数据点使用多个标签

例如,假设一个字符识别问题。作为字母单个图像的标签,我们有字母和字体系列的编码值。然后,每个数据点有两个标签


我们如何为这一点建立keras深度学习模型?与单个标记的问题相比,应该更改哪些超参数?

简而言之,让模型输出两个预测

        ...
previous-to-last layer
     /      \
label_1    label_2
然后你可以做
total_loss=loss_1(label_1)+loss_2(label_2)
。 您可以选择
loss_1
loss_2
。 然后通过网络反向传播
总损耗
,以微调权重


更深入的示例:。

与标准的多类任务相比,您只需将激活函数更改为
'sigmoid'

import tensorflow as tf
from tensorflow.keras.layers import Dense
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

y = tf.one_hot(y, depth=3).numpy()

y[:, 0] = 1.

ds = tf.data.Dataset.from_tensor_slices((X, y)).shuffle(25).batch(8)

model = tf.keras.Sequential([
    Dense(16, activation='relu'),
    Dense(32, activation='relu'),
    Dense(3, activation='sigmoid')])

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

history = model.fit(ds, epochs=25)

这是一个已经建立的子字段,称为多标签分类。损失是否也需要更改为二进制交叉熵?我倾向于说这是没有必要的,因为我达到了100%的准确度。我可能遗漏了一些东西,但这是一个需要调用的危险标准:)我说的不是多类的,而是多标签的。现在,它是有效的吗?这里没有人谈到多类
Epoch 25/25
 1/19 [>.............................] - ETA: 0s - loss: 0.0418 - acc: 1.0000
19/19 [==============================] - 0s 2ms/step - loss: 1.3129 - acc: 1.0000