Code Generation for dlarray - MATLAB & Simulink (original) (raw)

A deep learning array stores data with optional data format labels for custom training loops, and enables functions to compute and use derivatives through automatic differentiation. To learn more about custom training loops, automatic differentiation, and deep learning arrays, see Custom Training Loops (Deep Learning Toolbox).

Code generation supports both formatted and unformatted deep learning arrays.dlarray objects containing gpuArrays are also supported for code generation. To generate C/C++ code using deep learning arrays, you need to install MATLAB Coder Interface for Deep Learning. For generating and deploying CUDA® code onto NVIDIA® GPUs, you need to install GPU Coder Interface for Deep Learning. When you use deep learning arrays with CPU and GPU code generation, adhere to these restrictions:

Define dlarray for Code Generation

For code generation, use the dlarray (Deep Learning Toolbox) function to create deep learning arrays. For example, suppose you have a pretraineddlnetwork (Deep Learning Toolbox) network object in themynet.mat MAT file. To predict the responses for this network, create an entry-point function in MATLAB®.

There are two possibilities:

In this design example, the input and output to the entry-point function,foo are of dlarray types. This type of entry-point function is not recommended for code generation because in MATLAB, dlarray enforces the order of labels'SCBTU'. This behavior is replicated for MEX code generation. However, for standalone code generation such as static, dynamic libraries, or executables, the data format follows the specification of the fmt argument of the dlarray object. As a result, if the input or output of an entry-point function is a dlarray object and its order of labels is not 'SCBTU', then the data layout will be different between the MATLAB environment and standalone code.

function dlOut = foo(dlIn)

persistent dlnet; if isempty(dlnet) dlnet = coder.loadDeepLearningNetwork('mynet.mat'); end

dlOut = predict(dlnet, dlIn);

end

In this design example, the input and output to foo are of primitive datatypes and the dlarray object is created within the function. The extractdata (Deep Learning Toolbox) method of the dlarray object returns the data in the dlarray dlA as the output of foo. The outputa has the same data type as the underlying data type indlA.

When compared to Design 1, this entry-point design has the following advantages:

function a = foo(in) dlIn = dlarray(in, 'SSC');

persistent dlnet; if isempty(dlnet) dlnet = coder.loadDeepLearningNetwork('mynet.mat'); end

dlA = predict(dlnet, dlIn);

a = extractdata(dlA);

end

To see an example of dlnetwork anddlarray usage with GPU Coder™, see Generate Digit Images on NVIDIA GPU Using Variational Autoencoder.

Generate code for complex-valued dlarray objects

Code generation supports complex number functions with dlarray objects. You can pass complex-valued inputs to dlarray-supported complex number functions and generate C/C++ and CUDA code that does not depend on third-party libraries. You can implement the complex-valued dlarray support functionality in Simulink by using a MATLAB Function Block.

Code generation does not support passing complex-valued input to thepredict method of dlnetwork object. For code generation, the dlarray input to the predict method of the dlnetwork object must be single data type.

You cannot pass a complex-valued input to a MEX function if the input is specified as real during code generation time. For more usage notes and limitations of code generation support for complex data, see Code Generation for Complex Data

dlarray Object Functions with Code Generation Support

For code generation, you are restricted to the deep learning array object functions listed in this table. For more information of usage notes and limitations, see the extended capabilities section on the reference page.

dims (Deep Learning Toolbox) Dimension labels for dlarray
extractdata (Deep Learning Toolbox) Extract data from dlarray
finddim (Deep Learning Toolbox) Find dimensions with specified label
stripdims (Deep Learning Toolbox) Remove dlarray labels

Deep Learning Toolbox Functions with dlarray Code Generation Support

Deep Learning Operations

Function Description
avgpool (Deep Learning Toolbox) The average pooling operation performs downsampling by dividing the input into pooling regions and computing the average value of each region.
batchnorm (Deep Learning Toolbox) The batch normalization operation normalizes the input data across all observations for each channel independently. To speed up training of the convolutional neural network and reduce the sensitivity to network initialization, use batch normalization between convolution and nonlinear operations such as relu (Deep Learning Toolbox).
dlconv (Deep Learning Toolbox) The convolution operation applies sliding filters to the input data. Use the dlconv (Deep Learning Toolbox) function for deep learning convolution, grouped convolution, and channel-wise separable convolution.
fullyconnect (Deep Learning Toolbox) The fully connect operation multiplies the input by a weight matrix and then adds a bias vector.
leakyrelu (Deep Learning Toolbox) The leaky rectified linear unit (ReLU) activation operation performs a nonlinear threshold operation, where any input value less than zero is multiplied by a fixed scale factor.
maxpool (Deep Learning Toolbox) The maximum pooling operation performs downsampling by dividing the input into pooling regions and computing the maximum value of each region.
relu (Deep Learning Toolbox) The rectified linear unit (ReLU) activation operation performs a nonlinear threshold operation, where any input value less than zero is set to zero.
sigmoid (Deep Learning Toolbox) The sigmoid activation operation applies the sigmoid function to the input data.
softmax (Deep Learning Toolbox) The softmax activation operation applies the softmax function to the channel dimension of the input data.

