Бинарная перекрестная энтропия создает норму, которая вычисляет двоичную перекрестную энтропию между целевыми вероятностями и входными вероятностями.

Синтаксис:

torch.nn.BCELoss(weight=None,size_average=None,reduce=None,reduction='mean)

Параметры:

  1. weight перерасчетный вес присваивается потере каждого элемента.
  2. size_average: потери усредняются по каждому элементу потерь в пакете.
  3. weight: потери представляют собой средние значения наблюдений для каждой мини-партии в зависимости от size_average.
  4. reduction указывает сокращение, примененное к выходным данным: «нет», «среднее», «сумма».
    • «Нет» определяется как сокращение не будет применяться.
    • «Среднее» определяется как сумма выходных данных, разделенная на количество элементов в выходных данных.
    • «Сумма» определяется, как данный вывод будет суммироваться.
Содержание

Пример

В этом разделе мы узнаем, как реализовать двоичную кросс-энтропию с помощью примера в PyTorch.

Создается норма, которая вычисляет двоичную перекрестную энтропию между целевой и входной вероятностями. Он также используется для расчета погрешности реконструкции.

Код:

В следующем коде мы импортируем модуль факела, из которого мы сможем вычислить двоичную перекрестную энтропию.

  • x = nn.Sigmoid() используется для обеспечения того, чтобы выходные данные устройства находились в диапазоне от 0 до 1.
  • loss = nn.BCELoss() используется для расчета потерь двоичной перекрестной энтропии.
  • input_prob = torch.randn(4, require_grad=True) используется для расчета входной вероятности.
  • target_prob = torch.empty(4).random_(3) используется для расчета целевой вероятности.
  • output_prob = loss(x(input_prob), target_prob) используется для получения выходной вероятности.
  • print(output_prob) используется для печати выходной вероятности на экране.
import torch
import torch.nn as nn
x = nn.Sigmoid()
loss = nn.BCELoss()
input_prob = torch.randn(4, requires_grad=True)
target_prob = torch.empty(4).random_(3)
output_prob = loss(x(input_prob), target_prob)
output_prob.backward()
print(output_prob)

Выход:

После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что значение двоичной перекрестной энтропии выводится на экран.

Пример двоичной кросс-энтропии PyTorch

Двоичная перекрестная энтропия с логитами

Двоичная перекрестная энтропия противопоставляет каждую прогнозируемую вероятность фактическому результату, который может быть 0 или 1.

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

Код:

В следующем коде мы импортируем модуль torch, из которого мы сможем вычислить двоичную перекрестную энтропию с помощью логитов.

  • Bceloss = nn.BCEWithLogitsLoss() используется для расчета логит-потери двоичной перекрестной энтропии.
  • inp_var = torch.randn(7, require_grad=True) используется в качестве входной переменной.
  • tar_var = torch.empty(7).random_(6) используется в качестве целевой переменной.
  • out_var = Bceloss(inp_var, tar_var) используется для вычисления выходной переменной.
  • print(out_var) используется для печати выходной переменной.
import torch
import torch.nn as nn
Bceloss = nn.BCEWithLogitsLoss()
inp_var = torch.randn(7, requires_grad=True)
tar_var = torch.empty(7).random_(6)
out_var = Bceloss(inp_var, tar_var)
out_var.backward()
print(out_var)

Выход:

В следующем выводе мы видим, что двоичная перекрестная энтропия PyTorch со значением логитов выводится на экран.

Бинарная перекрестная энтропия PyTorch с логитами

Двоичный вес перекрестной энтропии

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

Код:

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

  • critrion = nn.BCEWithLogitsLoss(pos_weight=poswight) используется для расчета двоичной перекрестной энтропии.
  • loss = critrion(a, b) используется для расчета потерь.
  • вес = torch.ones_like(lossrw) используется для генерации веса.
  • critrionrw_sig = nn.BCELoss(reduction=’none’) используется для создания необработанной сигмоиды критерия.
  • lossrw_sig = critrionrw_sig(torch.sigmoid(a), b) используется для расчета необработанной сигмоиды потерь.
  • print(loss – lossrw) используется для печати значения потерь на экране.
import torch
import torch.nn as nn
for x in range(70):
    poswight = torch.randint(1, 100,(1,)).float()
    
    critrion = nn.BCEWithLogitsLoss(pos_weight=poswight)
    a = torch.randn(15, 3, requires_grad=True)
    b = torch.randint(0, 4,(15, 3)).float()
    
    loss = critrion(a, b)
    
    critrionrw = nn.BCEWithLogitsLoss(reduction='none')
    lossrw = critrionrw(a, b)
    weight = torch.ones_like(lossrw)
    weight[b==1.] = poswight
    lossrw =(lossrw * weight).mean()
    
    critrionrw_sig = nn.BCELoss(reduction='none')
    lossrw_sig = critrionrw_sig(torch.sigmoid(a), b)
    lossrw_sig =((lossrw_sig) * weight).mean()

    print(loss - lossrw)    
    print(lossrw_sig - loss)

Выход:

После запуска приведенного выше кода мы получаем следующий вывод, в котором мы видим, что значения веса двоичной перекрестной энтропии PyTorch печатаются на экране.

Вес двоичной перекрестной энтропии PyTorch

Бинарная функция потери перекрестной энтропии

Двоичная перекрестная энтропия — это функция потерь, которая сравнивает каждую из предсказанных вероятностей с фактическим результатом, который может быть либо 0, либо 1.

Код:

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

  • ypredic = num.array([0,1582, 0,4139, 0,2287]) используется для прогнозирования значения y.
  • ttlbce_loss = num.sum(-ytrue * num.log(ypredic) –(1 – ytrue) * num.log(1 – ypredic)) используется для расчета общего значения потери двоичной перекрестной энтропии.
  • numbof_sampls = ypredic.shape[0] используется для получения количества выборок.
  • meanbce_loss = ttlbce_loss / numbof_sampls используется для расчета среднего значения.
  • print(«Ошибка BCE: » + str(bceval)) используется для печати ошибки двоичной перекрестной энтропии.
import torch
import torch.nn as nn
import numpy as num
ypredic = num.array([0.1582, 0.4139, 0.2287])
ytrue = num.array([0.0, 0.0, 1.0]) 
def BCE(ypredic, ytrue):
    ttlbce_loss = num.sum(-ytrue * num.log(ypredic) -(1 - ytrue) * num.log(1 - ypredic))
    # Getting the mean BCE loss
    numbof_sampls = ypredic.shape[0]
    meanbce_loss = ttlbce_loss / numbof_sampls
    return meanbce_loss
bceval = BCE(ypredic, ytrue)
print("BCE error is: " + str(bceval))

Выход:

После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что значение потери двоичной перекрестной энтропии выводится на экран.

Функция потери двоичной перекрестной энтропии PyTorch

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

pos_weight определяется как вес положительных примеров. Это должен быть вектор и длина равна нескольким классам.

Код:

В следующем коде мы импортируем несколько модулей, на основе которых сможем рассчитать вес положительных примеров.

  • tar_var = torch.ones([15, 69], dtype=torch.float32) используется для расчета целевого значения с размером пакета 15 и 69 классов.
  • out_var = torch.full([15, 69], 2.0) используется в качестве логита прогнозирования.
  • posweight = torch.ones([69]) используется как вес положительного примера, и все веса равны 1.
  • critrion(out_var, tar_var) используется для создания критерия, измеряющего двоичную перекрестную энтропию.
import torch
import torch.nn as nn
tar_var = torch.ones([15, 69], dtype=torch.float32)  
out_var = torch.full([15, 69], 2.0)  
posweight = torch.ones([69])  
critrion = torch.nn.BCEWithLogitsLoss(pos_weight=posweight)
critrion(out_var, tar_var)

Выход:

В следующем выводе мы видим, что значение кросс-энтропии pos_weight PyTorch, в котором все веса равны 1, выводится на экран.

Бинарная перекрестная энтропия PyTorch pos_weight

Сигмоида

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

Код:

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

  • inp_var = torch.randn(5, 4, require_grad=True) используется для генерации входных переменных.
  • tar_var = torch.rand(5, 4, require_grad=False) используется для генерации целевых переменных.
  • loss = fun.binary_cross_entropy(torch.sigmoid(inp_var), tar_var) используется для вычисления сигмоидальной функции двоичной кросс-энтропии.
  • print(loss) используется для печати значения потерь на экране.
import torch
from torch.nn import functional as fun
inp_var = torch.randn(5, 4, requires_grad=True)
tar_var = torch.rand(5, 4, requires_grad=False)
loss = fun.binary_cross_entropy(torch.sigmoid(inp_var), tar_var)
loss.backward()
print(loss)

Выход:

После запуска приведенного выше кода мы получаем следующий вывод, в котором мы видим, что значение сигмоиды двоичной кросс-энтропии PyTorch печатается на экране.

Сигмоида двоичной кросс-энтропии PyTorch

Добавить комментарий