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- K [1]:

loss=1Nn=1Ni=1Kwitnilnyni,

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

Ссылки

[1] Bishop, C. M. Pattern Recognition and Машинное Обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

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

.
Введенный в R2016a