用于自定义训练循环的深度学习网络
一个dlnetwork
对象支持使用自动微分实现自定义金宝app训练循环。
对于大多数深学习任务,你可以使用预训练网络,并使其适应自己的数据。有关说明如何使用传输学习再培训卷积神经网络,一组新的图片进行分类示例,请参见训练深度学习网络对新图像进行分类。或者,您可以使用以下工具从零开始创建和训练网络layerGraph
的对象trainNetwork
和trainingOptions
功能。
如果trainingOptions
功能不提供培训选项,你需要为你的任务,那么你可以创建一个使用自动分化定制培训圈。要了解更多信息,请参阅定义自定义训练循环。
图层
- - - - - -网络层层
数组网络层,指定为层
数组中。
连接
- - - - - -层连接层连接,指定为具有两列的表。
每个表行表示在该层图形的连接。第一列,源
,指定每个连接的源。第二列,目的地
,指定每个连接的目的地。连接源和目的地要么是层名称,要么是表单'layerName / IOName'
,其中“IOName”
是层输入或输出的名称。
数据类型:表格
Learnables
- - - - - -网络可学的参数网络可以学习的参数,指定为三列的表格:
层
-层名称,指定为字符串标量。
参数
-参数名,指定为字符串标量。
价值
- 参数的值,指定为dlarray
。
该网络可以学习的参数包含在网络上了解到的特征。例如,卷积的权重和完全连接层。
数据类型:表格
InputNames
- - - - - -网络输入层名称网络输入层名称,指定为字符向量的单元数组。
数据类型:细胞
OutputNames
- - - - - -网络输出层名称网络输出层名称,指定为字符向量的单元数组。此属性包括具有断开输出的所有层。如果一个层有多个输出,则断开连接的输出被指定为“layerName / outputName”
。
数据类型:细胞
向前 |
计算用于培训的深度学习网络输出 |
预测 |
计算深学习推理网络输出 |
layerGraph |
用于深度学习的网络层图 |
dlnetwork
对象要实现自定义的训练循环为您的网络,首先将其转换为dlnetwork
对象。在?中不包括输出层dlnetwork
对象。相反,您必须在自定义训练循环中指定丢失函数。
使用。加载预训练的GoogLeNet模型googlenet
函数。此函数需要深度学习工具箱™模型GoogLeNet网络金宝app支持包。如果未安装此支持金宝app包,则该功能提供了下载链接。
净= 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([28281]),“名字”,“输入”,“的意思是”,表示(XTrain,4))卷积2dlayer (5,20,“名字”,“conv1”)batchNormalizationLayer(“名字”,'BN1')reluLayer (“名字”,“relu1”20岁的)convolution2dLayer (3'填充'1,“名字”,“conv2”)batchNormalizationLayer(“名字”,'BN2')reluLayer (“名字”,'relu2'20岁的)convolution2dLayer (3'填充'1,“名字”,“conv3”)batchNormalizationLayer(“名字”,“bn3”)reluLayer (“名字”,'relu3')fullyConnectedLayer (numClasses“名字”,“俱乐部”)softmaxLayer (“名字”,'SOFTMAX'));lgraph = layerGraph(层);
创建一个dlnetwork
对象从层图。
dlnet = dlnetwork (lgraph)
[11×2表]连接:[14×3表]状态:[6×3表]输入名:{'input'}输出名:{'softmax'}
定义模型梯度函数
创建功能modelGradients
在该示例的末尾列出的,采用一个dlnetwork
对象dlnet
,一个小批输入数据dlX
与相应的标签Y
,并返回损失相对于可学习参数的梯度dlnet
以及相应的损失。
指定培训选项
以128个小批量训练5个纪元。
numEpochs = 5;miniBatchSize = 128;
指定SGDM优化选项。指定初始学习速率为0.01,衰减为0.01,动量为0.9。
initialLearnRate = 0.01;衰变= 0.01;动量= 0.9;
将训练过程形象化。
情节=“训练进度”;
在GPU上训练(如果有的话)。使用GPU需要并行计算工具箱™和CUDA®启用NVIDIA®GPU计算能力3.0或更高。
executionEnvironment =“汽车”;
火车模型
使用自定义训练循环训练模型。
对于每个epoch,重新洗牌数据并循环小批量数据。在每个epoch结束时,显示训练进度。
为每个mini-batch:
将标签转换为虚拟变量。
将数据转换为dlarray
对象,并指定维度标签'SSCB'
(空间,空间信道,批次)。
对于GPU训练,转换为gpuArray
对象。
使用评估模型梯度、状态和损失dlfeval
和modelGradients
功能和更新网络状态。
确定基于时间的衰减学习速率计划的学习速率。
属性更新网络参数sgdmupdate
函数。
初始化训练进度情节。
如果情节= =“训练进度”图lineLossTrain = animatedline(“颜色”[0.85 0.325 0.098]);ylim([0正])包含(“迭代”)ylabel (“损失”网格)在结束
初始化SGDM求解器的速度参数。
速度= [];
培训网络。
numObservations =元素个数(YTrain);numIterationsPerEpoch =地板(numObservations. / miniBatchSize);迭代= 0;开始=抽搐;%遍历时期。为时代= 1:numEpochs%洗牌数据。IDX = randperm(numel(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。如果(执行环境==“汽车”&& canUseGPU) ||执行环境==“图形”DLX = gpuArray(DLX);结束%使用dlfeval和%modelGradients功能和更新网络状态。(渐变、州损失)= dlfeval (@modelGradients, dlnet dlX Y);dlnet。状态=state;%确定学习率基于时间的衰减率的学习进度。learnRate = initialLearnRate/(1 +衰减*迭代);%更新使用SGDM优化网络参数。[dlnet, velocity] = sgdmupdate(dlnet, gradient, velocity, learnRate, momentum);显示培训进度。如果情节= =“训练进度”D =持续时间(0,0,toc(开始),'格式','HH:MM:SS');addpoints(lineLossTrain,迭代,双(聚(ExtractData由(亏损))))标题(“时代”+时代+”,过去:“+ drawnow字符串(D))结束结束结束
测试模型
通过在测试集与真标签的预测比较测试模型的分类精度。
[XTest, YTest] = digitTest4DArrayData;
将数据转换为dlarray
尺寸格式对象'SSCB'
。对于GPU的预测,也可以将数据转换为gpuArray
。
dlXTest = dlarray (XTest,'SSCB');如果(执行环境==“汽车”&& 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
函数。
函数[梯度,状态,损失] = modelGradients(dlnet,DLX,Y)[dlYPred,状态] =向前(dlnet,DLX);损耗= crossentropy(dlYPred,Y);梯度= dlgradient(损失,dlnet.Learnables);结束
模型的预测函数
的modelPredictions
函数接受一个dlnetwork
对象dlnet
,输入数据的数组dlX
,和迷你批量大小,并且输出通过遍历指定大小的小型分批模型预测。
函数dlYPred =模型预测(dlnet,dlX,miniBatchSize) numObservations = size(dlX,4);numiteration = ceil(numObservations / miniBatchSize);numClasses = dlnet.Layers .OutputSize (11);dlYPred = 0 (numClasses numObservations,'喜欢'dlX);为i = 1: num迭代idx = (i-1)*miniBatchSize+1:min(i*miniBatchSize,numObservations);dlYPred (:, idx) =预测(dlnet, dlX (:,:,:, idx));结束结束
的dlnetwork
函数支持下面列出的金宝app层和自定义层,而不返回非空的内存值。
层 | 描述 |
---|---|
图像输入层输入2 d的图像到网络,并且施加数据正常化。 | |
三维图像输入层将三维图像或卷输入到网络并应用数据归一化。 | |
序列输入层将序列数据输入到网络中。 |
层 | 描述 |
---|---|
二维卷积层对输入应用滑动卷积滤波器。 | |
A 3-d卷积层应用于滑动立方形卷积滤波器来三维输入。 | |
一个二维分组卷积层将输入通道分成组,并应用滑动卷积滤波器。使用分组卷积层进行信道可分(也称为深度可分)卷积。 | |
转置2-d卷积层上采样特征地图。 | |
置换后的三维卷积层对三维特征图进行采样。 | |
一个完全连接的层将输入乘以一个权矩阵,然后添加一个偏置向量。 |
层 | 描述 |
---|---|
序列输入层将序列数据输入到网络中。 | |
按时间序列和序列数据的时间步长之间的LSTM层获悉长期依赖性。 | |
按时间序列和序列数据的时间步长之间的GRU层获悉的依赖关系。 |
层 | 描述 |
---|---|
ReLU层对输入的每个元素执行阈值操作,其中任何小于0的值都设置为0。 | |
有泄漏的ReLU层执行阈值操作,其中任何小于零的输入值乘以一个固定的标量。 | |
一个裁剪的ReLU层执行一个阈值操作,其中任何小于0的输入值都被设置为0,而任何大于的值都被设置为剪裁天花板被固定在那个剪下来的天花板上。 | |
一个ELU活化层进行上正输入的身份运行和负输入端的指数的非线性。 | |
双曲正切(tanh)激活层将tanh函数应用于层输入。 | |
软max层对输入应用软max函数。 |
层 | 描述 |
---|---|
批处理规范化层对小批处理中的每个输入通道进行规范化。为了加快卷积神经网络的训练,降低对网络初始化的敏感性,可以在卷积层与ReLU层等非线性层之间使用批量归一化层。 | |
信道局部响应(跨信道)归一化层实现信道归一化。 | |
漏失层随机设置输入元件到零与给定的概率。 | |
二维作物层对输入进行二维种植。 |
层 | 描述 |
---|---|
平均池化层通过将输入分割成矩形池化区域并计算每个区域的平均值来执行向下采样。 | |
A 3-d平均池层进行下采样通过划分三维输入到立方形池区域和计算每个区域的平均值。 | |
全局平均池层进行下采样,通过计算平均高度和输入的宽度尺寸。 | |
通过计算输入的高度、宽度和深度维度的平均值,3-D全球平均池层执行向下采样。 | |
最大池化层通过将输入分割成矩形池化区域并计算每个区域的最大值来执行向下采样。 | |
三维最大池化层通过将三维输入分割成立方池化区域,并计算每个区域的最大值来进行下采样。 | |
全局最大池层通过计算输入的高度和宽度维度的最大值来执行向下采样。 | |
A 3-d全局最大池层进行下采样,通过计算最大输入的高度,宽度和深度的尺寸。 | |
最大取消池化层取消对最大池化层的输出的池化。 |
层 | 描述 |
---|---|
添加层按元素顺序添加来自多个神经网络层的输入。 | |
深度连接层接收具有相同高度和宽度的输入,并沿着第三维(通道维)连接它们。 | |
连接层接受输入并将它们连接到指定的维度。输入必须在除连接维度外的所有维度中具有相同的大小。 |
你点击了一个链接,对应于这个MATLAB命令:
在MATLAB命令窗口中输入它运行的命令。Web浏览器不支持MATLAB的命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文),以获得最佳的网站表现。其他MathWorks国家站点没有针对您所在位置的访问进行优化。