Machine learning Tensorflow中损失函数的掩模样本

Machine learning Tensorflow中损失函数的掩模样本,machine-learning,tensorflow,google-cloud-ml-engine,Machine Learning,Tensorflow,Google Cloud Ml Engine,我有一个GCMLE实验,在一个模型中有三个学习目标(考虑任务a、任务B和任务C)()。所有3个目标的输入都是相同的(阅读正文),我想给出三个单独的预测。然而,对于任务C,我想适当地屏蔽一些 批次中的示例(每个批次中约20%)。通过简单地将我想要屏蔽的样本加权为零,这是正确的方法吗?考虑这个损失函数 lossA = tf.reduce_mean(tf.losses.sparse_softmax_cross_entropy( labels=labelsA, logits=lo

我有一个GCMLE实验,在一个
模型中有三个学习目标(考虑任务a、任务B和任务C)(
)。所有3个目标的输入都是相同的(阅读正文),我想给出三个单独的预测。然而,对于任务C,我想适当地屏蔽一些 批次中的示例(每个批次中约20%)。通过简单地将我想要屏蔽的样本加权为零,这是正确的方法吗?考虑这个损失函数

lossA = tf.reduce_mean(tf.losses.sparse_softmax_cross_entropy(
            labels=labelsA, logits=logitsA))

lossB = tf.reduce_mean(tf.losses.sparse_softmax_cross_entropy(
            labels=labelsB, logits=logitsB))

mask_weights = tf.to_float(tf.equal(x, y)) # returns 1 if x equals y, returns 0 if x != y
lossC = tf.reduce_mean(tf.losses.sparse_softmax_cross_entropy(
            labels=labelsC, logits=logitsC, weights=mask_weights))

loss = lossA + lossB + lossC
基本上,我试图做的是屏蔽批次中的任何样本,其中x!=y,这样就不会基于这些示例对模型进行梯度更新,因为它们与taskC相关。这是否接近预期效果?有没有更好的方法来实现期望的行为


我意识到我可以把它们分成不同的实验,但是我希望能够有一个共享的嵌入,还有一个可以上传到GCMLE预测服务中的图表。

总结一下评论——如帖子所述,对损失函数应用二进制掩码似乎是掩盖损失函数的合适方法。然而,减少C的有效批量可能会产生其他意外后果,这会阻碍这种方法。

我认为将这三项任务结合起来不是一个好主意。我认为您假设所有任务都将同时优化。但是,lossc函数更像是损失a上的正则化项。因此,如果损失合理,你将得到最好的损失。@LakLakshmanan谢谢你的回复!我实际上认为这种正则化是我想要尝试的行为。我被这篇博文所启发:所以我想介绍一些辅助任务,并共同训练它们。在这种情况下,您是否会建议以不同的方式在TF中实现此功能?我知道Keras内置了多任务学习:我已经看到了我想用TF复制的好结果。@Lakshmanan,不管我如何结合损失,将lossC的权重传递为零是否会有效屏蔽这些样本,从而导致任何梯度更新,或者您是否会建议在自定义损失函数中单独屏蔽样本?多任务学习的有趣概述!谢谢分享。您的问题是,在您的情况下,损失c的有效批量现在较低。渐变更新始终适用于所有权重,但它们将重点关注损失a和损失b。是的,应用二进制掩码是最好的方法。例如,这就是tf.layers.dropout的实现方式。