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 объекты автоматически переставляют размерности базовых данных, чтобы иметь, заказывают "S" (пространственный), "C" (канал), "B" (пакет), "T" (время), затем "U" (незаданный). Гарантировать что размерности 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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

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

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

Значением по умолчанию является логический массив из единиц с тем же размером как dlY.

Совет

Отформатированный dlarray объекты автоматически переставляют размерности базовых данных, чтобы иметь этот порядок: "S" (пространственный), "C" (канал), "B" (пакет), "T" (время) и "U" (незаданный). Например, dlarray объекты автоматически переставляют размерности данных с форматом "TSCSBS" иметь формат "SSSCBT".

Гарантировать что размерности dlY и маска сопоставима, когда dlY отформатированный dlarray, также задайте маску как отформатированный dlarray.

Режим для того, чтобы редуцировать массив значений потерь в виде одного из следующего:

  • "sum" — Суммируйте все элементы в массиве значений потерь. В этом случае, выход loss isscalar.

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

Делитель для нормализации уменьшаемой потери, когда Reduction "sum"В виде одного из следующего:

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

  • "all-elements" — Нормируйте потерю путем деления его на число элементов dlX.

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

  • "none" — Не нормируйте потерю.

Порядок размерности бесформатных входных данных в виде вектора символов или строкового скаляра FMT это обеспечивает метку для каждой размерности данных.

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

  • "S" — Пространственный

  • "C" — Канал

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

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

  • "U" — Незаданный

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

Необходимо задать DataFormat когда входными данными не является отформатированный dlarray.

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

Порядок размерности весов в виде вектора символов или строкового скаляра, который обеспечивает метку для каждой размерности весов.

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

  • "S" — Пространственный

  • "C" — Канал

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

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

  • "U" — Незаданный

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

Необходимо задать WeightsFormat когда weights числовой вектор и dlY имеет две или больше неодноэлементных размерности.

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

Типы данных: 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