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

Multilabel classification of a sequence, how to do it?

我对深度学习领域尤其是 Keras 还很陌生。这里有一个简单的classification问题,不知道怎么解决。我不明白的是class化的一般过程,比如将输入数据转换为张量、标签等​​

假设我们有三个 classes,1, 2, 3

有一系列 class 需要 class 化为其中一个 class。数据集例如

等等。

这意味着输入数据集将是

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

标签将是

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

现在我确实理解的一件事是对 class 进行单热编码。因为我们有3个class,所以每个1都会变成[1, 0, 0]2会变成[0, 1, 0]3会变成[=24] =].转换上面的示例将得到 3 x 4 x 3 的数据集和 3 x 1 x 3 的标签。

我理解的另一件事是最后一层应该是softmax层。这样如果一个测试数据出来了(比如[1, 2, 3, 4]),它会被softmaxed,然后计算这个序列属于class 1 or 2 or 3的概率。

我说得对吗?如果是这样,你能给我一个explanation/exampleclass化这些序列的过程吗?

提前谢谢你。

以下是您似乎要问的一些说明。

  • 这一点令人困惑,所以我删除了它。
  • 如果输入数据的形状为 (4),则输入张量的形状为 (batch_size, 4)。
  • Softmax 是您预测(最后)层的正确激活 给出你想要的输出,因为你有一个 classification 问题 有多个 classes。这将产生形状的输出 (batch_size, 3).这些将是每个潜在 class 化的概率,所有 classes 的总和为一个。例如,如果 class 化为 class 0,则单个预测可能类似于 [0.9714,0.01127,0.01733].
  • 批量大小不是 hard-coded 网络,因此它在 model.summary() 中表示为 None。例如。网络的 last-layer 输出形状可以写成 (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'))

希望对您有所帮助!