Cross entropy loss (или кросс-энтропийная потеря) является одной из популярных функций потерь, которая используется в задачах классификации для оценки разницы между предсказанной вероятностью и фактической меткой класса.
Пример кода на Python:
python
import numpy as np
# Выдуманный пример данных для двух классов
predicted_probs = np.array([[0.2, 0.8], [0.6, 0.4], [0.7, 0.3]])
true_labels = np.array([1, 0, 1])
# Преобразование предсказанных вероятностей во вектора со значениями 0 или 1
predicted_labels = np.argmax(predicted_probs, axis=1)
# Расчет кросс-энтропийной потери
epsilon = 1e-15 # для избежания деления на 0
loss = -np.mean(np.log(predicted_probs[np.arange(len(predicted_probs)), true_labels] + epsilon))
print(f"Cross entropy loss: {loss}")
# Расчет градиента потерь для обновления весов модели (пример)
grads = predicted_probs
grads[np.arange(len(grads)), true_labels] -= 1
grads /= len(grads)
print("Gradients:")
print(grads)
В данном примере имеется 3 образца данных, для каждого из которых есть предсказанные вероятности для двух классов (0 и 1) и фактические метки классов. Путем применения функции `np.argmax` к предсказанным вероятностям мы выбираем класс с наивысшей вероятностью в качестве предсказанной метки класса. Затем мы используем формулу кросс-энтропийной потери для вычисления значения потери. В конце приведен пример вычисления градиента потерь для возможного обновления весов модели в процессе обучения.
Таким образом, кросс-энтропийная потеря может быть использована для оценки разницы между предсказанной вероятностью и фактической меткой класса, и её градиенты могут быть использованы для обновления весов модели при обучении.
Cross entropy loss (или кросс-энтропийная потеря) является одной из популярных функций потерь, которая используется в задачах классификации для оценки разницы между предсказанной вероятностью и фактической меткой класса.
Пример кода на Python:
python
import numpy as np
# Выдуманный пример данных для двух классов
predicted_probs = np.array([[0.2, 0.8], [0.6, 0.4], [0.7, 0.3]])
true_labels = np.array([1, 0, 1])
# Преобразование предсказанных вероятностей во вектора со значениями 0 или 1
predicted_labels = np.argmax(predicted_probs, axis=1)
# Расчет кросс-энтропийной потери
epsilon = 1e-15 # для избежания деления на 0
loss = -np.mean(np.log(predicted_probs[np.arange(len(predicted_probs)), true_labels] + epsilon))
print(f"Cross entropy loss: {loss}")
# Расчет градиента потерь для обновления весов модели (пример)
grads = predicted_probs
grads[np.arange(len(grads)), true_labels] -= 1
grads /= len(grads)
print("Gradients:")
print(grads)
В данном примере имеется 3 образца данных, для каждого из которых есть предсказанные вероятности для двух классов (0 и 1) и фактические метки классов. Путем применения функции `np.argmax` к предсказанным вероятностям мы выбираем класс с наивысшей вероятностью в качестве предсказанной метки класса. Затем мы используем формулу кросс-энтропийной потери для вычисления значения потери. В конце приведен пример вычисления градиента потерь для возможного обновления весов модели в процессе обучения.
Таким образом, кросс-энтропийная потеря может быть использована для оценки разницы между предсказанной вероятностью и фактической меткой класса, и её градиенты могут быть использованы для обновления весов модели при обучении.