Keras 序列的多标签分类,如何做?

Keras 序列的多标签分类,如何做?,keras,deep-learning,classification,multilabel-classification,transformer,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]] 现在我

我对深度学习领域相当陌生,尤其是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]。转换上述示例将得到一个3x4x3的数据集和一个3x1x3的标签

我理解的另一件事是最后一层应该是softmax层。这样,如果出现类似于[1,2,3,4]的测试数据,将对其进行软最大化,并计算该序列属于1类或2类或3类的概率

我说得对吗?如果是这样,你能给我一个对这些序列进行分类的过程的解释/示例吗


提前感谢您。

这里有一些您似乎在询问的澄清

这一点令人困惑,所以我删除了它。 如果输入数据具有形状4,则输入张量将具有形状批次大小4。 Softmax是预测最后一层的正确激活 给定您想要的输出,因为您有一个分类问题 具有多个类。这将产生形状批次大小的输出, 3.这些将是每个潜在分类的概率,将所有类别的概率相加为一。例如,如果分类为0类,则单个预测可能类似于[0.9714,0.01127,0.01733]。 批大小不是硬编码到网络的,因此它在model.summary中表示为无。例如,网络的最后一层输出形状可以写入None,3。 除非您有合适的替代方案,否则softmax预测层需要一个分类的熵损失函数。 网络的体系结构仍然取决于您,但您至少需要一条进入和退出的途径。在您标记的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'))

希望有帮助

您的问题看起来很奇怪,似乎您几乎知道输入和输出的表示应该输入谁。同时,你不想知道任何体系结构的工作原理。@Ashwingeted'Sa对不起,让我来编辑这个问题。也许你是对的,我几乎知道如何输入,但我想我还需要一个代码示例。我确实在Keras中尝试了一些例子,但到目前为止,我得到了各种错误,比如张量大小不匹配,等等。因为我实际上知道LSTM是如何工作的,例如理论上,我看到了LSTM或图像分类的工作示例,例如CNN,但不是这样的问题。@Ashwingeted'Sa我的意思是我不需要深入解释模型是如何工作的,但是如果有人想善意地解释以帮助解决问题,我当然很感激,你也可以发布你尝试过的代码和你遇到的错误吗?这样您就可以得到正确的解决方案。@AshWingeted'Sa很好,因为我编写的代码使用了一个非常特定的库,这就是为什么我不把示例放在这里的原因,我还想知道一般的想法,而不是我的特定代码是如何工作的,谢谢您的回答!以您编写的softmax输出为例,如果不使用热编码,这就是输出?或者不管是否使用了一个热编码?这意味着softmax的输出总是设置为标签数量,即词汇表的大小?正确!softmax的输出确实要设置为标签的数量。事实上,最好的做法是将单位数量与标签数量显式链接。例如,Densey_train.shape[1],activation='softmax'如果您需要在某些y列上使用一个热编码,这很好,只需知道它将改变y列的数量,从而改变网络输出的形状。正如您所看到的,让输出层引用列数的可变形状会使预测的形状自动调整!巡航控制:为了清楚起见,如果y的列颜色值为['red'、'green'、'blue'],一个热编码将生成一个新的数据帧,其中列为[is_red、is_green、is_blue],值为[[1,0,0]、[0,1,0]、[0,0,1]]。单位数量
在输出层中,列数组的长度为3;标签的数量。那么,来自这个网络的预测将具有形状batch_size,3,以及上面第三个项目符号中的输出。非常感谢!回答得好。我会留下这几天不作为答案标记,以防有人想提供其他解释,以及。你好!我只是想指出,前几天我拿起它,深入到Keras的具体章节中,第一章让我想起了你,因为它用比我更好的语言涵盖了很多内容。