classificationLayer - (Not recommended) Classification output layer - MATLAB (original) (raw)
(Not recommended) Classification output layer
classificationLayer
is not recommended. Use the trainnet function and set the loss function to "crossentropy"
instead. For more information, see Version History.
Syntax
Description
A classification layer computes the cross-entropy loss for classification and weighted classification tasks with mutually exclusive classes.
The layer infers the number of classes from the output size of the previous layer. For example, to specify the number of classes K of the network, you can include a fully connected layer with output size K and a softmax layer before the classification layer.
[layer](#bu5lho8%5Fsep%5Fbu5lho8-coutputlayer) = classificationLayer
creates a classification layer.
[layer](#bu5lho8%5Fsep%5Fbu5lho8-coutputlayer) = classificationLayer([Name,Value](#namevaluepairarguments))
sets the optional Name
, ClassWeights
, andClasses
properties using one or more name-value pairs. For example, classificationLayer('Name','output')
creates a classification layer with the name 'output'
.
Examples
Create a classification layer.
Create a classification layer with the name 'output'
.
layer = classificationLayer('Name','output')
layer = ClassificationOutputLayer with properties:
Name: 'output'
Classes: 'auto'
ClassWeights: 'none'
OutputSize: 'auto'
Hyperparameters LossFunction: 'crossentropyex'
Include a classification output layer in a Layer
array.
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 '' 2-D Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0]
3 '' ReLU ReLU
4 '' 2-D 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
Name-Value Arguments
Specify optional pairs of arguments asName1=Value1,...,NameN=ValueN
, where Name
is the argument name and Value
is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose Name
in quotes.
Example: classificationLayer('Name','output')
creates a classification layer with the name 'output'
Layer name, specified as a character vector or a string scalar. ForLayer
array input, thetrainNetwork
function automatically assigns names to layers with the name ""
.
The ClassificationOutputLayer
object stores this property as a character vector.
Data Types: char
| string
Class weights for weighted cross-entropy loss, specified as a vector of positive numbers or 'none'
.
For vector class weights, each element represents the weight for the corresponding class in the Classes
property. To specify a vector of class weights, you must also specify the classes using the Classes
option.
If the ClassWeights
property is'none'
, then the layer applies unweighted cross-entropy loss.
Classes of the output layer, specified as a categorical vector, string array, cell array of character vectors, or "auto"
. If Classes
is "auto"
, then the software automatically sets the classes at training time. If you specify the string array or cell array of character vectors str
, then the software sets the classes of the output layer to categorical(str,str)
.
Data Types: char
| categorical
| string
| cell
More About
A classification layer computes the cross-entropy loss for classification and weighted classification tasks with mutually exclusive classes.
For typical classification networks, the classification layer usually follows a softmax layer. In the classification layer, trainNetwork
takes the values from the softmax function and assigns each input to one of the_K_ mutually exclusive classes using the cross entropy function for a 1-of-K coding scheme [1]:
where N is the number of samples, K is the number of classes, wi is the weight for class i, tni is the indicator that sample n belongs to class i, and_yni_ is the output for sample_n_ for class i, which in this case, is the value from the softmax function. In other words, yni is the probability that the network associates observation n with class_i_.
References
[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.
Extended Capabilities
Usage notes and limitations:
The code generator represents characters in an 8-bit ASCII codeset that the locale setting determines. Therefore, the use of non-ASCII characters in class names, layer names, layer description, or network names might result in errors. For more information, see Encoding of Characters in Code Generation (MATLAB Coder).
Usage notes and limitations:
- To generate CUDA® or C++ code by using GPU Coder™, you must first construct and train a deep neural network. Once the network is trained and evaluated, you can configure the code generator to generate code and deploy the convolutional neural network on platforms that use NVIDIA® or ARM® GPU processors. For more information, see Deep Learning with GPU Coder (GPU Coder).
- For this layer, you can generate code that takes advantage of the NVIDIA CUDA deep neural network library (cuDNN), NVIDIA TensorRT™ high performance inference library, or the ARM
Compute Library
for Mali GPU. - The code generator represents characters in an 8-bit ASCII codeset that the locale setting determines. Therefore, the use of non-ASCII characters in class names, layer names, layer description, or network names might result in errors. For more information, see Encoding of Characters in Code Generation (MATLAB Coder).
Version History
Introduced in R2016a
Starting in R2024a, ClassificationOutputLayer
objects are not recommended, use the trainnet and set the loss function to "crossentropy"
instead.
There are no plans to remove support for ClassificationOutputLayer
objects. However, the trainnet
function has these advantages and is recommended instead:
trainnet
supports dlnetwork objects, which support a wider range of network architectures that you can create or import from external platforms.trainnet
enables you to easily specify loss functions. You can select from built-in loss functions or specify a custom loss function.trainnet
outputs adlnetwork
object, which is a unified data type that supports network building, prediction, built-in training, visualization, compression, verification, and custom training loops.trainnet
is typically faster thantrainNetwork
.
This table shows some typical usages of the trainNetwork
function with ClassificationOutputLayer
objects and how to update your code to use the trainnet
function instead.
Not Recommended | Recommended |
---|---|
net = trainNetwork(data,layers,options), where layers contains a ClassificationOutputLayer object. | net = trainnet(data,layers,"crossentropy",options);In this example, layers specifies same network without a ClassificationOutputLayer object. |
net = trainNetwork(data,layers,options), where layers contains a ClassificationOutputLayer object with ClassWeights set to a numeric vector. | lossFcn = @(Y,T) crossentropy(Y,T,Weights=weights); net = trainnet(data,layers,"crossentropy",options);In this example, weights specifies the class weights and layers specifies same network without a ClassificationOutputLayer object. |