如何在具有张量流的复杂神经一维网络中执行多类分类?

时间:2017-04-03 16:55:00

标签: python tensorflow deep-learning conv-neural-network

我有以下格式的培训文件:

  

0.086,0.4343,0.4212,....,class1

     

0.086,0.4343,0.4212,....,class2

     

0.086,0.4343,0.4212,....,class5

其中,每行是一维向量,最后一列是该向量表示的类。我们可以看到一个向量重复多次,因为它有几个类。

读取这些数据是由python" Panda"图书馆。 也就是说,我需要使用卷积网络进行培训。我已经研究了一些网站并没有取得多大成功,也不知道网络是否需要为“多级”网络做好准备。形式。

我想知道是否有人知道具有张量流的多级1D分类方法或者可以引导我一个例子,因为在训练网络之后,我需要传递一个模板(这将是一个矢量)和network output me给出每个班级的正确百分比。

谢谢!

2 个答案:

答案 0 :(得分:3)

这是一个非常简单的设置。

首先要知道的是:您的标签需要采用“一种热编码”格式。这意味着,如果您有5个类,则类1由向量[1,0,0,0,0]表示,类2由向量[0,1,0,0,0]表示,依此类推。这是标准的。

其次,你提到你想要多类分类。但你给出的例子是单类分类。所以这可能是一个术语澄清。当你说多类分类时,它意味着你想要一个样本属于多个类,假设你的第一个样本是第2类和第3类的一部分。但是在你的情况下它看起来并不像那样。因此,对于具有5个类的单类分类,您希望使用交叉熵作为损失函数。

您可以按照cifar 10教程进行操作。这是相同的设置,其中每个图像是10个类中的1个。

https://www.tensorflow.org/tutorials/deep_cnn

您提到您的数据是1维的。这很容易实现,只需将其视为cifar 10二维数据,其中一个维度设置为1.您不需要更改任何其他代码。在cifar 10示例中,您的图像将是32x32,在您的数据中,您的图像可能是32x1或10x1,无论您决定使用哪种内核(尝试不同的内核大小!)。同样的变化将适用于步幅。只需将您的问题视为具有平面第二维的2D问题,就像馅饼一样简单。

答案 1 :(得分:1)

根据我的理解,你有一个多标签问题。意味着样本可以属于多个类

查看sigmoid_cross_entropy_with_logits并将其用作您的损失函数。

对于此丢失函数,您不需要使用一个热编码或为其所属的每个标签重复您的样本。只需使用标签向量并将其设置为样本所属的类。