crossentropy

Потери перекрестной энтропии для задач классификации

Описание

Операция перекрестной энтропии вычисляет потери перекрестной энтропии между предсказаниями и целевыми значениями для задач классификации с одной меткой и с мультиметками.

crossentropy функция вычисляет потери перекрестной энтропии между предсказаниями и целями, представленными как dlarray данные. Использование dlarray облегчает работу с данными высоких размерностей, позволяя пометить размеры. Для примера можно пометить, какие размерности соответствуют пространственным, временным, канальным и пакетным размерностям, используя 'S', 'T', 'C', и 'B' метки, соответственно. Для неопределенных и других размерностей используйте 'U' метка. Для dlarray функции объекта, которые работают над конкретными размерностями, можно задать метки размера путем форматирования dlarray объект непосредственно, или при помощи 'DataFormat' опция.

Примечание

Чтобы вычислить потери перекрестной энтропии в layerGraph объект или Layer массив для использования с trainNetwork функция, использование classificationLayer.

пример

loss = crossentropy(dlY,targets) возвращает категориальные потери перекрестной энтропии между форматированными dlarray dlY объекта содержащие предсказания и целевые значения targets для задач классификации с одной меткой. Область выхода loss является неформатированным скалярным dlarray скаляр.

Для неформатированных входных данных используйте 'DataFormat' опция.

loss = crossentropy(dlY,targets,weights) применяет веса к расчетным значениям потерь. Используйте этот синтаксис для взвешивания вкладов классов, наблюдений, областей или отдельных элементов входов в вычисленные значения потерь.

loss = crossentropy(___,'DataFormat',FMT) также задает формат размерности FMT когда dlY не является форматированным dlarray.

