将不同的损失函数应用于角膜的部分张量

时间:2019-07-08 20:45:18

标签: python tensorflow keras

我正在尝试构建自定义损失函数,它将基于groundtruth将不同的函数应用于张量的不同部分。

例如groundtruth是:

[0 1 1 0]

我想将log(n)应用于输出张量的索引1、2(在实际中值为1的索引),并将log(n-1)应用于其余张量。

我将如何实现它?

1 个答案:

答案 0 :(得分: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)