Функции потерь в PyTorch

Часть 0: Функция потерь

  • Функция потерь должна возвращать высокие значения для плохих прогнозов и низкие значения для хороших прогнозов.

1.1 Определение

Бинарная кросс-энтропия определяется как

Бинарная кросс-энтропия

где y - метка ( 1 для зеленых точек и 0 для красных точек), а p (y) - прогнозируемая вероятность того, что точка станет зеленой для всех N точек.

Профиль функции потери журнала выглядит так:

1.2 Связь с энтропией и кросс-энтропией

Энтропия
Перекрестная энтропия
Перекрестная энтропия (по пунктам)

Если мы каким-то чудом сопоставим p (y) с q (y) идеально , вычисленные значения перекрестной энтропии и энтропии также будут совпадать .

Разница между кросс-энтропией и энтропией - это дивергенция Кульбака-Лейблера:

KL Дивергенция

1.3 Реализация

Далее мы реализуем двоичную кросс-энтропию как в sklearn, так и в pytorch.

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss
import numpy as np
x = np.array([-2.2, -1.4, -.8, .2, .4, .8, 1.2, 2.2, 2.9, 4.6])
y = np.array([0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])
logr = LogisticRegression(solver='lbfgs')
logr.fit(x.reshape(-1, 1), y)
y_pred = logr.predict_proba(x.reshape(-1, 1))[:, 1].ravel()
loss = log_loss(y, y_pred)
print('x = {}'.format(x))
print('y = {}'.format(y))
print('p(y) = {}'.format(np.round(y_pred, 2)))
print('Log Loss / Cross Entropy = {:.4f}'.format(loss))
import torch.nn as nn
import torch
loss = nn.BCELoss()
a = torch.from_numpy(y_pred)
b = torch.from_numpy(y)
output = loss(a, b)
print('Log Loss from pytorch = {:.4f}'.format(output))

import torch.nn as nn
import torch
loss = nn.BCELoss()
m = nn.Sigmoid()
input = torch.randn(3)
y = np.array([0.9])
y_pred = y
a = torch.from_numpy(y_pred)
b = torch.from_numpy(y)
output = loss(a, b)
print(output)

-0.9*np.log(0.9)-0.1*np.log(0.1)

1.4 Ссылка

  • Понимание двоичной кросс-энтропии / потери журнала: визуальное объяснение

2.1 Основная идея

Чтобы вычислить, насколько похожи два вектора, вычислите их скалярное произведение! Это также основная идея совместной фильтрации.

S (y) - это результат вашей функции softmax. L - чистая правда!

2.2 Реализация

import torch.nn as nn
import torch
import torch.nn.functional as F

class CrossEntropyLoss2d(nn.Module):
    
    def __init__(self):
        super(CrossEntropyLoss2d, self).__init__()
        self.nll_loss = nn.NLLLoss() #nn.NLLLoss2d()
   def forward(self, inputs, targets):
        # input: (n, c, h, w), target: (n, h, w)
        return self.nll_loss(F.log_softmax(inputs), targets)
if __name__ == "__main__":
    import torch
    x = torch.Tensor([[[1,2,1],
                       [2,3,1],
                       [0, 1,1]],
                      [[0, 1, 3],
                       [2, 3, 1],
                       [0, 0, 1]],
                      [[0,1,3],
                       [2,3,1],
                       [0, 0,1]]])
    x = x.view(1, 3, 3, 3)
    print(x.shape)
    import torch.nn as nn
    soft = nn.LogSoftmax(dim=1)(x)
    print(soft.shape)
    y = torch.LongTensor([[2,0,1],[0,0,1],[1,1,1]])
    y = y.view(1,3,3)
    loss = nn.NLLLoss2d()
    out = loss(soft,y)
    print(out)
    a_fun = CrossEntropyLoss2d()
    print(a_fun(x,y))

Suggested posts

Функции потерь и что они делают за экраном.

Функции потерь и что они делают за экраном.

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

Бинарная кросс-энтропийная потеря - частный случай категориальной кросс-энтропийной потери

Пошаговая реализация и ее градиенты на примере

Бинарная кросс-энтропийная потеря - частный случай категориальной кросс-энтропийной потери

В этом посте мы поговорим о потере бинарной кросс-энтропии и о том, что это значит. Мы также увидим, как вычислить градиенты? А как это частный случай категориальной кросс-энтропийной потери? Вы можете скачать Jupyter Notebook здесь.

Related posts

Революция на рабочем месте: ведущие эксперты обсуждают гибридную и удаленную работу

Революция на рабочем месте: ведущие эксперты обсуждают гибридную и удаленную работу

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

Опасные разговоры

Опасные разговоры

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

Убийство Джордана Нили и проблема «патриотического» расизма

Могут ли США сделать важный шаг и не приравнивать расистское поведение к тому, чтобы быть хорошим американцем?

Убийство Джордана Нили и проблема «патриотического» расизма

[Предупреждение: в этом эссе есть снимки экрана, на которых люди восхваляют убийцу Джордана Нили.] Сотрудники правоохранительных органов наконец — и, возможно, неохотно — предъявили обвинение в этом убийстве Дэниелу Пенни, человеку, который душил Джордана Нили, пока тот не умер.

3 проверенных способа улучшить свои навыки письма

Преимущества письма и стратегии, которые помогут вам в этом

3 проверенных способа улучшить свои навыки письма

В 2022 году, с выпуском GPT-3, навыки письма, кажется, стали менее важными. С помощью ИИ люди с плохим письмом также могут генерировать качественный персонал.