使用TensorFlow进行多标签分类

我想使用TensorFlow开发一个多标签分类器,我这里指的是存在多个标签,每个标签包含多个类别。为了说明,你可以想象这样的情况:

  • 标签1的类别:有雷雨、下雨、部分下雨、无雨
  • 标签2的类别:晴天、部分多云、多云、非常多云

我想使用神经网络对这两个标签进行分类。目前,我对每一个(标签1,标签2)的类别对使用了不同的类别标签。这意味着我有4 x 4 = 16个不同的标签。

通过训练我的模型,

当前损失

cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1])) # prediction is sofmaxedloss = cross_entropy + regul * schema['regul_ratio'] # regul things is for regularization train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

然而,我认为在这种情况下,多标签训练会更有效。

  • 我的特征将是[n_samples, n_features]
  • 我的标签将是[n_samples, n_classes, 2]

n_samples的[x1, x2, x3, x4 …] # 特征

n_samples的[[0, 0, 0, 1], [0, 0, 1, 0]] # 无雨和多云

如何使用TensorFlow创建一个Softmax概率分布预测器?有没有像这样的多标签问题的实际例子?我的损失张量会是什么样的?


回答:

为什么不让你的网络生成两个不同的输出呢?

网络 -> 预测1和预测2

其中预测1和预测2都是[#,#,#,#],但我下面描述的方法即使它们大小不同也适用。

然后只需运行

loss1 = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction1, labels_1))loss2 = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction2, labels_2))loss = loss1 + loss2

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注