Transposed 2-D convolution layer
A transposed 2-D convolution layer upsamples feature maps.
This layer is sometimes incorrectly known as a "deconvolution" or "deconv" layer. This layer is the transpose of convolution and does not perform deconvolution.
Create a transposed convolution 2-D output layer using transposedConv2dLayer
.
FilterSize
— Height and width of filtersHeight and width of the filters, specified as a vector of two positive
integers [h w]
, where h
is the
height and w
is the width.
FilterSize
defines the size of the local
regions to which the neurons connect in the input.
If you set FilterSize
using an input argument,
then you can specify FilterSize
as scalar to use
the same value for both dimensions.
Example:
[5 5]
specifies filters of height 5 and width
5.
NumFilters
— Number of filtersNumber of filters, specified as a positive integer. This number corresponds to the number of neurons in the convolutional layer that connect to the same region in the input. This parameter determines the number of channels (feature maps) in the output of the convolutional layer.
Example:
96
Stride
— Step size for traversing input[1 1]
(default) | vector of two positive integersStep size for traversing the input vertically and horizontally, specified as a vector
[a b]
of two positive integers, where a
is the
vertical step size and b
is the horizontal step size. When creating
the layer, you can specify Stride
as a scalar to use the same value
for both step sizes.
Example:
[2 3]
specifies a vertical step size of 2 and a horizontal step size
of 3.
CroppingMode
— Method to determine cropping size'manual'
(default) | 'same'
Method to determine cropping size, specified as
'manual'
or same.
The software automatically sets the value of CroppingMode
based on the 'Cropping'
value you specify when creating the layer.
If you set the 'Cropping'
option to a
numeric value, then the software automatically sets the CroppingMode
property of the layer to 'manual'
.
If you set the 'Cropping'
option to
'same'
, then the software automatically
sets the CroppingMode
property of the layer to 'same'
and set the
cropping so that the output size equals inputSize .*
Stride
, where inputSize
is the
height and width of the layer input.
To specify the cropping size, use the 'Cropping'
option of transposedConv2dLayer
.
CroppingSize
— Output size reduction[0 0 0 0]
(default) | vector of four nonnegative integersOutput size reduction, specified as a vector of four nonnegative
integers [t b l r]
, where t
,
b
, l
, r
are
the amounts to crop from the top, bottom, left, and right,
respectively.
To specify the cropping size manually, use the 'Cropping'
option of transposedConv2dLayer
.
Example:
[0 1 0 1]
Cropping
— Output size reduction[0 0]
(default) | vector of two nonnegative integersCropping
property will be removed in a future
release. Use CroppingSize
instead. To specify the cropping size
manually, use the 'Cropping'
option of transposedConv2dLayer
.
Output size reduction, specified as a vector of two nonnegative
integers [a b]
, where a
corresponds to the cropping from the top and bottom and
b
corresponds to the cropping from the left and
right.
To specify the cropping size manually, use the 'Cropping'
option of transposedConv2dLayer
.
Example:
[0 1]
NumChannels
— Number of channels for each filter'auto'
(default) | integerNumber of channels for each filter, specified as
'NumChannels
' and 'auto'
or
an integer.
This parameter must be equal to the number of channels of the input to this convolutional layer. For example, if the input is a color image, then the number of channels for the input must be 3. If the number of filters for the convolutional layer prior to the current layer is 16, then the number of channels for this layer must be 16.
WeightsInitializer
— Function to initialize weights'glorot'
(default) | 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| function handleFunction to initialize the weights, specified as one of the following:
'glorot'
– Initialize the weights with the Glorot
initializer [1] (also known as
Xavier initializer). The Glorot initializer independently samples from a
uniform distribution with zero mean and variance 2/(numIn +
numOut)
, where numIn =
FilterSize(1)*FilterSize(2)*NumChannels
and numOut =
FilterSize(1)*FilterSize(2)*NumFilters
.
'he'
– Initialize the weights with the He initializer
[2]. The He
initializer samples from a normal distribution with zero mean and variance
2/numIn
, where numIn =
FilterSize(1)*FilterSize(2)*NumChannels
.
'narrow-normal'
– Initialize the weights by
independently sampling from a normal distribution with zero mean and
standard deviation 0.01.
'zeros'
– Initialize the weights with zeros.
'ones'
– Initialize the weights with ones.
Function handle – Initialize the weights with a custom function. If you
specify a function handle, then the function must be of the form
weights = func(sz)
, where sz
is
the size of the weights. For an example, see Specify Custom Weight Initialization Function.
The layer only initializes the weights when the Weights
property
is empty.
Data Types: char
| string
| function_handle
BiasInitializer
— Function to initialize bias'zeros'
(default) | 'narrow-normal'
| 'ones'
| function handleFunction to initialize the bias, specified as one of the following:
'zeros'
– Initialize the bias with zeros.
'ones'
– Initialize the bias with ones.
'narrow-normal'
– Initialize the bias by independently
sampling from a normal distribution with zero mean and standard deviation
0.01.
Function handle – Initialize the bias with a custom function. If you specify a function handle, then the function must be of the form bias = func(sz)
, where sz
is the size of the bias.
The layer only initializes the bias when the Bias
property is
empty.
Data Types: char
| string
| function_handle
Weights
— Layer weights[]
(default) | numeric arrayLayer weights for the convolutional layer, specified as a
FilterSize(1)
-by-FilterSize(2)
-by-NumFilters
-by-NumChannels
array.
The layer weights are learnable parameters. You can specify the
initial value for the weights directly using the Weights
property of the layer. When training a network, if the Weights
property of the layer is nonempty, then trainNetwork
uses the Weights
property as the
initial value. If the Weights
property is empty, then
trainNetwork
uses the initializer specified by the WeightsInitializer
property of the layer.
Data Types: single
| double
Bias
— Layer biases[]
(default) | numeric arrayLayer biases for the convolutional layer, specified as a numeric array.
The layer biases are learnable parameters. When training a network, if Bias
is nonempty, then trainNetwork
uses the Bias
property as the initial value. If Bias
is empty, then trainNetwork
uses the initializer specified by BiasInitializer
.
At training time, Bias
is a
1-by-1-by-NumFilters
array.
Data Types: single
| double
WeightLearnRateFactor
— Learning rate factor for weightsLearning rate factor for the weights, specified as a nonnegative scalar.
The software multiplies this factor by the global learning rate to determine the
learning rate for the weights in this layer. For example, if
WeightLearnRateFactor
is 2, then the learning rate for the
weights in this layer is twice the current global learning rate. The software determines
the global learning rate based on the settings specified with the trainingOptions
function.
Example:
2
BiasLearnRateFactor
— Learning rate factor for biasesLearning rate factor for the biases, specified as a nonnegative scalar.
The software multiplies this factor by the global learning rate
to determine the learning rate for the biases in this layer. For example, if
BiasLearnRateFactor
is 2, then the learning rate for the biases in the
layer is twice the current global learning rate. The software determines the global learning
rate based on the settings specified with the trainingOptions
function.
Example:
2
WeightL2Factor
— L2 regularization factor for weightsL2 regularization factor for the weights, specified as a nonnegative scalar.
The software multiplies this factor by the global L2 regularization factor to determine the L2
regularization for the weights in this layer. For example, if
WeightL2Factor
is 2, then the L2 regularization for the weights
in this layer is twice the global L2 regularization factor. You can specify the global
L2 regularization factor using the trainingOptions
function.
Example:
2
BiasL2Factor
— L2 regularization factor for biasesL2 regularization factor for the biases, specified as a nonnegative scalar.
The software multiplies this factor by the global L2
regularization factor to determine the L2 regularization for the biases in this layer. For
example, if BiasL2Factor
is 2, then the L2 regularization for the biases in
this layer is twice the global L2 regularization factor. You can specify the global L2
regularization factor using the trainingOptions
function.
Example:
2
Name
— Layer name''
(default) | character vector | string scalar
Layer name, specified as a character vector or a string scalar.
To include a layer in a layer graph, you must specify a nonempty unique layer name. If you train
a series network with the layer and Name
is set to ''
,
then the software automatically assigns a name to the layer at training time.
Data Types: char
| string
NumInputs
— Number of inputsNumber of inputs of the layer. This layer accepts a single input only.
Data Types: double
InputNames
— Input names{'in'}
(default)Input names of the layer. This layer accepts a single input only.
Data Types: cell
NumOutputs
— Number of outputsNumber of outputs of the layer. This layer has a single output only.
Data Types: double
OutputNames
— Output names{'out'}
(default)Output names of the layer. This layer has a single output only.
Data Types: cell
Create a transposed convolutional layer with 96 filters, each with a height and width of 11. Use a stride of 4 in the horizontal and vertical directions.
layer = transposedConv2dLayer(11,96,'Stride',4);
Behavior changed in R2019a
Starting in R2019a, the software, by default, initializes the layer weights of this layer using the Glorot initializer. This behavior helps stabilize training and usually reduces the training time of deep networks.
In previous releases, the software, by default, initializes the layer weights by sampling from
a normal distribution with zero mean and variance 0.01. To reproduce this behavior, set the
'WeightsInitializer'
option of the layer to
'narrow-normal'
.
Cropping
property of TransposedConvolution2DLayer
will be removedNot recommended starting in R2019a
Cropping
property of
TransposedConvolution2DLayer
will be removed, use CroppingSize
instead. To update your code, replace all instances of
the Cropping
property with
CroppingSize
.
[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the difficulty of training deep feedforward neural networks." In Proceedings of the thirteenth international conference on artificial intelligence and statistics, pp. 249-256. 2010.
[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving deep into rectifiers: Surpassing human-level performance on imagenet classification." In Proceedings of the IEEE international conference on computer vision, pp. 1026-1034. 2015.
You have a modified version of this example. Do you want to open this example with your edits?