我正在研究一个多任务学习问题,我需要解决3个不同的任务:
p1
我有一个大小为v1
的标签向量s1
,其中每个正确的标签都有1,否则为0。p2
我有一个大小为v2
的标签向量s2
,其中每个正确的标签都有1,否则为0。p3
,其中我有一个大小为v3
的标签向量s3
,其中我有1表示正确的标签,否则为0。我遇到的问题是,对于每个示例,我可能会遇到一个或两个未定义标签的问题。例如,我可以:
v1 = [0,1,1,0]
v2 = [1,0,1,0,0,1]
v3 = [0,0,0]
缺少v3
中的标签。我的问题是如何阻止backprop解决丢失标签的问题,以便在丢失数据时不更新网络的权重?
现在我的代码看起来像这样:
target1 = tf.cast(labels['1'], tf.float32)
loss1 = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(
labels=target1, logits=logits1))
target2 = tf.cast(labels['2'], tf.float32)
loss2 = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(
labels=target2, logits=logits2))
target3 = tf.cast(labels['3'], tf.float32)
loss3 = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(
labels=target3, logits=logits3))
loss = loss1 + loss2 + loss3
train_op = tf.train.AdamOptimizer().minimize(
loss, global_step=global_step)
我的想法是将每个示例的权重设置为0,但缺少标签,但我真的不知道它是否是一个可行的解决方案,特别是在我得到一个只有缺少标签的完整批次的情况下一个问题。
我可以将缺少值的向量填充到-1或其他任何东西,如果这可以帮助!
非常感谢!
答案 0 :(得分:0)
这取决于您拥有的网络类型,以及您是否进行批量培训或个人培训。我假设您的内部网络是三个独立的
如果您的训练是个人的,那么将权重设置为零将起作用。通过将BP(反向传播)迭代的学习速率设置为0,可以获得相同的效果。
另一种可能性是检查第一层的输入向量;如果它为零,则根本不进入该阶段的训练;一个简单的继续应该带您进入下一个输入迭代。