MATLAB Functions with dlarray Code Generation Support

Unary Element-wise Functions

Binary Element-wise Operators

Function Notes and Limitations
complex For the one-input syntax, the outputdlarray has the same data format as the input dlarrayFor the two-input syntax, if dlarray inputs are formatted, their data formats must match.
minus,- If the twodlarray inputs are formatted, then the output dlarray is formatted with a combination of both of their data formats. The function uses implicit expansion to combine the inputs. For more information, see Implicit Expansion with Data Formats (Deep Learning Toolbox).
plus,+
power,.^
rdivide,./
realpow
times,.*

Reduction Functions

Function Notes and Limitations
mean The outputdlarray has the same data format as the input dlarray.The'omitnan' option is not supported.If the input dlarray is on the GPU, the 'native' option is not supported.
prod The outputdlarray has the same data format as the input dlarray.The'omitnan' option is not supported.
sum
vecnorm The outputdlarray has the same data format as the input dlarray.

Extrema Functions

Function Notes and Limitations
ceil The outputdlarray has the same data format as the input dlarray.
eps The outputdlarray has the same data format as the input dlarray.Use eps(ones(‘like’, x)) to get a scalar epsilon value based on the data type of adlarray x.
fix The outputdlarray has the same data format as the input dlarray.
floor The outputdlarray has the same data format as the input dlarray.
max When you find the maximum or minimum elements of a single dlarray, the outputdlarray has the same data format as the input dlarray.When you find the maximum or minimum elements between two formatted dlarray inputs, the output dlarray has a combination of both of their data formats. The function uses implicit expansion to combine the inputs. For more information, see Implicit Expansion with Data Formats (Deep Learning Toolbox).The index output argument is not traced and cannot be used with automatic differentiation. For more information, see Use Automatic Differentiation In Deep Learning Toolbox (Deep Learning Toolbox).
min
round Only the syntax Y = round(X) is supported.The outputdlarray has the same data format as the input dlarray.

Fourier Transforms

Function Notes and Limitations
fft Only unformatted input arrays are supported.
ifft Only unformatted input arrays are supported.When you use the 'symmetric' option, ifft treats the inputY as exactly symmetric. If you compute the derivative using automatic differentiation, then the derivative is also exactly symmetric. IfY is non-symmetric, then the function and gradient behavior might not match. To ensure that function and gradient behavior match for non-symmetric inputs, explicitly symmetrizeY.

Other Math Operations

Function Notes and Limitations
colon,: The supported operations are: a:ba:b:cFor information on indexing into adlarray, see Indexing (Deep Learning Toolbox).All inputs must be real scalars. The outputdlarray is unformatted.
mtimes,* One input can be a formatted dlarray only when the other input is an unformatted scalar. In this case, the output dlarray has the same data format as the formatteddlarray input.Multiplying a dlarray with a non-dlarray sparse matrix is supported only when both inputs are non-scalar.
pagemtimes One input can be a formatted dlarray only when the other input is unformatted, with scalar pages. In this case, the output dlarray has the same data format as the formatteddlarray input.For code generation, each transpose option ofpagemtimes must be constant.
pinv
sort

Logical Operations

Function Notes and Limitations
and,& If the twodlarray inputs are formatted, then the output dlarray is formatted with a combination of both of their data formats. The function uses implicit expansion to combine the inputs. For more information, see Implicit Expansion with Data Formats (Deep Learning Toolbox).
eq,== If the twodlarray inputs are formatted, then the output dlarray is formatted with a combination of both of their data formats. The function uses implicit expansion to combine the inputs. For more information, see Implicit Expansion with Data Formats (Deep Learning Toolbox).
ge,>=
gt,>
le,<=
lt,<
ne,~=
not,~ The outputdlarray has the same data format as the input dlarray.
or,| If the twodlarray inputs are formatted, then the output dlarray is formatted with a combination of both of their data formats. The function uses implicit expansion to combine the inputs. For more information, see Implicit Expansion with Data Formats (Deep Learning Toolbox).
xor

