用于自定义训练循环的深度学习网络
一个dlnetwork
对象能够使用自动分化定制培训圈万博1manbetx的支持。
对于大多数深度学习任务,您可以使用一个预先训练好的网络,并根据您自己的数据进行调整。有关如何使用传输学习重新训练卷积神经网络对新图像进行分类的示例,请参见火车深学习网络分类新形象。或者,你可以创建和使用从头开始培训网络layerGraph
的对象trainNetwork
和trainingOptions
功能。
如果trainingOptions
函数不提供任务所需的训练选项,然后可以使用自动区分创建自定义训练循环。想了解更多,请看定义自定义训练循环。
lgraph
- - - - - -网络体系结构layerGraph
对象层
- - - - - -网络层层
排列网络层,指定为层
数组中。
连接
- - - - - -层连接层连接,指定为具有两列的表。
每个表行表示层图中的一个连接。第一列,资源
中,指定各个连接的源。第二列,目的地
,指定每个连接的目标。连接源和目标要么是层名称,要么是表单“layerName / IOName”
,在那里'IOName'
是层输入或输出的名称。
数据类型:表格
可学的
- - - - - -网络可学的参数网络可学习参数,指定为一个具有三列的表:
层
-层名称,指定为字符串标量。
参数
- 参数名称,指定为字符串标量。
价值
-参数的值,指定为adlarray
。
网络可学习参数包含了网络学习的特征。例如,卷积和全连通层的权值。
数据类型:表格
InputNames
- - - - - -网络输入层名称网络输入层名称,指定为字符向量的单元数组。
数据类型:细胞
OutputNames
- - - - - -网络输出层名称网络输出层名称,指定为单元数组的字符向量。此属性包括具有断开连接的输出的所有层。如果一个层有多个输出,则断开连接的输出被指定为'layerName / outputName'
。
数据类型:细胞
向前 |
计算深学习培训网络输出 |
预测 |
计算用于推理的深度学习网络输出 |
layerGraph |
用于深度学习的网络层图 |
dlnetwork
宾语要为您的网络实现自定义训练循环,首先将其转换为dlnetwork
对象。在?中不包括输出层dlnetwork
对象。相反,您必须在自定义训练循环中指定loss函数。
使用加载预训练GoogLeNet模型googlenet
函数。此函数需要深度学习工具箱模型GoogLeNet网络万博1manbetx支持包。如果未安装此支持万博1manbetx包,则该函数提供下载链接。
网= googlenet;
将网络转换为层图,并删除用于分类的层removeLayers
。
lgraph = layerGraph(净);lgraph = removeLayers (lgraph, (“概率”“输出”]);
转换网络的dlnetwork
对象。
dlnet = dlnetwork (lgraph)
[168x2 table] . Learnables: [116x3 table] State: [0x3 table] InputNames: {'data'} OutputNames: {'loss3-classifier'}
这个例子显示了如何培养一个网络,以进行分类定制学习费率表手写的数字。
如果trainingOptions
不提供所需的选项(例如,自定义学习速率计划),则可以使用自动微分定义自己的自定义训练循环。
此示例训练网络使用。对手写数字进行分类基于时间的衰减学习率调度:对于每个迭代,求解器使用给定的学习率 ,在那里t为迭代次数, 为初始学习率,k是衰减的。
负荷训练数据
加载数字数据。
[XTrain, YTrain] = digitTrain4DArrayData;类=类别(YTrain);numClasses =元素个数(类);
定义网络
方法定义网络并指定平均映像'意思'
选项,在图像输入层。
层= [imageInputLayer([28 28 1],“名字”,“输入”,'意思',平均(XTrain,4))convolution2dLayer(5,20,“名字”,“conv1”)batchNormalizationLayer (“名字”,“bn1”)reluLayer (“名字”,'relu1')convolution2dLayer(3,20,“填充”,1“名字”,“conv2”)batchNormalizationLayer (“名字”,“bn2”)reluLayer (“名字”,“relu2”)convolution2dLayer(3,20,“填充”,1“名字”,“conv3”)batchNormalizationLayer (“名字”,“bn3”)reluLayer (“名字”,“relu3”)fullyConnectedLayer (numClasses“名字”,“俱乐部”)softmaxLayer (“名字”,“softmax”));lgraph = layerGraph(层);
创建一个dlnetwork
从该层图形对象。
dlnet = dlnetwork (lgraph)
[11×2表格]. Learnables:[14×3表格]State:[6×3表格]InputNames: {'input'} OutputNames: {'softmax'}
定义模式渐变功能
创建函数modelGradients
,列在例子的最后,它取adlnetwork
对象dlnet
中,小批量的输入数据的dlX
与相应的标签Y
并返回损失的梯度相对于所述可学习参数在dlnet
以及相应的损失。
指定培训选项
以128个小批大小进行5个epoch的训练。
numEpochs = 5;miniBatchSize = 128;
指定SGDM优化的选项。指定初始学习速率为0.01,衰减为0.01,动量为0.9。
initialLearnRate = 0.01;衰变= 0.01;动量= 0.9;
将训练过程形象化。
情节=“训练进步”;
在GPU上火车(如果可用)。使用GPU需要并行计算工具箱™和启用CUDA®GPUNVIDIA®计算能力3.0或更高版本。
executionEnvironment =“汽车”;
火车模型
使用自定义训练循环训练模型。
对于每个epoch,重新洗牌数据并在小批数据上进行循环。在每个epoch的末尾,显示训练进度。
为每个mini-batch:
转换的标签,以虚拟变量。
转换的数据dlarray
具有基础类型single的对象,并指定维度标签“SSCB”
(空间,空间,渠道,批)。
对于GPU训练,转换成gpuArray
对象。
使用评估模型梯度、状态和损失dlfeval
和modelGradients
函数并更新网络状态。
确定基于时间的衰减学习税率表的学习速度。
使用。更新网络参数sgdmupdate
函数。
初始化训练进度图。
如果情节= =“训练进步”figure lineLossTrain = animatedline('颜色'[0.85 0.325 0.098]);ylim([0正])包含(“迭代”)ylabel (“损失”)网格在结束
初始化SGDM求解器的速度参数。
速度= [];
培训网络。
numObservations =元素个数(YTrain);numIterationsPerEpoch =地板(numObservations. / miniBatchSize);迭代= 0;开始=抽搐;循环超过epoch。为时代= 1:numEpochs%洗牌数据。idx = randperm(元素个数(YTrain));XTrain = XTrain (:,:,:, idx);YTrain = YTrain (idx);对小批进行循环。为i = 1:numIterationsPerEpoch iteration = iteration + 1;读取小批数据并将标签转换为哑标签%变量。idx =(张)* miniBatchSize + 1:我* miniBatchSize;X = XTrain (:,:,:, idx);Y = 0 (numClasses, miniBatchSize,“单一”);为c = 1:numClasses Y(c,YTrain(idx)==classes(c)) = 1;结束%转换小批量数据的dlarray。dlX = dlarray(单(X),“SSCB”);%如果在GPU训练,然后数据转换为gpuArray。如果(executionEnvironment = =“汽车”&& canUseGPU) ||执行环境==“图形”dlX = gpuArray (dlX);结束%使用dlfeval和the评估模型梯度、状态和损失% modelGradients函数和更新网络状态。(渐变、州损失)= dlfeval (@modelGradients, dlnet dlX Y);dlnet。状态=state;%确定基于时间的衰减学习速率计划的学习速率。learnRate = initialLearnRate /(1 +衰变*迭代);使用SGDM优化器更新网络参数。[dlnet,速度] = sgdmupdate(dlnet,梯度,速度,learnRate,动量);%显示培训进度。如果情节= =“训练进步”D =持续时间(0,0,toc(开始),“格式”,“hh: mm: ss”);addpoints (lineLossTrain、迭代、双(收集(extractdata(损失))))标题(”时代:“+时代+”,过去:“+ drawnow字符串(D))结束结束结束
测试模型
通过比较测试集上的预测与真实标签来测试模型的分类准确性。
[XTEST,YTest] = digitTest4DArrayData;
将数据转换为adlarray
与尺寸格式对象“SSCB”
。对于GPU的预测,也可以将数据转换为gpuArray
。
dlXTest = dlarray (XTest,“SSCB”);如果(executionEnvironment = =“汽车”&& canUseGPU) ||执行环境==“图形”dlXTest = gpuArray (dlXTest);结束
使用以下方法对图像进行分类modelPredictions
函数,列于示例的末尾并查找得分最高的类。
dlYPred = modelPredictions (dlnet dlXTest miniBatchSize);[~,idx] = max (extractdata (dlYPred), [], 1);YPred =类(idx);
评估分类精度。
准确度=平均值(YPred == YTest)
精度= 0.9910
模型梯度函数
的modelGradients
功能需要dlnetwork
对象dlnet
中,小批量的输入数据的dlX
与相应的标签Y
并返回损失的梯度相对于所述可学习参数在dlnet
,网络状态,和损失。若要自动计算梯度,请使用dlgradient
函数。
函数[gradients,state,loss] = modelGradients(dlnet,dlX,Y) [dlYPred,state] = forward(dlnet,dlX);损失= crossentropy (dlYPred Y);梯度= dlgradient(损失、dlnet.Learnables);结束
模型的预测函数
的modelPredictions
功能需要dlnetwork
对象dlnet
中,输入数据的数组dlX
,以及一个迷你批大小,并通过迭代指定大小的迷你批来输出模型预测。
函数dlYPred = model(dlnet,dlX,miniBatchSize) numObservations = size(dlX,4);numiteration = ceil(numObservations / miniBatchSize);numClasses = dlnet.Layers .OutputSize (11);dlYPred = 0 (numClasses numObservations,“喜欢”dlX);为I = 1:numIterations IDX =(I-1)* miniBatchSize + 1:分钟(I * miniBatchSize,numObservations);dlYPred(:,IDX)=预测(dlnet,DLX(:,:,:,IDX));结束结束
的dlnetwork
函数支持下面列出的万博1manbetx层和不返回非空内存值的自定义层。
层 | 描述 |
---|---|
图像输入层将二维图像输入到网络并应用数据规范化。 | |
三维图像输入层将三维图像或卷输入到网络并应用数据归一化。 | |
序列输入层的输入序列的数据到网络。 |
层 | 描述 |
---|---|
二维卷积层对输入应用滑动卷积滤波器。 | |
三维卷积层将滑动立方卷积滤波器应用于三维输入。 | |
A 2-d分组卷积层分离输入通道分成组,并适用滑动卷积滤波器。使用分组卷积层用于信道逐可分离(也称为深度方向可分离)卷积。 | |
置换的二维卷积层对特征图进行向上采样。 | |
置换后的三维卷积层对三维特征图进行上采样。 | |
甲完全连接层乘以的权重矩阵的输入,然后将偏置矢量。 |
层 | 描述 |
---|---|
序列输入层的输入序列的数据到网络。 | |
LSTM层学习时间序列和序列数据中时间步骤之间的长期依赖关系。 | |
GRU层学习时间序列和序列数据中时间步骤之间的依赖关系。 |
层 | 描述 |
---|---|
ReLU层对输入的每个元素执行阈值操作,其中任何小于零的值都被设置为零。 | |
有泄漏的ReLU层执行阈值操作,其中任何小于零的输入值乘以一个固定的标量。 | |
一个剪切ReLU层执行一个阈值操作,其中任何小于零的输入值被设置为零,而任何大于的值被设置为剪裁天花板被固定在那个剪断的天花板上。 | |
ELU激活层对正输入进行身份操作,对负输入进行指数非线性操作。 | |
双曲正切(tanh)激活层将tanh函数应用于层输入。 | |
一个softmax层对输入应用一个softmax函数。 |
层 | 描述 |
---|---|
批处理规范化层对小批处理中的每个输入通道进行规范化。为了加快卷积神经网络的训练,降低对网络初始化的敏感性,在卷积层和ReLU层等非线性层之间使用批处理归一化层。 | |
信道局部响应(跨信道)归一层实现信道归一化。 | |
dropout层随机将输入元素设置为零,具有给定的概率。 | |
A 2-d作物层应用于2-d裁剪到输入端。 |
层 | 描述 |
---|---|
平均池层通过将输入划分为矩形池区域并计算每个区域的平均值来执行向下采样。 | |
三维平均池化层通过将三维输入划分为立方池化区域并计算每个区域的平均值来进行下采样。 | |
全局平均池层通过计算输入的高度和宽度维度的平均值来执行向下采样。 | |
三维全局平均池层通过计算输入的高度、宽度和深度维度的平均值来执行向下采样。 | |
最大池层通过将输入划分为矩形池区域并计算每个区域的最大值来执行向下采样。 | |
三维最大池化层通过将三维输入划分为立方池化区域,并计算每个区域的最大值来进行下采样。 | |
全局最大池层通过计算输入的高度和宽度维度的最大值来执行向下采样。 | |
三维全局最大池层通过计算输入的高度、宽度和深度维度的最大值来执行向下采样。 | |
A(最大值)unpooling层unpools一个最大池层的输出。 |
层 | 描述 |
---|---|
添加层按元素顺序添加来自多个神经网络层的输入。 | |
深度连接层接受具有相同高度和宽度的输入,并沿着第三维(通道维)将它们连接起来。 | |
连接层接受输入并沿着指定的维度连接它们。输入必须在除连接维度外的所有维度中具有相同的大小。 |
你点击了一个链接,对应于这个MATLAB命令:
在MATLAB命令窗口中输入命令,运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站表现。其他MathWorks国家站点不适合来自您所在位置的访问。