Skip to content

CrossEntropy

Описание

Функция потерь, вычисляющая перекрёстную энтропию (cross-entropy). Отражает, как и KLDivergence, меру ошибки при представлении одной плотности (реальной) вероятностей другой (предсказанной).

Применяется в задачах классификации.

Формула функции ошибки:

H = -\sum_{с=1}^{M}y_{o,c}\cdot \log{p(y_{o,c})}

где

M - количество классов;
y_{o,c} - бинарный индикатор (0 или 1) принадлежности объекта o классу с;
p(y_{o,c}) - предсказанная классификатором вероятность принадлежности объекта o классу с.

Инициализация

def __init__(self, maxlabels=None, weights=None):

Параметры

Параметр Возможные типы Описание По умолчанию
maxlabels int Индекс последнего возможного класса None
weigths tensor Вектор весов классов None

Пояснения

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


weights - вектор весов классов нужен для того, чтобы регулировать влияние того или иного класса на величину функции ошибки, например, если работа ведётся с несбалансированным датасетом.

Примеры


Необходимые импорты:

import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Cost import CrossEntropy

Info

gpuarray необходим для правильного размещения тензора на GPU.

Синтетические целевой и предсказательный тензоры:

scores = gpuarray.to_gpu(np.random.randn(20, 10, 3).astype(np.float32))
labels = gpuarray.to_gpu(np.random.randint(low=0, high=10, size=(20, 3)).astype(np.int32))

Important

Не забывайте, что первым измерением целевого и предсказательного тензоров является размер батча.

Инициализация функции ошибки:

entr = CrossEntropy()

Расчёт ошибки и градиента на батче:

error, grad = entr(scores, labels)