TensorFlow很棒,我们已经将它用于图像分类或推荐系统。我们使用softmax
和cross entropy
作为损失函数。如果我们只有一种类型的标签,它就有效。例如,我们在MNIST数据集中只选择0到9之间的一个数字。
现在我们有性别和年龄的特征。我们为每个示例都有一个热门编码,例如[1,0,1,0,0,0,0]。前两个标签代表性别,后五个标签代表年龄。每个示例都有两个1,其他示例应为0。
现在我们的代码看起来像这样。
logits = inference(batch_features)
softmax = tf.nn.softmax(logits)
但我发现它" softmax"所有标签总和为2.但我所期望的是前两个总和为1,最后五个总和为1.不确定如何在TensorFlow中实现,因为这7(2 + 5)个功能看起来是一样的
答案 0 :(得分:1)
您将性别和年龄记录连接在一起。
您想要边际预测。
您需要将logits(tf.slice
)拆分为两个数组并分别对其进行softmax。
请记住,这只会给你边际概率。 它无法代表“老人或年轻女人”,因为这并不是因素分析。
所以你可能想要进行联合预测。 5x2
个类而不是5+2
个类。显然,这个更强大的模型更容易过度拟合。
如果每个类别中有很多类,则可以通过将多个边际预测加在一起来构建具有联合矩阵的低秩因子分解的中间模型。这会提供Nxr+Mxr
个条目,而不是N+M
或NxM
。