一个序列的多标签分类,怎么办?

时间:2019-05-22 11:51:05

标签: keras deep-learning classification multilabel-classification transformer

对于深度学习领域,我尤其是新手,尤其是Keras。在这里,我有一个简单的分类问题,我不知道如何解决。我不了解分类的一般过程,例如将输入数据转换为张量,标签等。

假设我们有1, 2, 3这三个类。

有一系列类别需要分类为这些类别之一。数据集例如

  • 序列1, 1, 1, 2被标记为2
  • 序列2, 1, 3, 3被标记为1
  • 序列3, 1, 2, 1被标记为3

以此类推。

这意味着输入数据集将是

[[1, 1, 1, 2],
 [2, 1, 3, 3],
 [3, 1, 2, 1]]

,标签将为

[[2],
 [1],
 [3]]

现在,我确实了解的一件事是对类进行一次热编码。因为我们有三个类,所以每个1都将转换为[1, 0, 0]2将是[0, 1, 0],而3将是[0, 0, 1]。转换上面的示例将得到3 x 4 x 3的数据集,以及3 x 1 x 3的标签。

我了解的另一件事是,最后一层应该是softmax层。这样,如果出现测试数据(例如[1, 2, 3, 4]),它将被软最大化并计算出属于1类,2类或3类的序列的概率。

我是对的吗?如果是这样,您能给我解释/举例说明这些序列的分类过程吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

以下是您似乎要问的一些澄清。

  • 这一点令人困惑,所以我删除了它。
  • 如果您输入的数据具有形状(4),那么您的输入张量将具有形状(batch_size,4)。
  • Softmax是您的预测(最后)层的正确激活 给定您想要的输出,因为您有分类问题 有多个类别。这将产生形状为(batch_size, 3)。这些将是每种潜在分类的概率,所有类的总和为一。例如,如果分类为类0,则单个预测可能类似于[0.9714,0.01127,0.01733]
  • 批处理大小未硬编码到网络,因此在model.summary()中将其表示为None。例如。网络的最后一层输出形状可以写成(None, 3)
  • 除非有合适的替代方法,否则softmax预测层需要categorical_crossentropy损失函数。
  • 网络架构仍由您决定,但您至少需要一种进出的方式。在Keras(已标记)中,有几种方法可以做到这一点。以下是一些示例:

Keras顺序示例

model = Sequential()
model.add(InputLayer(input_shape=(4,))) # sequence of length four
model.add(Dense(3, activation='softmax')) # three possible classes

具有Keras功能的示例

input_tensor = Input(shape=(4,))
x = Dense(3, activation='softmax')(input_tensor)
model = Model(input_tensor, x)

在第一功能层(顺序或功能)中包括输入张量形状的示例:

model = Sequential()
model.add(Dense(666, activation='relu', input_shape=(4,)))
model.add(Dense(3, activation='softmax'))

希望有帮助!