exponenta event banner

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около-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' и 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 имеет два или более размеров nonsingleton.

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

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

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

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

свернуть все

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

Размер loss зависит от 'Reduction' вариант.

Алгоритмы

свернуть все

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

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

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

где Tj - соответствующее целевое значение Yj.

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

loss=−1N∑jmjwjlossj,

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

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

lossj * = mjwjlossj

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

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

loss=−1N∑n=1N∑i=1KTnilnYni,

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

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

loss=−1N∑n=1N∑i=1K (Tnilog (Yni) + (1 Tni) log (1 − Yni)),

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

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

loss=−1N∑n=1N∑i=1KwiTnilnYni,

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

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

loss=−1N∑n=1N∑t=1Smnt∑i=1KTntilnYnti,

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

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

Представлен в R2019b