crossentropy

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

Описание

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

crossentropy функция вычисляет потерю перекрестной энтропии между предсказаниями и предназначается представленный как dlarray данные. Используя dlarray объекты делают работу с высокими размерными данными легче, позволяя вам пометить размерности. Например, можно пометить, которому размерности соответствуют пространственный, время, канал, и обрабатывают размерности в пакетном режиме с помощью 'S'TC, и '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 isscalar.

  • '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