Size Manipulation Functions

Function Notes and Limitations
reshape The output dlarray is unformatted, even if the input dlarray is formatted.For code generation, the size dimensions must be fixed size.
squeeze Two-dimensional dlarray objects are unaffected by squeeze. If the inputdlarray is formatted, the function removes dimension labels belonging to singleton dimensions. If the inputdlarray has more than two dimensions and its third and above dimensions are singleton, then the function discards these dimensions and their labels.
repelem If you use the u = repelem(v,n) syntax and specify the number of times to repeat each element inrepelem, the output dlarray is unformatted even if the inputdlarray is formatted. If you use the B = repelem(A,r1,...,rN) syntax and specify the repetition factors for each dimension in repelem, the output dlarray has the same data format as the input dlarray.
repmat The output dlarray has the same data format as the input dlarray.

Transposition Operations

Function Notes and Limitations
ctranspose,' If the inputdlarray is formatted, then the labels of both dimensions must be the same. The function performs transposition implicitly, and transposes directly only if necessary for other operations.
permute If the input dlarray is formatted, then the permutation must be among only those dimensions that have the same label. The function performs permutations implicitly, and permutes directly only if necessary for other operations.For code generation, the dimension order must be fixed size.
ipermute If the input dlarray is formatted, then the permutation must be among only those dimensions that have the same label. The function performs permutations implicitly, and permutes directly only if necessary for other operations.For code generation, the dimension order must be fixed size.
transpose,.' If the inputdlarray is formatted, then the labels of both dimensions must be the same. The function performs transposition implicitly, and transposes directly only if necessary for other operations.

Concatenation Functions

Function Notes and Limitations
cat Thedlarray inputs must have matching formats or be unformatted. Mixed formatted and unformatted inputs are supported. If any dlarray inputs are formatted, then the output dlarray is formatted with the same data format.For code generation, the dimension order to cat function must be fixed size.
horzcat
vertcat

Conversion Functions

Function Notes and Limitations
cast cast(dlA,newdatatype) copies the data in the dlarray dlA into a dlarray of the underlying data typenewdatatype. Thenewdatatype option must be'double','single', or'logical'. The outputdlarray is formatted with the same data format as dlA.cast(A,'like',Y) returns an array of the same type as Y. IfY is a dlarray, then the output is a dlarray that has the same underlying data type as Y. If Y is on the GPU, then the output is on the GPU. If both A andY are dlarray objects, then the output dlarray is formatted with the same data format as the inputA.
double The output is a dlarray that contains data of type double.
logical The output is a dlarray that contains data of type logical.
single The output is a dlarray that contains data of type single.

Comparison Functions

Function Notes and Limitations
isequal The syntax with more than two input arguments is not supported.Two dlarray inputs are equal if the numeric data they represent are equal and if they both are either formatted with the same data format or unformatted.
isequaln The syntax with more than two input arguments is not supported.Two dlarray inputs are equal if the numeric data they represent are equal (treatingNaNs as equal) and if they both are either formatted with the same data format or unformatted.

Data Type and Value Identification Functions

Size Identification Functions

Function Notes and Limitations
iscolumn This function returns true for adlarray that is a column vector, where each dimension except the first is a singleton. For example, a 3-by-1-by-1 dlarray is a column vector.
ismatrix This function returns true fordlarray objects with only two dimensions and for dlarray objects where each dimension except the first two is a singleton. For example, a 3-by-4-by-1dlarray is a matrix.
isrow This function returns true for adlarray that is a row vector, where each dimension except the second is a singleton. For example, a 1-by-3-by-1 dlarray is a row vector.
isscalar N/A
isvector This function returns true for adlarray that is a row vector or column vector. Note that isvector does not consider a 1-by-1-by-3 dlarray to be a vector.
length N/A
ndims If the input dlarray dlX is formatted, thenndims(dlX) returns the number of dimension labels, even if some of the labeled dimensions are trailing singleton dimensions.
numel N/A
size If the input dlarray dlX is formatted, thensize(dlX) returns a vector of length equal to the number of dimension labels, even if some of the labeled dimensions are trailing singleton dimensions.

Creator Functions

Indexing

Code generation supports indexing dlarray objects and exhibits the following behaviors:

See Also

Objects

More About