代码生成支持的网络和层
MATLAB® Coder™ 支持序列、有向无环图 (DAG) 和循环卷积神经网络(CNN 或 ConvNet)的代码生成。您可以为任何经过训练的神经网络生成代码,其层支持代码生成。请参阅支持的层。
支持的预训练网络
代码生成支持 Deep Learning Toolbox™ 中提供的以下预训练网络。支持可能存在限制。有关详细信息,请参阅参考页上的“扩展功能”部分。
网络名称 | 描述 | Intel® MKL-DNN | ARM® Compute Library |
---|---|---|---|
AlexNet | AlexNet 卷积神经网络。关于预训练的 AlexNet 模型,请参阅 | 是 | 是 |
DarkNet | DarkNet-19 和 DarkNet-53 卷积神经网络。对于预训练的 DarkNet 模型,请参阅 darknet19 (Deep Learning Toolbox) 和 darknet53 (Deep Learning Toolbox)。 | 是 | 是 |
DenseNet-201 | DenseNet-201 卷积神经网络。对于预训练的 DenseNet-201 模型,请参阅 | 是 | 是 |
EfficientNet-b0 | EfficientNet-b0 卷积神经网络。关于预训练的 EfficientNet-b0 模型,请参阅 | 是 | 是 |
GoogLeNet | GoogLeNet 卷积神经网络。关于预训练的 GoogLeNet 模型,请参阅 | 是 | 是 |
Inception-ResNet-v2 | Inception-ResNet-v2 卷积神经网络。有关预训练的 Inception-ResNet-v2 模型,请参阅 | 是 | 是 |
Inception-v3 | Inception-v3 卷积神经网络。有关预训练的 Inception-v3 模型,请参阅 inceptionv3 (Deep Learning Toolbox)。 | 是 | 是 |
MobileNet-v2 | MobileNet-v2 卷积神经网络。有关预训练的 MobileNet-v2 模型,请参阅 | 是 | 是 |
NASNet-Large | NASNet-Large 卷积神经网络。有关预训练的 NASNet-Large 模型,请参阅 | 是 | 是 |
NASNet-Mobile | NASNet-Mobile 卷积神经网络。有关预训练的 NASNet-Mobile 模型,请参阅 | 是 | 是 |
ResNet | ResNet-18、ResNet-50 和 ResNet-101 卷积神经网络。对于预训练的 ResNet 模型,请参阅 | 是 | 是 |
SegNet | 多类像素级分割网络。有关详细信息,请参阅 | 是 | 否 |
SqueezeNet | 小型深度神经网络。有关预训练的 SqeezeNet 模型,请参阅 | 是 | 是 |
VGG-16 | VGG-16 卷积神经网络。有关预训练的 VGG-16 模型,请参阅 | 是 | 是 |
VGG-19 | VGG-19 卷积神经网络。有关预训练的 VGG-19 模型,请参阅 | 是 | 是 |
Xception | Xception 卷积神经网络。有关预训练的 Xception 模型,请参阅 | 是 | 是 |
支持的层
对于表中指定的目标深度学习库,MATLAB Coder 支持以下层的代码生成。
在安装支持包 MATLAB Coder Interface for Deep Learning 后,您可以使用 analyzeNetworkForCodegen
查看网络是否兼容特定深度学习库的代码生成。例如:
result = analyzeNetworkForCodegen(mobilenetv2,TargetLibrary = 'mkldnn')
注意
从 R2022b 开始,请使用 analyzeNetworkForCodegen
函数检查深度学习网络的代码生成兼容性。不推荐使用 coder.getDeepLearningLayers
。
层名称 | 描述 | 泛型 C/C++ | Intel MKL-DNN | ARM Compute Library |
---|---|---|---|---|
additionLayer (Deep Learning Toolbox) | 相加层 | 是 | 是 | 是 |
anchorBoxLayer (Computer Vision Toolbox) | 锚框层 | 是 | 是 | 是 |
attentionLayer (Deep Learning Toolbox) | 点积注意力层
| 是 | ||
averagePooling1dLayer (Deep Learning Toolbox) | 一维平均池化层 | 是 | ||
averagePooling2dLayer (Deep Learning Toolbox) | 平均池化层
| 是 | 是 | 是 |
batchNormalizationLayer (Deep Learning Toolbox) | 批量归一化层 | 是 | 是 | 是 |
bilstmLayer (Deep Learning Toolbox) | 双向 LSTM 层 | 是 | 是 | 是 |
classificationLayer (Deep Learning Toolbox) | 创建分类输出层 | 是 | 是 | 是 |
clippedReluLayer (Deep Learning Toolbox) | 裁剪修正线性单元 (ReLU) 层 | 是 | 是 | 是 |
concatenationLayer (Deep Learning Toolbox) | 串联层 | 是 | 是 | 是 |
convolution1dLayer (Deep Learning Toolbox) | 一维卷积层 | 是 | ||
convolution2dLayer (Deep Learning Toolbox) | 二维卷积层
| 是 | 是 | 是 |
crop2dLayer (Deep Learning Toolbox) | 对输入应用二维裁剪的层 | 否 | 是 | 是 |
CrossChannelNormalizationLayer (Deep Learning Toolbox) | 逐通道局部响应归一化层 | 否 | 是 | 是 |
自定义层 | 为您的问题定义的自定义层,具有或不具有可学习参数。 请参阅:
自定义层的输出必须为固定大小数组。 仅泛型 C/C++ 代码生成支持串行网络中的自定义层。 对于代码生成,自定义层必须包含 如果满足以下条件,则可以将
对于不受支持的 function Z = predict(layer, X) if coder.target('MATLAB') Z = doPredict(X); else if isdlarray(X) X1 = extractdata(X); Z1 = doPredict(X1); Z = dlarray(Z1); else Z = doPredict(X); end end end | 是 仅泛型 C/C++ 代码生成支持串行网络中的自定义层。 | 是 | 是 |
自定义输出层 | 所有输出层,包括通过使用 有关如何定义自定义分类输出层和指定损失函数的示例,请参阅 Define Custom Classification Output Layer (Deep Learning Toolbox)。 有关如何定义自定义回归输出层和指定损失函数的示例,请参阅 Define Custom Regression Output Layer (Deep Learning Toolbox)。 | 是 | 是 | 是 |
depthConcatenationLayer (Deep Learning Toolbox) | 深度串联层 | 是 | 是 | 是 |
depthToSpace2dLayer (Image Processing Toolbox) | 二维深度到空间层 | 是 | 是 | 是 |
dicePixelClassificationLayer (Computer Vision Toolbox) | Dice 像素分类层使用广义 Dice 损失为每个图像像素或体素提供分类标签。 | 否 | 是 | 是 |
dropoutLayer (Deep Learning Toolbox) | 丢弃层 | 是 | 是 | 是 |
eluLayer (Deep Learning Toolbox) | 指数线性单元 (ELU) 层 | 是 | 是 | 是 |
embeddingConcatenationLayer (Deep Learning Toolbox) | 嵌入串联层 | 是 | ||
featureInputLayer (Deep Learning Toolbox) | 特征输入层 | 是 | 是 | 是 |
flattenLayer (Deep Learning Toolbox) | 扁平化层 | 是 | 是 | 是 |
focalLossLayer (Computer Vision Toolbox) | 焦点损失层使用焦点损失预测对象类。 | 是 | 是 | 是 |
fullyConnectedLayer (Deep Learning Toolbox) | 全连接层 | 是 | 是 | 是 |
geluLayer (Deep Learning Toolbox) | 高斯误差线性单元 (GELU) 层 | 是 | 是 | 是 |
globalAveragePooling1dLayer (Deep Learning Toolbox) | 一维全局平均池化层 | 是 | ||
globalAveragePooling2dLayer (Deep Learning Toolbox) | 空间数据的全局平均池化层 | 是 | 是 | 是 |
globalMaxPooling1dLayer (Deep Learning Toolbox) | 一维全局最大池化层 | 是 | ||
globalMaxPooling2dLayer (Deep Learning Toolbox) | 二维全局最大池化层 | 是 | 是 | 是 |
| 二维分组卷积层
| 否 | 是 | 是
|
| 组归一化层 | 是 | 是 | 是 |
| 门控循环单元 (GRU) 层 | 是 | 是 | 是 |
| GRU 投影层 | 是 | 否 | 否 |
imageInputLayer (Deep Learning Toolbox) | 图像输入层
| 是 | 是 | 是 |
indexing1dLayer (Deep Learning Toolbox) | 一维索引层 | 是 | ||
layerNormalizationLayer (Deep Learning Toolbox) | 层归一化层 | 是 | 是 | 是 |
leakyReluLayer (Deep Learning Toolbox) | 泄漏修正线性单元 (ReLU) 层 | 是 | 是 | 是 |
lstmLayer (Deep Learning Toolbox) | 长短期记忆 (LSTM) 层 | 是 | 是 | 是 |
lstmProjectedLayer (Deep Learning Toolbox) | LSTM 投影层 | 是 | 否 | 否 |
maxPooling1dLayer (Deep Learning Toolbox) | 一维最大池化层 | 是 | ||
maxPooling2dLayer (Deep Learning Toolbox) | 最大池化层 如果在核窗口的非对角线上存在相等的最大值,则 | 是 | 是 | 是 |
maxUnpooling2dLayer (Deep Learning Toolbox) | 最大去池化层 如果在核窗口的非对角线上存在相等的最大值,则 | 否 | 是 | 否 |
multiplicationLayer (Deep Learning Toolbox) | 乘法层 | 是 | 是 | 是 |
patchEmbeddingLayer (Computer Vision Toolbox) | 补片嵌入层
| 是 | ||
pixelClassificationLayer (Computer Vision Toolbox) | 为语义分割创建像素分类层 | 否 | 是 | 是 |
positionEmbeddingLayer (Deep Learning Toolbox) | 将顺序或空间索引映射到向量。 | 是 | ||
rcnnBoxRegressionLayer (Computer Vision Toolbox) | Fast 和 Faster R-CNN 的框回归层 | 是 | 是 | 是 |
rpnClassificationLayer (Computer Vision Toolbox) | 区域提议网络 (RPN) 的分类层 | 否 | 是 | 是 |
regressionLayer (Deep Learning Toolbox) | 创建回归输出层 | 是 | 是 | 是 |
reluLayer (Deep Learning Toolbox) | 修正线性单元 (ReLU) 层 | 是 | 是 | 是 |
resize2dLayer (Image Processing Toolbox) | 二维调整大小层 | 是 | 是 | 是 |
scalingLayer (Reinforcement Learning Toolbox) | 执行器或评价器网络的缩放层 | 是 | 是 | 是 |
selfAttentionLayer (Deep Learning Toolbox) | 自注意力层
| 是 | ||
sigmoidLayer (Deep Learning Toolbox) | sigmoid 层 | 是 | 是 | 是 |
sequenceFoldingLayer (Deep Learning Toolbox) | 序列折叠层 | 否 | 是 | 是 |
sequenceInputLayer (Deep Learning Toolbox) | 序列输入层
| 是 | 是 | 是 |
sequenceUnfoldingLayer (Deep Learning Toolbox) | 序列展开层 | 否 | 是 | 是 |
softmaxLayer (Deep Learning Toolbox) | Softmax 层 | 是 | 是 | 是 |
softplusLayer (Reinforcement Learning Toolbox) | 执行器或评价器网络的 Softplus 层 | 是 | 是 | 是 |
spaceToDepthLayer (Image Processing Toolbox) | 空间到深度层 | 否 | 是 | 是 |
ssdMergeLayer (Computer Vision Toolbox) | 用于目标检测的 SSD 合并层 | 是 | 是 | 是 |
swishLayer (Deep Learning Toolbox) | Swish 层 | 是 | 是 | 是 |
| 在上界和下界之间裁剪输入 | 是 | 是 | 是 |
| 按 C 样式(行优先)顺序,将激活值扁平化为一维 | 是 | 是 | 是 |
nnet.keras.layer.GlobalAveragePooling2dLayer | 空间数据的全局平均池化层 | 是 | 是 | 是 |
| 参数化修正线性单元 | 是 | 是 | 是 |
| Sigmoid 激活层 | 是 | 是 | 是 |
| 双曲正切激活层 | 是 | 是 | 是 |
| 按输入层的 C 样式(即行优先)存储顺序,将输入图像序列扁平化为向量序列 | 是 | 是 | 是 |
| 二维输入的零填充层 | 是 | 是 | 是 |
| 在上界和下界之间裁剪输入 | 是 | 是 | 是 |
nnet.onnx.layer.ElementwiseAffineLayer | 对输入按元素进行缩放后再相加的层 | 是 | 是 | 是 |
| 以 ONNX 方式扁平化 MATLAB 二维图像批量,从而生成 | 是 | 是 | 是 |
| ONNX™ 网络的扁平化层 | 是 | 是 | 是 |
| 空间数据的全局平均池化层 | 是 | 是 | 是 |
| 实现 ONNX 恒等运算符的层 | 是 | 是 | 是 |
| 参数化修正线性单元 | 是 | 是 | 是 |
| Sigmoid 激活层 | 是 | 是 | 是 |
| 双曲正切激活层 | 是 | 是 | 是 |
| 验证固定批量大小 | 是 | 是 | 是 |
| 双曲正切 (tanh) 层 | 是 | 是 | 是 |
| 转置二维卷积层 代码生成不支持输入的不对称裁剪。例如,不支持为 | 否 | 是 | 是 |
| 单词嵌入层将单词索引映射到向量。
| 是 | 是 | 是 |
| YOLO v2 目标检测网络的输出层 | 否 | 是 | 是 |
| YOLO v2 目标检测网络的变换层 | 否 | 是 | 是 |
支持的类
类 | 描述 | 泛型 C/C++ | Intel MKL-DNN | ARM Compute Library |
---|---|---|---|---|
DAGNetwork (Deep Learning Toolbox) | 用于深度学习的有向无环图 (DAG) 网络
| 是 | 是 | 是 |
dlnetwork (Deep Learning Toolbox) | 用于自定义训练循环的深度学习网络
| 是 | 是 | 是 |
SeriesNetwork (Deep Learning Toolbox) | 用于深度学习的串行网络
| 是 | 是 | 是 |
| 使用 YOLO v2 目标检测器检测目标
| 否 | 是 | 是 |
| 使用 YOLO v3 目标检测器检测目标
| 是 | 是 | 是 |
yolov4ObjectDetector (Computer Vision Toolbox) | 使用 YOLO v4 目标检测器检测目标
| 是 | 是 | 是 |
yoloxObjectDetector (Computer Vision Toolbox) | 使用 YOLOX 目标检测器检测对象
| 否 | 是 | 是 |
ssdObjectDetector (Computer Vision Toolbox) | 使用基于 SSD 的检测器来检测目标的对象。
| 是 | 是 | 是 |
| 用于检测激光雷达点云中的目标的 PointPillars 网络
| 否 | 是 | 是 |
int8
代码生成
您可以将 Deep Learning Toolbox 与 Deep Learning Toolbox 模型量化库支持包结合使用,通过将卷积层的权重、偏置和激活量化为 8 位定标整数数据类型来减少深度神经网络的内存占用。然后,您可以使用 MATLAB Coder 来生成网络的优化代码。请参阅Generate int8 Code for Deep Learning Networks。
相关主题
- 预训练的深度神经网络 (Deep Learning Toolbox)
- 了解卷积神经网络 (Deep Learning Toolbox)
- 使用 MATLAB Coder 生成深度学习代码的工作流