Функция сигмоидной кросс-энтропии TensorFlow

Опубликовано: 19 Февраля, 2023

TensorFlow — это платформа машинного обучения с открытым исходным кодом, используемая для разработки моделей. При разработке моделей мы используем множество функций для проверки точности и потерь модели. Чтобы модель была в хорошем состоянии, расчет убытков является обязательным, поскольку убыток действует как штраф. Чем ниже потери, тем лучше будет работать модель.

Существует много видов функций потерь. Одной из таких функций является сигмовидная кросс-энтропийная функция TensorFlow. Сигмовидная функция или логистическая функция — это функция, которая генерирует S-образную кривую. Эта функция используется для прогнозирования вероятностей, поэтому диапазон этой функции лежит между 0 и 1.

Перекрестная потеря энтропии — это разница между фактическим и ожидаемым выходом. Это также известно как функция потери журнала и является одним из наиболее ценных методов в области машинного обучения.

sigmoid_cross_entropy_with_logits

Это функция Tensorflow версии 2, которая используется для мягких двоичных меток. Мягкая метка — это та, которая имеет меру вероятности. Эту функцию также можно использовать для жестких меток. Он измеряет вероятность ошибки в задачах, которые имеют два результата.

Python3




import tensorflow as tf
  
# type list
input = [1., 2., 3., 4., 5.89]
output = [2, 1, 3, 4, 5.9]
  
# conversion to tensor
# input means actual
input = tf.convert_to_tensor(input,
                             dtype=tf.float32)
# Output means predicted
output = tf.convert_to_tensor(output,
                              dtype=tf.float32)
  
# calculating the deviation between
# actual and predicted values
x = tf.nn.sigmoid_cross_entropy_with_logits(
    labels=output, logits=input).numpy()
  
print(x)

Выход:

[ -0.68673825   0.12692802  -5.9514127  -11.98185    -28.858236  ]

Мы также можем вычислить сигмовидную кросс-энтропийную потерю между двумя четырехмерными тензорами, используя функцию sigmoid_cross_entropy_with_logits() .

Python3




import tensorflow as tf
  
# type list
input = [[[[9], [8]], [[7], [5]]]]
output = [[[[1], [2]], [[3], [4]]]]
  
# conversion to tensor
input = tf.convert_to_tensor(input,
                             dtype=tf.float32)
output = tf.convert_to_tensor(output,
                              dtype=tf.float32)
  
# calculating deviation in actual and predicted values
x = tf.nn.sigmoid_cross_entropy_with_logits(
    labels=output, logits=input).numpy()
  
print(x)

Выход:

[[[[ 1.2340219e-04]
   [-7.9996648e+00]]
   
  [[-1.3999088e+01]
   [-1.4993284e+01]]]]

Сигмовидная перекрестная энтропия

Это функция, поддерживаемая Tensorflow версии 2, которая тесно интегрирована с Keras. Он в основном вычисляет потери между фактическим выходом и прогнозируемым выходом. Эту функцию можно использовать для бинарных результатов. Синтаксис

Предположим, есть два тензора y_pred и y_true . Формула потерь рассчитывается как

loss = -(y_true log(sigmoid(y_pred)) + (1 - y_true) log(1 - sigmoid(y_pred)))

Однако эта функция не поддерживается ни в одной из версий Tensorflow в Python.

Python3




import tensorflow as tf
from tensorflow.compat.v1.losses
import sigmoid_cross_entropy
  
logits = tf.constant([[0, 1],
                      [1, 5],
                      [2, -4]], dtype=tf.float32)
y_true = tf.constant([[1, 1],
                      [1, 0],
                      [2, 0]], dtype=tf.float32)
  
loss = sigmoid_cross_entropy(multi_class_labels=y_true,
                             logits=logits).numpy()
  
print(loss)

Выход:

0.74524397

В приведенном выше коде логиты в основном представляют собой входной тензор, а y_true — это метка мультикласса. Затем вызывается функция потерь, которая вычисляет потери. Поскольку вывод также является тензором, он преобразуется в тензор.

Сравнение трех сигмовидных кросс-энтропийных функций

Теперь, когда мы видели несколько версий кросс-энтропийной функции, иногда становится сложно вспомнить, какая функция подходит для какой задачи. Итак, давайте попробуем обобщить это в табличном формате.

sigmoid_cross_entropy_with_logits SigmoidCrossEntropyLoss sigmoid_cross_entropy
Эта функция используется для мягких двоичных меток. Эта функция в основном вычисляет разницу между фактическим и прогнозируемым выходом. Эта функция используется для многоклассовых меток.
Он поддерживается в Tensorflow версии 2. В настоящее время эта функция не поддерживается ни в одной из версий Tensorflow. Эта функция совместима с Tensorflow версии 1.
Он измеряет поэлементную классификацию ошибок вероятности, поэтому возвращает массив поэлементно. Он возвращает одно значение. Он возвращает одно значение.