Не могу понять функции потерь для модели GAN, используемой в документации тензорного потока - PullRequest
1 голос
/ 28 апреля 2020

Я не могу понять функцию потерь в модели GAN в документации по тензорному потоку. Зачем использовать tf.ones_like() для real_loss и tf.zeros_like() для поддельных выходов ??

def discriminator_loss(real_output,fake_output):
  real_loss = cross_entropy(tf.ones_like(real_output),real_output)
  fake_loss = cross_entropy(tf.zeros_like(fake_output),fake_output)
  total_loss = real_loss + fake_loss
  return total_loss

1 Ответ

1 голос
/ 28 апреля 2020

У нас есть следующие функции потерь, которые нам необходимо минимизировать (или min-max, если вы так называете sh).

  1. generator_loss = -log ( Генерируемые метки)
  2. criminator_loss = -log (real_labels) - журнал (1 - генерируемые метки)

, где real_output = настоящие метки и fake_output = генерируемые метки.

Теперь, имея это в виду, давайте посмотрим, что представляет собой фрагмент кода в документации TensorFlow:

  • real_loss = cross_entropy(tf.ones_like(real_output), real_output) оценивается как
    • real_loss = -1 * log (real_output) - ( 1 - 1) * log (1 - real_output) = -log (real_output)
  • fake_loss = cross_entropy(tf.zeros_like(fake_output),fake_output) оценивается как
    • fake_loss = -0 * log (fake_output) - (1 - 0) * log (1 - fake_output) = -log (1 - fake_output)
  • total_loss = real_loss + fake_loss оценивается как
    • total_loss = -log (real_output) - log (1 - fake_output)

Очевидно, мы получаем функцию потерь для дискриминатора в мини-игре, которую мы хотим минимизировать.

...