使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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