dlnetwork
用于定制训练循环的深度学习网络
描述
一个dlnetwork
对象支持使用自动区分自定义训练循环。
提示
对于大多数深度学习任务,您可以使用预先训练的网络,并使其适应您自己的数据。有关演示如何使用迁移学习重新训练卷积神经网络对一组新图像进行分类的示例,请参见训练深度学习网络对新图像进行分类.或者,您可以使用layerGraph
的对象trainNetwork
而且trainingOptions
功能。
如果trainingOptions
函数没有提供任务所需的训练选项,那么可以使用自动区分创建自定义训练循环。要了解更多,请参见为自定义训练循环定义深度学习网络.
创建
语法
描述
中指定的网络层网
= dlnetwork (层
)层
一个初始化dlnetwork
对象,表示用于自定义训练循环的深度神经网络。层
可以是一个LayerGraph
对象或一个层
数组中。层
必须包含输入层。
一个初始化dlnetwork
对象已准备好进行训练。的可学习参数和状态值网
根据网络输入层定义的输入大小,使用初始值对训练进行初始化。
还设置了网
= dlnetwork (___、“OutputNames”名称)OutputNames
属性使用以前的任何语法。的OutputNames
属性指定返回网络输出的层。要设置输出名称,必须初始化网络。
的卷积层中删除为修剪所选择的过滤器网
= dlnetwork (prunableNet
)prunableNet
并返回压缩后的dlnetwork
具有较少可学习参数且大小较小的对象。
要修剪一个深度神经网络,你需要深度学习工具箱™模型量化库支持包。此支持包是一个免费的附加组件,您可以使用附加组件资源管理器下载。另外,看到深度学习工具箱量化模型库.
输入参数
层
- - - - - -网络层
LayerGraph
对象|层
数组
网络层,指定为LayerGraph
对象或作为层
数组中。
如果层
是一个层
数组,那么dlnetwork
功能将层串联起来。
网络层不能包含输出层。训练网络时,分别计算损失。
所支持的层的列表dlnetwork
,请参阅支持层.
X1,…,Xn
- - - - - -示例网络输入或数据布局
格式化dlarray
对象|格式化networkDataLayout
对象
示例网络输入或数据布局,指定为格式化dlarray
对象或格式化networkDataLayout
对象。软件的传播X1,…Xn
通过网络来确定适当的可学习的大小和格式以及状态参数dlnetwork
.
当层
是一个层
数组中提供示例输入的顺序与需要输入的层出现的顺序相同层
数组中。当层
是一个LayerGraph
对象中,以与需要输入的层相同的顺序提供示例输入层
财产的LayerGraph
.
时不支持示例输入特遣部队
是假的。
请注意
自动初始化只使用输入数据的大小和格式信息。对于依赖于输入数据上的值的初始化,必须手动初始化可学习参数。
特遣部队
- - - - - -返回初始化的标志dlnetwork
1
(真正的)(默认)|0
(假)
返回初始化的标志dlnetwork
,指定为数字或逻辑1
(真正的)或0
(假)。
如果特遣部队
是1
的可学习参数和状态参数初始化网
根据网络输入层或提供的示例输入,提供用于训练的初始值。
如果特遣部队
是0
,则软件不初始化可学习参数和状态参数。在使用未初始化的网络之前,必须首先使用初始化
函数。时不支持示例输入特遣部队
是假的。
prunableNet
- - - - - -利用一阶泰勒近似进行网络修剪
TaylorPrunableNetwork
对象
使用一阶泰勒近似进行修剪的网络,指定为aTaylorPrunableNetwork
对象。
属性
层
- - - - - -网络层
层
数组
此属性是只读的。
网络层,指定为层
数组中。
连接
- - - - - -层连接
表格
此属性是只读的。
层连接,指定为一个有两列的表。
每个表行表示层图中的一个连接。第一列,源
,指定每个连接的源。第二列,目的地
,指定每个连接的目的地。连接源和目的地要么是层名,要么具有表单“layerName / IOName”
,在那里“IOName”
是层输入或输出的名称。
数据类型:表格
可学的
- - - - - -网络可学的参数
表格
网络可学习参数,指定为一个有三列的表:
层
-层名,指定为字符串标量。参数
-参数名称,指定为字符串标量。价值
-参数的值,指定为dlarray
对象。
网络可学习参数包含了网络学习到的特征。例如,卷积和全连通层的权值。
数据类型:表格
InputNames
- - - - - -网络输入层名称
字符向量的单元格数组
此属性是只读的。
网络输入层名称,指定为字符向量的单元格数组。
数据类型:细胞
初始化
- - - - - -初始化网络的标志
0
(假)|1
(真正的)
此属性是只读的。
初始化网络的标志,指定为0
(虚假的)或1
(真正的)。
如果初始化
是0
(false)表示网络未初始化。在使用网络之前,必须初始化网络。方法初始化网络初始化
函数。
如果初始化
是1
(true),网络初始化,可用于训练和推理。如果您更改了可学习参数的值—例如,在训练期间—的值初始化
仍然是1
(真正的)。
数据类型:逻辑
对象的功能
预测 |
计算用于推理的深度学习网络输出 |
向前 |
计算用于训练的深度学习网络输出 |
初始化 |
初始化的可学习参数和状态参数dlnetwork |
layerGraph |
用于深度学习的网络层图 |
setL2Factor |
设置层可学习参数的L2正则化因子 |
setLearnRateFactor |
设置层可学习参数的学习率因子 |
getLearnRateFactor |
得到层可学习参数的学习率因子 |
getL2Factor |
得到层可学习参数的L2正则化因子 |
resetState |
重置神经网络状态参数 |
情节 |
图神经网络结构 |
addInputLayer |
添加网络输入层 |
addLayers |
添加图层到图层图或网络 |
removeLayers |
从图层图或网络中删除图层 |
connectLayers |
在层图或网络中连接层 |
disconnectLayers |
断开层图或网络中的层 |
replaceLayer |
替换层中的层图或网络 |
总结 |
打印网络总结 |
例子
将预训练网络转换为dlnetwork
对象
要为网络实现自定义训练循环,首先要将其转换为dlnetwork
对象。不包含输出层dlnetwork
对象。相反,您必须在自定义训练循环中指定损失函数。
加载一个预先训练的GoogLeNet模型googlenet
函数。此功能需要深度学习工具箱™模型GoogLeNet网络支持包。如果没有安装此支持包,则该功能提供下载链接。
网= googlenet;
将网络转换为层图,并删除用于分类使用的层removeLayers
.
lgraph = layerGraph(净);lgraph = removeLayers (lgraph, (“概率”“输出”]);
将网络转换为adlnetwork
对象。
dlnet = dlnetwork (lgraph)
dlnet = dlnetwork with properties: Layers: [142x1 nnet.cnn.layer.Layer] Connections: [168x2 table] Learnables: [116x3 table] State: [0x3 table] InputNames: {'data'} OutputNames: {'loss3-classifier'} Initialized: 1查看summary with summary。
创建初始化dlnetwork
与无关的输入
使用网络数据布局对象创建多输入dlnetwork
这样就可以训练了。该软件使用大小和格式信息来确定适当的大小和格式的可学习和状态参数dlnetwork
.
定义网络架构。构建一个有两个分支的网络。网络接受两个输入,每个分支有一个输入。使用附加层连接分支。
numFilters = 24;layersBranch1 = [convolution2dLayer(3,6*numFilters,Padding= .“相同”步= 2)groupNormalizationLayer (“所有渠道”) reluLayer convolution2dLayer (3 numFilters填充=“相同”) groupNormalizationLayer (“channel-wise”) additionLayer (Name =“添加”) reluLayer fullyConnectedLayer(10) softmaxLayer];layersBranch2 = [convolution2dLayer(1,numFilters) groupNormalizationLayer(“所有渠道”、名称=“gnBranch2”));lgraph = layerGraph (layersBranch1);lgraph = addLayers (lgraph layersBranch2);lgraph = connectLayers (lgraph,“gnBranch2”,“添加/ in2”);
创建表示典型网络输入的大小和格式的网络数据布局对象。对于这两个输入,使用批处理大小为32。使用一个大小为64 × 64的输入,为第一个分支中的卷积层提供三个通道。对于第二个分支中的卷积层,使用一个64 × 64的18通道的输入。
X1 = dlarray(rand([64 64 3 32]),“SSCB”);X2 = dlarray(rand([32 32 18 32]),“SSCB”);
创建dlnetwork
.控件中未连接层的顺序提供输入层
的属性lgraph
.
网= dlnetwork (lgraph (X1, X2);
检查网络是否已初始化并为训练做好了准备初始化
网络属性。
网初始化
ans =逻辑1
使用自定义训练循环训练网络
这个例子展示了如何训练一个使用自定义学习速率计划对手写数字进行分类的网络。
你可以训练大多数类型的神经网络使用trainNetwork
而且trainingOptions
功能。如果trainingOptions
函数没有提供所需的选项(例如,自定义学习速率计划),那么您可以使用dlarray
而且dlnetwork
对象自动区分。举个例子,展示如何使用trainNetwork
功能,请参阅使用预训练网络的迁移学习.
训练深度神经网络是一项优化任务。把神经网络看作一个函数 ,在那里 是网络输入,和 是否设置了可学习的参数,可以进行优化 根据训练数据,最小化了一些损失值。例如,优化可学习参数 这样对于一个给定的输入 有相应的目标 ,它们将预测之间的误差最小化 而且 .
所使用的损失函数取决于任务的类型。例如:
对于分类任务,可以最小化预测和目标之间的交叉熵误差。
对于回归任务,您可以最小化预测和目标之间的均方误差。
你可以使用梯度下降来优化目标:减少损失 通过迭代更新可学习参数 通过使用损失相对于可学习参数的梯度,逐步向最小值迈进。梯度下降算法通常通过使用表单更新步骤的变体来更新可学习参数 ,在那里 为迭代次数, 是学习率,和 表示梯度(损失对可学习参数的导数)。
方法训练网络对手写数字进行分类基于时间的衰减学习率计划:对于每一次迭代,求解器使用给定的学习率 ,在那里t为迭代次数, 是初始学习率,和k是衰减的。
负荷训练数据
方法将数字数据加载为图像数据存储imageDatastore
函数并指定包含图像数据的文件夹。
dataFolder = fullfile (toolboxdir (“nnet”),“nndemos”,“nndatasets”,“DigitDataset”);imd = imageDatastore (dataFolder,...IncludeSubfolders = true,....LabelSource =“foldernames”);
将数据划分为训练集和验证集。方法预留10%的数据用于验证splitEachLabel
函数。
[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.9,“随机”);
本例中使用的网络需要输入大小为28 × 28 × 1的图像。若要自动调整训练图像的大小,请使用增强图像数据存储。指定要在训练图像上执行的附加增强操作:在水平轴和垂直轴上随机地将图像平移到5个像素。数据增强有助于防止网络过拟合和记忆训练图像的精确细节。
inputSize = [28 28 1];pixelRange = [-5 5];imageAugmenter = imageDataAugmenter (...RandXTranslation = pixelRange,...RandYTranslation = pixelRange);augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain, DataAugmentation = imageAugmenter);
若要自动调整验证图像的大小而不执行进一步的数据增强,请使用增强图像数据存储而不指定任何额外的预处理操作。
augimdsValidation = augmentedImageDatastore (inputSize (1:2), imdsValidation);
确定训练数据中的类的数量。
类=类别(imdsTrain.Labels);numClasses =元素个数(类);
定义网络
为图像分类定义网络。
对于图像输入,指定输入大小与训练数据匹配的图像输入层。
不归一化图像输入,设置
归一化
输入层的选项“没有”
.指定三个卷积-batchnorm- relu块。
将输入填充到卷积层,以便输出具有相同的大小
填充
选项“相同”
.对于第一个卷积层,指定20个大小为5的过滤器。对于剩余的卷积层,指定20个大小为3的过滤器。
对于分类,指定一个完全连接层,其大小与类的数量匹配
为了将输出映射到概率,需要包含一个softmax层。
当使用自定义训练循环训练网络时,不要包含输出层。
layers = [imageInputLayer(inputSize, normalized = .“没有”) convolution2dLayer(5、20、填充=“相同”) batchNormalizationLayer reluLayer convolution2dLayer(3,20,Padding= .“相同”) batchNormalizationLayer reluLayer convolution2dLayer(3,20,Padding= .“相同”) batchNormalizationLayer reluLayer fulllyconnectedlayer (numClasses) softmaxLayer];
创建一个dlnetwork
对象。
净= dlnetwork(层)
层:[12×1 nnet.cnn.layer.Layer] Connections: [11×2 table] Learnables: [14×3 table] State: [6×3 table] InputNames: {'imageinput'} OutputNames: {'softmax'} Initialized: 1用summary查看摘要。
定义模型损失函数
训练深度神经网络是一项优化任务。把神经网络看作一个函数 ,在那里 是网络输入,和 是否设置了可学习的参数,可以进行优化 根据训练数据,最小化了一些损失值。例如,优化可学习参数 这样对于一个给定的输入 有相应的目标 ,它们将预测之间的误差最小化 而且 .
创建函数modelLoss
,列于损失函数模型部分,它将作为输入dlnetwork
对象,它是具有相应目标的输入数据的小批处理,并返回损耗、损耗相对于可学习参数的梯度和网络状态。
指定培训选项
训练10个周期,小批次大小为128。
numEpochs = 10;miniBatchSize = 128;
指定SGDM优化的选项。指定初始学习速率为0.01,衰减为0.01,动量为0.9。
initialLearnRate = 0.01;衰变= 0.01;动量= 0.9;
火车模型
创建一个minibatchqueue
对象,该对象在训练期间处理和管理小批量图像。为每个mini-batch:
使用自定义的小批量预处理功能
preprocessMiniBatch
(在本例末尾定义)将标签转换为单热编码变量。用尺寸标签格式化图像数据
“SSCB”
(空间,空间,渠道,批处理)。默认情况下,minibatchqueue
对象将数据转换为dlarray
具有基础类型的对象单
.不要格式化类标签。如果有GPU,请使用GPU进行训练。默认情况下,
minibatchqueue
对象将每个输出转换为gpuArray
如果有可用的GPU。使用GPU需要并行计算工具箱™和支持的GPU设备。有关支持的设备的信息,请参见GPU计算的需求(并行计算工具箱).
兆贝可= minibatchqueue (augimdsTrain,...MiniBatchSize = MiniBatchSize,...MiniBatchFcn = @preprocessMiniBatch,...MiniBatchFormat = [“SSCB”""]);
初始化SGDM求解器的速度参数。
速度= [];
计算训练进度监视器的总迭代次数。
numObservationsTrain =元素个数(imdsTrain.Files);numIterationsPerEpoch = ceil(numObservationsTrain / miniBatchSize);numIterations = numEpochs * numIterationsPerEpoch;
初始化TrainingProgressMonitor
对象。因为计时器在创建监视器对象时开始,所以要确保创建的对象接近训练循环。
监控= = trainingProgressMonitor(指标“损失”信息= (“时代”,“LearnRate”),包含=“迭代”);
使用自定义训练循环训练网络。对于每个历元,洗牌数据并遍历小批数据。为每个mini-batch:
评估模型损失,梯度和状态使用
dlfeval
而且modelLoss
功能,并更新网络状态。为基于时间的衰减学习率时间表确定学习率。
更新网络参数
sgdmupdate
函数。更新训练进度监视器中的损耗、学习速率和epoch值。
如果Stop属性为真,则停止。对象的Stop属性值
TrainingProgressMonitor
对象在单击Stop按钮时更改为true。
时代= 0;迭代= 0;循环遍历各个时代。而epoch < numEpochs && ~monitor。停止epoch = epoch + 1;%洗牌数据。洗牌(兆贝可);在小批量上循环。而hasdata(兆贝可)& & ~班长。停止迭代=迭代+ 1;读取小批数据。[X, T] =下一个(兆贝可);评估模型的梯度,状态和损失使用dlfeval和% modelLoss函数,并更新网络状态。(损失、渐变、状态)= dlfeval (@modelLoss,净,X, T);网=状态;为基于时间的衰减学习率时间表确定学习率。learnRate = initialLearnRate/(1 + decay*iteration);使用SGDM优化器更新网络参数。(净、速度)= sgdmupdate(净、渐变速度,learnRate动量);更新培训进度监视器。recordMetrics(监控、迭代损失=损失);updateInfo(监控、时代=时代LearnRate = LearnRate);班长。进度= 100 *迭代/numIterations;结束结束
测试模型
通过将验证集上的预测结果与真实标签进行比较,检验模型的分类精度。
训练后,对新数据进行预测不需要标签。创建minibatchqueue
对象,该对象只包含测试数据的预测符:
要忽略用于测试的标签,请将迷你批处理队列的输出数量设置为1。
指定与培训时相同的小批大小。
方法对预测器进行预处理
preprocessMiniBatchPredictors
函数,在示例末尾列出。对于数据存储的单个输出,指定小批处理格式
“SSCB”
(空间,空间,渠道,批处理)。
numOutputs = 1;mbqTest = minibatchqueue (augimdsValidation numOutputs,...MiniBatchSize = MiniBatchSize,...MiniBatchFcn = @preprocessMiniBatchPredictors,...MiniBatchFormat =“SSCB”);
循环使用小批次并对图像进行分类modelPredictions
函数,在示例末尾列出。
欧美= modelPredictions(净、mbqTest、类);
评估分类的准确性。
tt = imdsValidation.Labels;精度=平均值(TTest == YTest)
精度= 0.9750
在困惑图表中可视化预测。
次图confusionchart (tt)
对角线上的大值表示对对应类的准确预测。非对角线上的大值表示对应类之间存在很强的混淆。
支持功能
损失函数模型
的modelLoss
函数接受一个dlnetwork
对象网
,一个小批量的输入数据X
与相应的目标T
并返回损失,损失相对于可学习参数的梯度网
、网络状态。方法可自动计算梯度dlgradient
函数。
函数(损失、渐变、状态)= modelLoss(净,X, T)通过网络转发数据。[Y,状态]=前进(净,X);计算交叉熵损失。损失= crossentropy (Y, T);计算相对于可学习参数的损失梯度。。梯度= dlgradient(损失、net.Learnables);结束
模型的预测函数
的modelPredictions
函数接受一个dlnetwork
对象网
,一个minibatchqueue
的输入数据兆贝可
,并通过迭代所有数据来计算模型预测minibatchqueue
对象。函数使用onehotdecode
函数求出预测分数最高的班级。
函数Y = modelforecasts (net,mbq,classes) Y = [];在小批量上循环。而hasdata(mbq) X = next(mbq);%进行预测。成绩=预测(净,X);解码标签并附加到输出。标签= onehotdecode(成绩、类1)';Y = [Y;标签);结束结束
小批量预处理功能
的preprocessMiniBatch
函数使用以下步骤预处理一小批预测器和标签:
方法对图像进行预处理
preprocessMiniBatchPredictors
函数。从传入的单元格数组中提取标签数据,并沿着二次元连接到一个分类数组中。
一热编码类别标签到数字数组。对第一个维度进行编码会生成一个与网络输出形状匹配的编码数组。
函数[X, T] = preprocessMiniBatch (dataX人数()%预处理预测。X = preprocessMiniBatchPredictors (dataX);从单元格中提取标签数据并连接。猫(T = 2,人数({1:结束});单热编码标签。T = onehotencode (T, 1);结束
小批量预测器预处理函数
的preprocessMiniBatchPredictors
函数通过从输入单元格数组中提取图像数据并连接到数值数组来预处理小批预测器。对于灰度输入,在第四个维度上的连接将为每个图像添加第三个维度,以用作单通道维度。
函数X = preprocessMiniBatchPredictors (dataX)%连接。猫(X = 4, dataX{1:结束});结束
的可学习参数冻结dlnetwork
对象
加载预训练的网络。
网= squeezenet;
将网络转换为层图,删除输出层,并将其转换为dlnetwork
对象。
lgraph = layerGraph(净);lgraph = removeLayers (lgraph,“ClassificationLayer_predictions”);dlnet = dlnetwork (lgraph);
的可学的
财产的dlnetwork
对象是一个包含网络可学习参数的表。该表在单独的行中包含嵌套层的参数。查看可学习表的前几行。
可学的= dlnet.Learnables;头(可学的)
层参数值 __________________ _________ ___________________ " conv1”“权重”{3 x3x3x64 dlarray}“conv1”“偏见”{1 x1x64 dlarray}“fire2-squeeze1x1”“权重”{1 x1x64x16 dlarray}“fire2-squeeze1x1”“偏见”{1 x1x16 dlarray}“fire2-expand1x1”“权重”{1 x1x16x64 dlarray}“fire2-expand1x1”“偏见”{1 x1x64 dlarray}“fire2-expand3x3”“权重”{3 x3x16x64 dlarray}“fire2-expand3x3”“偏见”{1 x1x64 dlarray}
方法来冻结网络的可学习参数,循环遍历可学习参数并将学习速率设置为0setLearnRateFactor
函数。
因素= 0;numLearnables =大小(可学的,1);为i = 1:numLearnables layerName = learnables.Layer(i);parameterName = learnables.Parameter(我);dlnet = setLearnRateFactor (dlnet, layerName、parameterName因素);结束
要在训练时使用更新的学习速率因子,必须在自定义训练循环中将dlnetwork对象传递给更新函数。例如,使用命令
[dlnet、速度]= sgdmupdate (dlnet、渐变速度);
创建未初始化dlnetwork
创建一个未初始化的dlnetwork
对象,没有输入层。创建一个未初始化的dlnetwork
在您还不知道网络输入的大小和格式时(例如dlnetwork
嵌套在自定义层中。
定义网络层。该网络只有一个输入,没有连接到输入层。
layers = [convolution2dLayer(5,20) batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer];
创建一个未初始化的dlnetwork
.设置初始化
选项假
.
dlnet = dlnetwork(层,“初始化”、假);
检查网络是否未初始化。
dlnet。初始化
ans =逻辑0
该网络的可学习参数和状态参数没有初始化进行训练。要初始化网络,请使用初始化
函数。
如果你想用dlnet
方法直接在自定义训练循环中,然后可以使用初始化
函数并提供示例输入。
如果你想用dlnet
在自定义层中,您可以利用自动初始化的优势。如果使用自定义层内部的dlnetwork
,然后dlnet
是初始化时的父dlnetwork
是否被构造(或者如果父网络被构造为未初始化的dlnetwork
).方法训练的网络中使用自定义层trainNetwork
函数,那么dlnet
在训练时自动初始化。有关更多信息,请参见深度学习网络构成.
更多关于
支持层
的dlnetwork
函数支持下面列出的层和自定义层,而没有转发函数返回非空内存值。
层 | 描述 |
---|---|
图像输入层向网络输入二维图像,并应用数据归一化。 | |
三维图像输入层向网络输入三维图像或卷,并应用数据归一化。 | |
序列输入层向网络输入序列数据。 | |
特征输入层向网络输入特征数据并进行数据规范化。当您拥有表示特征的数值标量数据集(没有空间或时间维度的数据)时,请使用此层。 |
层 | 描述 |
---|---|
一维卷积层对一维输入应用滑动卷积滤波器。 | |
二维卷积层对二维输入应用滑动卷积滤波器。 | |
三维卷积层将滑动立方卷积滤波器应用于三维输入。 | |
二维分组卷积层将输入通道分组,并应用滑动卷积滤波器。使用分组卷积层进行通道可分(也称为深度可分)卷积。 | |
一个转置的二维卷积层对二维特征映射进行采样。 | |
一个转置的三维卷积层对三维特征图进行采样。 | |
全连接层将输入乘以一个权重矩阵,然后添加一个偏置向量。 |
层 | 描述 |
---|---|
序列输入层向网络输入序列数据。 | |
LSTM层学习时间序列和序列数据中时间步之间的长期依赖关系。 | |
LSTM投影层使用投影可学习权学习时间序列和序列数据中时间步骤之间的长期依赖关系。 | |
双向LSTM (BiLSTM)层学习时间序列或序列数据的时间步之间的双向长期依赖关系。当您希望网络在每个时间步中从完整的时间序列中学习时,这些依赖关系可能很有用。 | |
GRU层学习时间序列和序列数据中时间步骤之间的依赖关系。 | |
压平层将输入的空间维度折叠为通道维度。 |
为lstmLayer
,bilstmLayer
,gruLayer
对象,dlnetwork
对象支持具有默认值的层StateActivationFunction
而且GateActivationFunction
属性。
层 | 描述 |
---|---|
ReLU层对输入的每个元素执行阈值操作,其中任何小于零的值都被设置为零。 | |
泄漏的ReLU层执行阈值操作,其中任何小于零的输入值都乘以一个固定的标量。 | |
剪切的ReLU层执行阈值操作,其中小于零的输入值被设置为零,高于的输入值被设置为零剪裁天花板被设置在那个天花板上。 | |
ELU激活层对正输入执行标识运算,对负输入执行指数非线性。 | |
高斯误差线性单元(GELU)层根据其在高斯分布下的概率对输入进行加权。 | |
swish激活层对层输入应用swish函数。 | |
双曲正切(tanh)激活层在层输入上应用tanh函数。 | |
softmax层对输入应用softmax函数。 | |
sigmoid层对输入应用sigmoid函数,使得输出在区间(0,1)内有界。 | |
函数层将指定的函数应用于层输入。 |
层 | 描述 |
---|---|
批处理归一化层独立地对每个通道的所有观察数据进行小批处理。为了加快卷积神经网络的训练并降低网络初始化的敏感性,可以在卷积层和非线性层之间使用批处理归一化层,如ReLU层。 | |
组归一化层针对每个观察独立地跨分组子集通道归一化一个小批数据。为了加快卷积神经网络的训练速度,降低网络初始化的敏感性,可以在卷积层和非线性层之间使用分组归一化层,如ReLU层。 | |
一个层归一化层独立地对每个观测的所有通道的小批数据进行归一化。为了加快循环和多层感知器神经网络的训练,降低网络初始化的敏感性,可以在可学习层之后使用层归一化层,如LSTM和全连接层。 | |
通道级本地响应(跨通道)规范化层执行通道级规范化。 |
层 | 描述 |
---|---|
dropout层以给定的概率将输入元素随机设置为零。 | |
二维作物层将二维裁剪应用于输入。 | |
|
STFT层计算输入的短时傅里叶变换。 |
|
CWT层计算输入的CWT。 |
|
MODWT层计算输入的MODWT和MODWT多分辨率分析(MRA)。 |
层 | 描述 |
---|---|
一维平均池化层通过将输入划分为一维池化区域,然后计算每个区域的平均值来执行下采样。 | |
二维平均池化层通过将输入划分为矩形池化区域,然后计算每个区域的平均值来执行下采样。 | |
三维平均池化层通过将三维输入划分为立方池化区域进行下采样,然后计算每个区域的平均值。 | |
一维全局平均池化层通过输出输入的时间或空间维度的平均值来执行下采样。 | |
二维全局平均池化层通过计算输入的高度和宽度维度的平均值来执行下采样。 | |
一个三维全局平均池层通过计算输入的高度、宽度和深度维度的平均值来执行下采样。 | |
一维最大池化层通过将输入划分为一维池化区域,然后计算每个区域的最大值来执行下采样。 | |
二维最大池化层通过将输入划分为矩形池化区域,然后计算每个区域的最大值来执行下采样。 | |
三维最大池化层通过将三维输入划分为立方池化区域进行下采样,然后计算每个区域的最大值。 | |
一维全局最大池化层通过输出输入的时间或空间维度的最大值来执行下采样。 | |
二维全局最大池化层通过计算输入的高度和宽度维度的最大值来执行下采样。 | |
一个三维全局最大池化层通过计算输入的高度、宽度和深度维度的最大值来执行下采样。 | |
二维最大反池层将二维最大反池层的输出反池。 |
层 | 描述 |
---|---|
添加层按元素添加来自多个神经网络层的输入。 | |
乘法层将来自多个神经网络层的输入按元素相乘。 | |
深度连接层接受具有相同高度和宽度的输入,并沿第三维度(通道维度)将它们连接起来。 | |
连接层接受输入并沿着指定的维度连接它们。除了连接维度外,所有维度的输入必须具有相同的大小。 |
扩展功能
C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
代码生成只支持
InputNames
而且OutputNames
属性。的
初始化
财产的dlnetwork
对象必须设置为true。的代码
dlnetwork
有矢量或图像序列输入。的手臂®计算,dlnetwork
可以有序列和非序列输入层。对于英特尔®MKL-DNN,输入层必须是所有序列输入层。代码生成支持包括:dlarray
包含向量序列“CT”
或“认知行为治疗”
数据格式。dlarray
包含的图像序列“SSCT”
或“SSCBT”
数据格式。多输入
dlnetwork
使用异构输入层。对于RNN网络,不支持多重输入。
代码生成只支持
预测
对象的功能。的dlarray
的输入预测
方法必须是单
数据类型。代码生成支持MIMO
dlnetworks
.创建一个
dlnetwork
对象用于代码生成,请参见为代码生成加载预先训练的网络(MATLAB编码器).
GPU的代码生成
使用GPU Coder™为NVIDIA GPU生成CUDA®代码。
使用注意事项和限制:
代码生成只支持
InputNames
而且OutputNames
属性。的
初始化
财产的dlnetwork
对象必须设置为true。的代码
dlnetwork
有矢量和图像序列输入。代码生成支持包括:dlarray
包含向量序列“CT”
或“认知行为治疗”
数据格式。dlarray
包含的图像序列“SSCT”
或“SSCBT”
数据格式。多输入
dlnetwork
使用异构输入层。对于RNN网络,不支持多重输入。
代码生成只支持
预测
对象的功能。的dlarray
的输入预测
方法必须是单
数据类型。代码生成支持
dlnetwork
对于cuDNN和TensorRT目标。不支持代码生成dlnetwork
针对ARM马里的目标。当瞄准TensorRT时
INT8
精度,网络的最后一层必须是一个softmaxLayer
层。代码生成支持MIMO
dlnetworks
.创建一个
dlnetwork
对象用于代码生成,请参见为代码生成加载预先训练的网络(GPU编码器).
版本历史
介绍了R2019bR2021a:dlnetwork
状态值dlarray
对象
的状态
的dlnetwork
对象是一个表,其中包含网络中每一层的状态参数名称和值。
从R2021a开始,状态值为dlarray
对象。此更改可以在使用时提供更好的支持AcceleratedFunction
对象。对于输入值频繁变化的深度学习函数,例如包含网络状态的输入,必须将频繁变化的值指定为dlarray
对象。
在以前的版本中,状态值是数值数组。
在大多数情况下,您不需要更新代码。方法从状态值中手动提取数据,如果代码要求状态值为数值数组,则要再现前面的行为extractdata
函数与dlupdate
函数。
状态= dlupdate (@extractdata net.State);
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。