Классификационный слой
Классификационный слой вычисляет потери перекрестной энтропии для задач классификации и взвешенной классификации с взаимоисключающими классами.
Создайте слой классификации с помощью classificationLayer
.
ClassWeights
- Веса классов для взвешенных потерь перекрестной энтропии'none'
(по умолчанию) | вектор положительных чиселВеса классов для взвешенных потерь перекрестной энтропии, заданные как вектор положительных чисел или 'none'
.
Для весов векторных классов каждый элемент представляет вес для соответствующего класса в Classes
свойство. Чтобы задать вектор весов классов, необходимо также задать классы, используя 'Classes'
.
Если на ClassWeights
свойство 'none'
затем слой применяет невзвешенные потери перекрестной энтропии.
Classes
- Классы выходного слоя'auto'
(по умолчанию) | категориальный вектор | строковые массивы | массив ячеек из векторов символов
Классы выходного слоя, заданные как категориальный вектор, строковые массивы, массив ячеек из векторов символов или 'auto'
. Если Classes
является 'auto'
, затем программное обеспечение автоматически устанавливает классы во время обучения. Если вы задаете строковые массивы или массив ячеек векторов символов str
, затем программное обеспечение устанавливает классы выходного слоя на categorical(str,str)
.
Типы данных: char
| categorical
| string
| cell
OutputSize
- Размер выхода'auto'
(по умолчанию) | положительное целое числоЭто свойство доступно только для чтения.
Размер выхода, заданный как положительное целое число. Это значение является количеством меток в данных. Перед обучением размер выхода устанавливается на 'auto'
.
LossFunction
- Функция потерь для обучения'crossentropyex'
Это свойство доступно только для чтения.
Функция потерь для обучения, заданная как 'crossentropyex'
, что означает Cross Entropy Function для k взаимоисключающих классов.
Name
- Имя слоя''
(по умолчанию) | символьный вектор | строковый скаляр
Имя слоя, заданное как вектор символов или строковый скаляр. Чтобы включить слой в график слоев, необходимо задать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с слоем и Name
установлено в ''
затем программа автоматически присваивает слою имя во время обучения.
Типы данных: char
| string
NumInputs
- Количество входовКоличество входов слоя. Этот слой принимает только один вход.
Типы данных: double
InputNames
- Входные имена{'in'}
(по умолчанию)Входные имена слоя. Этот слой принимает только один вход.
Типы данных: cell
NumOutputs
- Количество выходовКоличество выходов слоя. Слой не имеет выходов.
Типы данных: double
OutputNames
- Выходные имена{}
(по умолчанию)Выходные имена слоя. Слой не имеет выходов.
Типы данных: cell
Создайте слой классификации с именем 'output'
.
layer = classificationLayer('Name','output')
layer = ClassificationOutputLayer with properties: Name: 'output' Classes: 'auto' ClassWeights: 'none' OutputSize: 'auto' Hyperparameters LossFunction: 'crossentropyex'
Включите выходной слой классификации в Layer
массив.
layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer]
layers = 7x1 Layer array with layers: 1 '' Image Input 28x28x1 images with 'zerocenter' normalization 2 '' Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0] 3 '' ReLU ReLU 4 '' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 '' Fully Connected 10 fully connected layer 6 '' Softmax softmax 7 '' Classification Output crossentropyex
Создайте взвешенный классификационный слой для трех классов с именами «кошка», «собака» и «рыба» с весами 0,7, 0,2 и 0,1 соответственно.
classes = ["cat" "dog" "fish"]; classWeights = [0.7 0.2 0.1]; layer = classificationLayer( ... 'Classes',classes, ... 'ClassWeights',classWeights)
layer = ClassificationOutputLayer with properties: Name: '' Classes: [cat dog fish] ClassWeights: [3x1 double] OutputSize: 3 Hyperparameters LossFunction: 'crossentropyex'
Включите взвешенный выходной слой классификации в массив слоев.
numClasses = numel(classes); layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer('Classes',classes,'ClassWeights',classWeights)]
layers = 7x1 Layer array with layers: 1 '' Image Input 28x28x1 images with 'zerocenter' normalization 2 '' Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0] 3 '' ReLU ReLU 4 '' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 '' Fully Connected 3 fully connected layer 6 '' Softmax softmax 7 '' Classification Output Class weighted crossentropyex with 'cat' and 2 other classes
Классификационный слой вычисляет потери перекрестной энтропии для задач классификации и взвешенной классификации с взаимоисключающими классами.
Для типичных сетей классификации слой классификации должен следовать за слоем softmax. В классификационном слое, trainNetwork
принимает значения из функции softmax и присваивает каждый вход одному из K взаимоисключающих классов с помощью функции перекрестной энтропии для схемы кодирования 1- K [1]:
где N - количество выборок, K - количество классов, - вес для i класса, является показателем того, что n-я выборка принадлежит к i-му классу, и - выход для n выборки для i класса, который в этом случае является значением из функции softmax. Другими словами, - вероятность того, что сеть связывает n-й вход с классом i.
ClassNames
свойство будет удаленоНе рекомендуемый запуск в R2018b
ClassNames
будет удалено. Использование Classes
вместо этого. Чтобы обновить код, замените все образцы ClassNames
с Classes
. Есть некоторые различия между свойствами, которые требуют дополнительных обновлений вашего кода.
The ClassNames
свойство выходного слоя является массивом ячеек из векторов символов. The Classes
свойство является категориальным массивом. Как использовать значение Classes
с функциями, которые требуют входа массива ячеек, преобразуйте классы используя cellstr
функция.
[1] Bishop, C. M. Pattern Recognition and Машинное Обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.