exponenta event banner

classificationLayer

Уровень вывода классификации

Описание

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

Уровень определяет количество классов из выходного размера предыдущего уровня. Например, чтобы задать количество классов K сети, включите полностью соединенный уровень с выходным размером K и уровень softmax перед уровнем классификации.

layer = classificationLayer создает классификационный слой.

пример

layer = classificationLayer(Name,Value) устанавливает необязательный Name, ClassWeights, и Classes с использованием одной или нескольких пар имя-значение. Например, classificationLayer('Name','output') создает классификационный слой с именем 'output'.

Примеры

свернуть все

Создание классификационного слоя с именем '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

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

свернуть все

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: classificationLayer('Name','output') создает классификационный слой с именем 'output'

Имя слоя, указанное как символьный вектор или строковый скаляр. Чтобы включить слой в график слоев, необходимо указать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с уровнем и Name имеет значение ''затем программа автоматически присваивает имя слою во время обучения.

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

Веса классов для взвешенных потерь перекрестной энтропии, указанные как вектор положительных чисел или 'none'.

Для весов класса векторов каждый элемент представляет вес для соответствующего класса в Classes собственность. Чтобы задать вектор весов классов, необходимо также указать классы с помощью 'Classes'.

Если ClassWeights свойство - 'none', то слой применяет невзвешенные потери перекрестной энтропии.

Классы выходного слоя, указанные как категориальный вектор, строковый массив, массив ячеек символьных векторов или 'auto'. Если Classes является 'auto', то программное обеспечение автоматически устанавливает классы во время обучения. Если указан строковый массив или массив ячеек символьных векторов str, то программное обеспечение устанавливает классы выходного уровня в categorical(str,str).

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

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

свернуть все

Слой классификации, возвращенный как ClassificationOutputLayer объект.

Для получения информации о конкатенации слоев для построения архитектуры сверточной нейронной сети см. Layer.

Подробнее

свернуть все

Классификационный слой

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

Для типовых классификационных сетей уровень классификации должен соответствовать уровню softmax. В классификационном слое trainNetwork берет значения из функции softmax и присваивает каждый вход одному из K взаимоисключающих классов, используя функцию перекрестной энтропии для 1-of-K схемы кодирования [1]:

loss=−1N∑n=1N∑i=1K​witnilnyni,

где N - число выборок, K - число классов, wi - вес для класса i, tni - индикатор того, что n-я выборка принадлежит i-му классу, и yni - выходной сигнал для выборки n для класса i, который в данном случае является значением из функции softmax. Другими словами, yni - это вероятность того, что сеть связывает n-й вход с классом i.

Ссылки

[1] Бишоп, К. М. Распознавание образов и машинное обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

Создание кода графического процессора
Создание кода CUDA ® для графических процессоров NVIDIA ® с помощью Coder™ графических процессоров

.
Представлен в R2016a