Бинарная перекрестная энтропия создает норму, которая вычисляет двоичную перекрестную энтропию между целевыми вероятностями и входными вероятностями.
Синтаксис:
torch.nn.BCELoss(weight=None,size_average=None,reduce=None,reduction='mean)
Параметры:
- weight перерасчетный вес присваивается потере каждого элемента.
- size_average: потери усредняются по каждому элементу потерь в пакете.
- weight: потери представляют собой средние значения наблюдений для каждой мини-партии в зависимости от size_average.
- reduction указывает сокращение, примененное к выходным данным: «нет», «среднее», «сумма».
- «Нет» определяется как сокращение не будет применяться.
- «Среднее» определяется как сумма выходных данных, разделенная на количество элементов в выходных данных.
- «Сумма» определяется, как данный вывод будет суммироваться.
- Пример
- Двоичная перекрестная энтропия с логитами
- Двоичный вес перекрестной энтропии
- Бинарная функция потери перекрестной энтропии
- Бинарная перекрестная энтропия pos_weight
- Сигмоида
Пример
В этом разделе мы узнаем, как реализовать двоичную кросс-энтропию с помощью примера в 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)
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что значение двоичной перекрестной энтропии выводится на экран.
Двоичная перекрестная энтропия с логитами
Двоичная перекрестная энтропия противопоставляет каждую прогнозируемую вероятность фактическому результату, который может быть 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 со значением логитов выводится на экран.
Двоичный вес перекрестной энтропии
Вес создает критерий, который измеряет двоичную перекрестную энтропию между входной и целевой вероятностями. Вес в двоичной кросс-энтропии настраивается итеративно.
Код:
В следующем коде мы импортируем модуль факела, из которого мы сможем вычислить вес двоичной перекрестной энтропии.
- 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 печатаются на экране.
Бинарная функция потери перекрестной энтропии
Двоичная перекрестная энтропия — это функция потерь, которая сравнивает каждую из предсказанных вероятностей с фактическим результатом, который может быть либо 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))
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что значение потери двоичной перекрестной энтропии выводится на экран.
Бинарная перекрестная энтропия 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, выводится на экран.
Сигмоида
Сигмоидальная функция — это действительная функция, которая определяет все входные значения и имеет неотрицательную производную в каждой точке.
Код:
В следующем коде мы импортируем модуль факела, из которого мы сможем вычислить сигмоиду двоичной кросс-энтропии.
- 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 печатается на экране.