Сглаживание меток для двоичной перекрестной энтропии в tensorflow

#tensorflow #generative-adversarial-network

#tensorflow #порождающая-состязательная-сеть

Вопрос:

Я использую следующую функцию для сглаживания меток в tensorflow.

 tf.keras.losses.BinaryCrossentropy(from_logits=False, label_smoothing=0, 
       reduction=losses_utils.ReductionV2.AUTO, name='binary_crossentropy')
  

Если я назначу label_smoothing = 0.1, означает ли это, что он будет генерировать случайные числа от 0 до 0.1 вместо жесткой метки 0 для поддельных изображений и от 0.9 до 1 вместо 1 для реальных изображений? Я пытаюсь стабилизировать свое генеративное состязательное сетевое обучение. Спасибо.

Ответ №1:

label_smoothing = 0,1, y_true = 0,95, y_false = 0,05

label_smoothing = 1.0 , y_true = 0.5, y_false = 0.5

   label_smoothing = ops.convert_to_tensor_v2(label_smoothing, dtype=K.floatx())

  def _smooth_labels():
    return y_true * (1.0 - label_smoothing)   0.5 * label_smoothing

  y_true = smart_cond.smart_cond(label_smoothing,
                                 _smooth_labels, lambda: y_true)
  return K.mean(
      K.binary_crossentropy(y_true, y_pred, from_logits=from_logits), axis=-1)
  

https://github.com/tensorflow/tensorflow/blob/fcc4b966f1265f466e82617020af93670141b009/tensorflow/python/keras/losses.py#L1573