我正在尝试构建一个自定义损失函数,它将根据groundtruth
将不同的函数应用于张量的不同部分。 .
例如说 groundtruth
是:
[0 1 1 0]
我要申请log(n)
到输出张量的索引 1, 2(即真实值中值为 1 的索引),并应用 log(n-1)
其余的。
我怎样才能实现它?
最佳答案
您可以创建两个蒙版。
第一个函数屏蔽了零,因此您可以将其应用于第一个损失函数,在该函数中仅将
log(n)
应用于那些 1 的值。第二个掩码会屏蔽掉那些,因此您可以将其应用于第二个损失函数,在该函数中将
log(n-1)
应用于那些 0 值。
类似于:
input = tf.constant([0, 1, 1, 0], tf.float32)
mask1 = tf.cast(tf.equal(input, 1.0), tf.float32)
loss1 = tf.log(input) * mask1
mask2 = tf.cast(tf.equal(input, 0.0), tf.float32)
loss2 = tf.log(input - 1) * mask2
overall_loss = tf.add(loss1, loss2)
关于python - 对keras中的部分张量应用不同的损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942351/