Применить другую функцию потерь к части тензора в кератах - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь создать собственную функцию потерь, где она будет применять разные функции к разным частям тензора на основе groundtruth.

Скажем, например, groundtruth это:

[0 1 1 0]

Я хочу применить log(n) к индексу 1, 2 (это те, чье значение равно 1 в истинности основания) выходного тензора, и применить log(n-1) к остальным.

Как я смогу этого добиться?

1 Ответ

1 голос
/ 09 июля 2019

Вы можете создать две маски.

  • Первый маскирует нули, поэтому вы можете применить его к своей первой функции потерь, в которой вы применяете 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...