向前
语法
描述
一些层深度学习在训练和推理上的表现也不同(预测)。例如,在培训期间,辍学层随机输入元素设置为零,防止过度拟合,但在推理,辍学层不改变输入。
计算网络输出培训,使用向前
函数。计算网络输出推理,使用预测
函数。
(日元…,YN]= (___)
返回N
输出日元
、…YN
在训练的网络N
输出使用任何以前的语法。
(日元…,YK] = forward(___“输出”,
返回输出layerNames
)日元
、…即
培训期间指定的层使用任何以前的语法。
(___]= (___“加速度”,
还指定了性能优化使用在训练,除了输入参数在以前的语法。加速度
)
(___,
还返回更新的网络状态。状态
]= (___)
(___,
还返回一个激活的单元阵列修剪层。这个语法是适用的前提状态
,pruningActivations
]= (___)净
是一个TaylorPrunableNetwork
对象。
修剪深神经网络,你需要深度学习工具箱™模型量化图书馆金宝app支持包。这种支持包金宝app是一个免费的插件,你可以下载使用附加Explorer。另外,看到深度学习工具箱量化模型库。
例子
列车网络的使用自定义训练循环
这个例子展示了如何训练网络,把手写的数字和一个定制的学习速率的时间表。
你可以训练使用的大多数类型的神经网络trainNetwork
和trainingOptions
功能。如果trainingOptions
函数不提供你需要的选项(例如,一个定制的学习速率的时间表),然后你可以定义自己的自定义训练循环使用dlarray
和dlnetwork
对象自动分化。为一个例子,演示如何培训pretrained深学习网络使用trainNetwork
功能,请参阅学习使用Pretrained网络传输。
训练一个深层神经网络是一种优化的任务。通过考虑一个神经网络作为一个函数 ,在那里 网络的输入, 可学的参数集,您可以优化吗 减少一些损失值基于训练数据。例如,优化可学的参数 这样,对于一个给定的输入 与相应的目标 ,他们之间的误差最小化预测 和 。
取决于使用的损失函数类型的任务。例如:
对于分类任务,您可以最小化之间的交叉熵误差预测和目标。
对于回归的任务,您可以最小化之间的均方误差预测和目标。
您可以使用梯度下降优化目标:最小化损失 通过迭代更新可学的参数 通过采取措施对最小使用渐变的损失对可学的参数。梯度下降算法更新可学的参数通常使用的更新一步的变体形式 ,在那里 是迭代数, 是学习速率, 表示渐变(衍生品的损失对可学的参数)。
这个例子列车网络分类手写数字的基于时间的衰减学习速率的时间表:对于每一次迭代,求解器使用的学习速率 ,在那里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-by-28-by-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 =元素个数(类);
定义网络
定义网络图像分类。
图像输入,指定一个图像输入层与输入训练数据匹配的大小。
不正常的图像输入,设置
归一化
选择输入层“没有”
。指定三个convolution-batchnorm-ReLU块。
垫卷积的输入层,通过设置的输出具有相同的大小
填充
选项“相同”
。卷积第一层指定20过滤器的大小5。对于剩下的卷积层指定20过滤器的大小3。
对于分类,指定一个完全连接层与大小匹配的类的数量
输出映射到概率,包括softmax层。
当培训网络使用自定义循环,不包括一个输出层。
层= [imageInputLayer (inputSize正常化=“没有”)convolution2dLayer(5、20、填充=“相同”)batchNormalizationLayer reluLayer convolution2dLayer(3、20、填充=“相同”)batchNormalizationLayer reluLayer convolution2dLayer(3、20、填充=“相同”)batchNormalizationLayer reluLayer fullyConnectedLayer (numClasses) softmaxLayer];
创建一个dlnetwork
数组对象的层。
净= dlnetwork(层)
网= dlnetwork属性:层:[12×1 nnet.cnn.layer.Layer]连接:[11×2表]可学的:[14×3表]状态:[6×3表]InputNames: {“imageinput”} OutputNames: {“softmax”}初始化:1观点总结总结。
定义模型损失函数
训练一个深层神经网络是一种优化的任务。通过考虑一个神经网络作为一个函数 ,在那里 网络的输入, 可学的参数集,您可以优化吗 减少一些损失值基于训练数据。例如,优化可学的参数 这样,对于一个给定的输入 与相应的目标 ,他们之间的误差最小化预测 和 。
创建函数modelLoss
中列出,损失函数模型的例子中,这需要作为输入dlnetwork
对象,mini-batch输入数据与相应的目标,并返回损失,损失的梯度对可学的参数,和网络状态。
指定培训选项
火车十世mini-batch大小为128。
numEpochs = 10;miniBatchSize = 128;
指定的选项个优化。指定一个初始学习衰变率0.01,0.01,0.9和动量。
initialLearnRate = 0.01;衰变= 0.01;动量= 0.9;
火车模型
创建一个minibatchqueue
对象流程和管理mini-batches图像在训练。为每个mini-batch:
使用自定义mini-batch预处理功能
preprocessMiniBatch
(在这个例子中定义)转换编码的标签在一个炎热的变量。格式的图像数据维度标签
“SSCB”
(空间、空间、通道、批)。默认情况下,minibatchqueue
把数据转换为对象dlarray
对象与基本类型单
。没有格式的类标签。火车在GPU如果一个是可用的。默认情况下,
minibatchqueue
将每个输出转换为对象gpuArray
如果一个GPU是可用的。使用GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU计算的需求(并行计算工具箱)。
兆贝可= minibatchqueue (augimdsTrain,…MiniBatchSize = MiniBatchSize,…MiniBatchFcn = @preprocessMiniBatch,…MiniBatchFormat = [“SSCB””“]);
个解算器初始化速度参数。
速度= [];
计算迭代的总数的培训进度监控。
numObservationsTrain =元素个数(imdsTrain.Files);numIterationsPerEpoch =装天花板(numObservationsTrain / miniBatchSize);numIterations = numEpochs * numIterationsPerEpoch;
初始化TrainingProgressMonitor
对象。因为计时器开始创建监视器对象时,确保你创建对象接近的训练循环。
监控= = trainingProgressMonitor(指标“损失”信息= (“时代”,“LearnRate”),包含=“迭代”);
列车网络使用自定义训练循环。对于每一个时代,洗牌和遍历mini-batches数据的数据。为每个mini-batch:
损失评估模型,使用渐变和状态
dlfeval
和modelLoss
功能和更新网络状态。确定基于时间的学习速率衰减学习速率的时间表。
更新网络参数使用
sgdmupdate
函数。更新损失,学习速度,训练进度监控和时代价值。
停止,如果停止房地产是正确的。停止的属性值
TrainingProgressMonitor
对象更改为真,当你点击停止按钮。
时代= 0;迭代= 0;%循环时期。而时代< numEpochs & & ~班长。停止时代=时代+ 1;%洗牌数据。洗牌(兆贝可);%在mini-batches循环。而hasdata(兆贝可)& & ~班长。停止迭代=迭代+ 1;% mini-batch读取的数据。[X, T] =下一个(兆贝可);%评估模型梯度、州和使用dlfeval和损失% modelLoss功能和更新网络状态。(损失、渐变、状态)= dlfeval (@modelLoss,净,X, T);网。=状态;%确定为基于时间的学习速率衰减学习速率的时间表。learnRate = initialLearnRate /(1 +衰变*迭代);%更新使用个优化网络参数。(净、速度)= sgdmupdate(净、渐变速度,learnRate动量);%更新培训进度监控。recordMetrics(监控、迭代损失=损失);updateInfo(监控、时代=时代LearnRate = LearnRate);班长。进步= 100 *迭代/ numIterations;结束结束
测试模型
测试模型的分类精度比较预测验证集和真正的标签。
训练后,使预测新数据不需要标签。创建minibatchqueue
对象只包含测试数据的预测:
忽略标签测试,设置输出的数量mini-batch队列1。
指定相同的mini-batch大小用于培训。
预处理预测使用
preprocessMiniBatchPredictors
函数,列出的例子。对于单一的输出数据存储,指定mini-batch格式
“SSCB”
(空间、空间、通道、批)。
numOutputs = 1;mbqTest = minibatchqueue (augimdsValidation numOutputs,…MiniBatchSize = MiniBatchSize,…MiniBatchFcn = @preprocessMiniBatchPredictors,…MiniBatchFormat =“SSCB”);
使用循环mini-batches和分类图像modelPredictions
函数,列出的例子。
欧美= modelPredictions(净、mbqTest、类);
评估分类精度。
tt = imdsValidation.Labels;精度=意味着(tt = =次)
精度= 0.9750
图表可视化预测在一个混乱。
次图confusionchart (tt)
大值对应的类的对角线显示准确的预测。大值对应的类之间的非对角的表示强烈的困惑。
金宝app支持功能
损失函数模型
的modelLoss
函数接受一个dlnetwork
对象净
mini-batch的输入数据X
与相应的目标T
并返回损失,损失的梯度参数对可学的净
,和网络状态。自动计算梯度,使用dlgradient
函数。
函数(损失、渐变、状态)= modelLoss(净,X, T)%通过网络转发数据。[Y,状态]=前进(净,X);%计算熵的损失。损失= crossentropy (Y, T);%计算梯度的损失对可学的参数。梯度= dlgradient(损失、net.Learnables);结束
模型的预测函数
的modelPredictions
函数接受一个dlnetwork
对象净
,一个minibatchqueue
的输入数据兆贝可
网络类,计算模型遍历所有数据的预测minibatchqueue
对象。这个函数使用onehotdecode
函数找到预测类最高的分数。
函数Y = modelPredictions(净、兆贝可类)Y = [];%在mini-batches循环。而hasdata(兆贝可)X =(兆贝可);%进行预测。成绩=预测(净,X);%解码标签和附加到输出。标签= onehotdecode(成绩、类1)';Y = [Y;标签);结束结束
小批预处理功能
的preprocessMiniBatch
函数进行预处理的mini-batch预测和标签使用以下步骤:
使用预处理的图像
preprocessMiniBatchPredictors
函数。从传入单元阵列提取标签数据和连接到一个直言沿着二维数组。
一个炎热的分类标签编码成数字数组。编码的第一个维度产生一个相匹配的形状编码阵列网络输出。
函数[X, T] = preprocessMiniBatch (dataX人数()%预处理预测。X = preprocessMiniBatchPredictors (dataX);%从细胞中提取标签数据和连接。猫(T = 2,人数({1:结束});%一个炎热的编码标签。T = onehotencode (T, 1);结束
Mini-Batch预测预处理功能
的preprocessMiniBatchPredictors
函数进行预处理mini-batch预测因子的提取图像数据从输入单元阵列和连接到一个数字数组。灰度输入,连接在第四维度添加每个图像的三维空间,作为一个单通道维度。
函数X = preprocessMiniBatchPredictors (dataX)%连接。猫(X = 4, dataX{1:结束});结束
输入参数
净
- - - - - -网络定制培训循环或自定义修剪循环
dlnetwork
对象|TaylorPrunableNetwork
对象
这个论点可以代表这两种:
网络定制培训循环,指定为一个
dlnetwork
对象。自定义网络修剪循环,指定为一个
TaylorPrunableNetwork
对象。
修剪深神经网络,你需要深度学习工具箱量化模型库金宝app支持包。这种支持包金宝app是一个免费的插件,你可以下载使用附加Explorer。另外,看到深度学习工具箱量化模型库。
layerNames
- - - - - -层提取输出
字符串数组|单元阵列的特征向量
层提取输出,指定为字符串数组或单元阵列特征向量包含图层名称。
如果
layerNames(我)
对应于一层和一个输出,然后layerNames(我)
层的名称。如果
layerNames(我)
对应于一层具有多个输出layerNames(我)
是图层名称后面的性格”/
”,输出层的名称:“layerName / outputName”
。
加速度
- - - - - -性能优化
“汽车”
(默认)|“没有”
性能优化,指定为以下之一:
“汽车”
——自动应用一些优化适合输入网络和硬件资源。“没有”
——禁用所有加速度。
默认的选项是“汽车”
。
使用“汽车”
加速选项可以提供性能优势,但在初始运行时间增加为代价的。后续调用与兼容的参数是更快。使用性能优化计划多次调用该函数时使用不同的输入数据相同的大小和形状。
输出参数
pruningActivations
——修剪层的激活
单元阵列包含dlarray
对象
激活的单元阵列修剪层,如果输入是一个网络TaylorPrunableNetwork
对象。
扩展功能
GPU数组
加速代码运行在一个图形处理单元(GPU)使用并行计算工具箱™。
使用笔记和限制:
这个函数运行在GPU上如果有一方或者双方都满足以下条件:
任何内部网络可学的参数的值
net.Learnables.Value
是dlarray
对象的基础数据类型gpuArray
输入参数
X
是一个dlarray
基础数据的类型gpuArray
有关更多信息,请参见运行在GPU MATLAB函数(并行计算工具箱)。
版本历史
介绍了R2019bR2021a:向前
返回状态值dlarray
对象
为dlnetwork
对象时,状态
输出参数返回的向前
函数是一个表包含状态参数名称和值对每一层的网络。
从R2021a,状态值dlarray
对象。这种变化使得当使用更好的支持金宝appAcceleratedFunction
对象。加速深度学习函数,经常改变输入值,例如,一个包含网络的输入状态,必须指定为经常变化的值dlarray
对象。
在以前的版本中,状态值数字数组。
在大多数情况下,您不需要更新你的代码。如果你的代码需要数字状态值数组,然后复制之前的行为,提取数据的状态值手动使用extractdata
函数与dlupdate
函数。
状态= dlupdate (@extractdata net.State);
Apri esempio
如果dispone di una versione modificata di questo esempio。Desideri aprire questo esempio con le modifiche星期二吗?
第一MATLAB
海脂肪clic苏联合国collegamento切corrisponde questo第一MATLAB:
Esegui il第一inserendolo所以nella隙缝di第一MATLAB。我浏览器web非supportano金宝app comandi MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。