Классификационный слой
Уровень классификации вычисляет потери перекрестной энтропии для задач классификации и взвешенной классификации с взаимоисключающими классами.
Создание классификационного слоя с помощью 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', что означает функцию перекрестной энтропии для 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-of-K схемы кодирования [1]:
где N - число выборок, K - число классов, - вес для класса i, - индикатор того, что n-я выборка принадлежит i-му классу, и - выходной сигнал для выборки n для класса i, который в данном случае является значением из функции softmax. Другими словами, - это вероятность того, что сеть связывает n-й вход с классом i.
ClassNames свойство будет удаленоНе рекомендуется начинать с R2018b
ClassNames будет удален. Использовать Classes вместо этого. Чтобы обновить код, замените все экземпляры ClassNames с Classes. Существуют некоторые различия между свойствами, которые требуют дополнительных обновлений кода.
ClassNames свойство выходного уровня является массивом ячеек символьных векторов. Classes свойство является категориальным массивом. Использование значения Classes с функциями, которые требуют ввода массива ячеек, преобразуйте классы с помощью cellstr функция.
[1] Бишоп, К. М. Распознавание образов и машинное обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.