loss = crossentropy(___,Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах. Для примера, 'TargetCategories','independent' вычисляет потери перекрестной энтропии для задачи классификации с мультиметками.

Примеры

свернуть все

Создайте массив счетов предсказания для 12 наблюдений в 10 классах.

numClasses = 10;
numObservations = 12;

Y = rand(numClasses,numObservations);
dlY = dlarray(Y,'CB');
dlY = softmax(dlY);

Просмотрите размер и формат счетов предсказания.

size(dlY)
ans = 1×2

    10    12

dims(dlY)
ans = 
'CB'

Создайте массив целевых объектов, закодированных как векторы с одним контактом.

labels = randi(numClasses,[1 numObservations]);
targets = onehotencode(labels,1,'ClassNames',1:numClasses);

Просмотрите размер целевых объектов.

size(targets)
ans = 1×2

    10    12

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

loss = crossentropy(dlY,targets)
loss = 
  1x1 dlarray

    2.3343

Создайте массив счетов предсказания для 12 наблюдений в 10 классах.

numClasses = 10;
numObservations = 12;
Y = rand(numClasses,numObservations);
dlY = dlarray(Y,'CB');

Просмотрите размер и формат счетов предсказания.

size(dlY)
ans = 1×2

    10    12

dims(dlY)
ans = 
'CB'

Создайте случайный массив целевых объектов, закодированных как числовой массив нулей и таковых. Каждое наблюдение может иметь несколько классов.

targets = rand(numClasses,numObservations) > 0.75;
targets = single(targets);

Просмотрите размер целевых объектов.

size(targets)
ans = 1×2

    10    12

Вычислите потери перекрестной энтропии между предсказаниями и целями. Чтобы задать потери перекрестной энтропии для классификации с мультиметками, установите 'TargetCategories' опция для 'independent'.

loss = crossentropy(dlY,targets,'TargetCategories','independent')
loss = 
  1x1 single dlarray

    9.8853

Создайте массив счетов предсказания для 12 наблюдений в 10 классах.

numClasses = 10;
numObservations = 12;

Y = rand(numClasses,numObservations);
dlY = dlarray(Y,'CB');
dlY = softmax(dlY);

Просмотрите размер и формат счетов предсказания.

size(dlY)
ans = 1×2

    10    12

dims(dlY)
ans = 
'CB'

Создайте массив целевых объектов, закодированных как векторы с одним контактом.

labels = randi(numClasses,[1 numObservations]);
targets = onehotencode(labels,1,'ClassNames',1:numClasses);

Просмотрите размер целевых объектов.

size(targets)
ans = 1×2

    10    12

Вычислите взвешенные потери перекрестной энтропии между предсказаниями и целями с помощью весов классов векторов. Задайте формат весов 'UC' (не определен, канал) с использованием 'WeightsFormat' опция.

weights = rand(1,numClasses);
loss = crossentropy(dlY,targets,weights,'WeightsFormat','UC')
loss = 
  1x1 dlarray

    1.1261

Входные параметры

свернуть все

Предсказания, заданные как форматированное dlarray, неформатированный dlarray, или числовой массив. Когда dlY не является форматированным dlarrayнеобходимо задать формат размерности с помощью 'DataFormat' опция.

Если dlY является числовым массивом, targets должен быть dlarray.

Целевые метки классификации, заданные как форматированный или неформатированный dlarray или числовой массив.

Задайте целевые объекты как массив, содержащий одноразовые закодированные метки с таким же размером и форматом, как dlY. Для примера, если dlY является numObservations-by- numClasses массив, затем targets(n,i) = 1, если наблюдение n принадлежит классу i targets(n,i) = 0 в противном случае.

Если targets является форматированным dlarrayформат размерности должен совпадать с форматом dlYили то же, что и 'DataFormat' если dlY не форматирован

Если targets является неформатированным dlarray или числовой массив, затем формат dlY или значение 'DataFormat' неявно применяется к targets.

Совет

Форматированные dlarray объекты автоматически сортируют свои размерности. Чтобы гарантировать, что размерности dlY и targets непротиворечивы, когда dlY является форматированным dlarray, также укажите targets как форматированный dlarray.

Веса, заданные как dlarray или числовой массив.

Чтобы задать веса классов, задайте вектор с 'C' (канальная) размерность с размером, соответствующим 'C' (канальная) размерность dlX. Задайте 'C' (канальная) размерность весов классов при помощи форматированного dlarray объект или при помощи 'WeightsFormat' опция.

Чтобы задать веса наблюдений, задайте вектор с 'B' (пакетная) размерность совпадает с размером 'B' (пакетная) размерность dlY. Задайте 'B' (пакетная) размерность весов классов с помощью форматированного dlarray объект или при помощи 'WeightsFormat' опция.

Чтобы задать веса для каждого элемента входа независимо, задайте веса как массив того же размера, что и dlY. В этом случае, если weights не является форматированным dlarray объект, тогда функция использует тот же формат, что и dlY. Кроме того, задайте формат весов используя 'WeightsFormat' опция.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'TargetCategories','independent','DataFormat','CB' оценивает потери перекрестной энтропии для задач классификации с мультиметками и определяет порядок размерности входных данных следующим 'CB'

Тип задачи классификации, заданный как разделенная разделенными запятой парами, состоящая из 'TargetCategories' и одно из следующих:

  • 'exclusive' - Однометковая классификация. Каждое наблюдение в предсказаниях dlY присваивается исключительно одной категории. Функция вычисляет потери между целевым значением для одной категории, заданной targets и соответствующее предсказание в dlY, в среднем по количеству наблюдений.

  • 'independent'- Многомерная классификация. Каждое наблюдение в предсказаниях dlY может быть присвоен одной или нескольким независимым категориям. Функция вычисляет сумму потерь между каждой категорией, заданной targets и предсказания в dlY по этим категориям в среднем по количеству наблюдений. Потери перекрестной энтропии для этого типа задачи классификации также известны как потери бинарной перекрестной энтропии.

Маска, указывающая, какие элементы включать для расчета потерь, заданная как разделенная разделенными запятой парами, состоящая из 'Mask' и a dlarray объект, логический массив или числовой массив с таким же размером, как dlY.

Функция включает и исключает элементы входных данных для расчета потерь, когда соответствующее значение в маске составляет 1 и 0, соответственно.

Значение по умолчанию является логическим массивом таковых с таким же размером, как dlY.

Совет

Форматированные dlarray объекты автоматически сортируют свои размерности. Чтобы гарантировать, что размерности dlY и маска последовательна, когда dlY является форматированным dlarray, также укажите маску как форматированную dlarray.

Режим сокращения массива значений потерь, заданный как разделенная разделенными запятой парами, состоящая из 'Reduction' и одно из следующих:

  • 'sum' - Суммируйте все элементы массива значений потерь. В этом случае выход loss скаляром.

  • 'none' - Не уменьшайте массив значений потерь. В этом случае выход loss является неформатированным dlarray объект с тем же размером, что и dlY.

Делитель для нормализации сокращенных потерь при 'Reduction' является 'sum', заданная как разделенная разделенными запятой парами, состоящая из 'NormalizationFactor' и одно из следующих:

  • 'batch-size' - Нормализовать потери путем деления на количество наблюдений в dlX.

  • 'all-elements' - Нормализовать потери путем деления на количество элементов dlX.

  • 'mask-included' - Нормализация потерь путем деления значений потерь на количество включенных элементов, заданных маской для каждого наблюдения независимо. Чтобы использовать эту опцию, необходимо задать маску с помощью 'Mask' опция.

  • 'none' - Не нормализовать потерю.

Размерность неформатированных входных данных, заданный как разделенная разделенными запятой парами, состоящая из 'DataFormat' и вектор символов или строковый скаляр FMT который обеспечивает метку для каждой размерности данных.

При указании формата dlarray объект, каждый символ предоставляет метку для каждой размерности данных и должен быть одним из следующих:

  • 'S' - Пространственный

  • 'C' - Канал

  • 'B' - Партия (например, выборки и наблюдения)

  • 'T' - Время (например, временные шаги последовательностей)

  • 'U' - Не определено

Можно задать несколько размерности, маркированных 'S' или 'U'. Можно использовать метки 'C', 'B', и 'T' самое большее сразу.

Вы должны задать 'DataFormat' когда входные данные не являются форматированным dlarray.

Пример: 'DataFormat','SSCB'

Типы данных: char | string

Размерность весов классов, заданный как разделенная разделенными запятой парами, состоящая из 'WeightsFormat' и вектор символов или строковый скаляр, который обеспечивает метку для каждой размерности весов.

При указании формата dlarray объект, каждый символ предоставляет метку для каждой размерности данных и должен быть одним из следующих:

  • 'S' - Пространственный

  • 'C' - Канал

  • 'B' - Партия (например, выборки и наблюдения)

  • 'T' - Время (например, временные шаги последовательностей)

  • 'U' - Не определено

Можно задать несколько размерности, маркированных 'S' или 'U'. Можно использовать метки 'C', 'B', и 'T' самое большее сразу.

Вы должны задать 'WeightsFormat' когда weights является числовым вектором и dlX имеет два или более размеров несинглтона.

Если weights не является вектором или и тем, и другим weights и dlY являются векторами, затем значение по умолчанию 'WeightsFormat' совпадает с форматом dlY.

Пример: 'WeightsFormat','CB'

Типы данных: char | string

Выходные аргументы

свернуть все

Потери перекрестной энтропии, возвращенные как неформатированный dlarray. Область выхода loss является неформатированным dlarray с таким же базовым типом данных, как и входной dlY.

Размер loss зависит от 'Reduction' опция.

Алгоритмы

свернуть все

Потери перекрестной энтропии

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

lossj=TjlnYj+(1Tj)ln(1Yj),

где Tj - соответствующее целевое значение, которое должно быть Yj.

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

loss=1Njmjwjlossj,

где N - коэффициент нормализации, mj - значение маски для элемента j, а wj - значение веса для элемента j.

Если не уменьшить потери, функция применяет маску и веса к значениям потерь непосредственно:

lossj*=mjwjlossj

В этой таблице показаны композиции потерь для различных задач.

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

loss=1Nn=1Ni=1KTnilnYni,

где N и K - это числа наблюдений и классов, соответственно.

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

loss=1Nn=1Ni=1K(Tnilog(Yni)+(1Tni)log(1Yni)),

где N и K - это числа наблюдений и классов, соответственно.

Однометковая классификация с взвешенными классамиПотери перекрестной энтропии с весами классов. Это полезно для наборов данных с несбалансированными классами.

loss=1Nn=1Ni=1KwiTnilnYni,

где N и K - количество наблюдений и классов, соответственно, и wi обозначает вес для i класса.

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

loss=1Nn=1Nt=1Smnti=1KTntilnYnti,

где N, S и K являются количеством наблюдений, временных шагов и классов, mnt обозначает значение маски для t временного шага n наблюдения.

Расширенные возможности

Введенный в R2019b