主要内容

trainNetwork

训练深度学习神经网络

描述

对于分类和回归任务,可以使用类训练各种类型的神经网络trainNetwork函数。

例如,你可以训练:

  • 用于图像数据的卷积神经网络(ConvNet, CNN)

  • 一种循环神经网络(RNN),如长短时记忆(LSTM)或用于序列和时间序列数据的门控循环单元(GRU)网络

  • 数字特征数据的多层感知器(MLP)网络

你可以在CPU或GPU上进行训练。对于图像分类和图像回归,您可以使用多个gpu或本地或远程并行池并行训练单个网络。GPU或并行训练需要并行计算工具箱™。要使用GPU进行深度学习,还必须有支持的GPU设备。有关支持的设备的信息,请参见GPU计算的需求(并行计算工具箱)要指定培训选项,包括用于执行环境的选项,请使用trainingOptions函数。

在训练神经网络时,可以将预测器和响应指定为单个输入或两个单独的输入。

例子

= trainNetwork (图片选项训练指定的神经网络用于使用指定的图像和响应的图像分类和回归任务图片培训选项由选项

例子

= trainNetwork (图片反应选项使用指定的图像的列车图片和由反应

= trainNetwork (序列选项训练用于序列或时间序列分类和回归任务的神经网络(例如,LSTM或GRU网络),使用指定的序列和响应序列

例子

= trainNetwork (序列反应选项所指定的序列进行训练序列和由反应

例子

= trainNetwork (特性选项训练神经网络的特征分类或回归任务(例如,多层感知器(MLP)网络)使用的特征数据和响应指定特性

= trainNetwork (特性反应选项所指定的特征数据特性和由反应

= trainNetwork (混合选项训练具有混合数据类型的多重输入的神经网络混合

信息) = trainNetwork (___还返回关于使用前面任何语法的训练的信息。

例子

全部折叠

将数据加载为ImageDatastore对象。

digitDatasetPath = fullfile (matlabroot,“工具箱”“nnet”...“nndemos”“nndatasets”“DigitDataset”);imd = imageDatastore (digitDatasetPath,...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);

该数据存储包含10,000个合成的数字图像,从0到9。这些图像是通过对用不同字体创建的数字图像进行随机转换而生成的。每张数字图像是28 × 28像素。每个类别的数据存储包含相同数量的图像。

显示数据存储中的一些图像。

figure numImages = 10000;烫= randperm (numImages 20);I = 1:20 subplot(4,5, I);imshow (imds.Files{烫发(i)});drawnow;结束

图中包含20个轴对象。坐标轴对象1包含一个image类型的对象。Axes对象2包含一个image类型的对象。Axes对象3包含一个image类型的对象。Axes对象4包含一个image类型的对象。Axes对象5包含一个image类型的对象。Axes对象6包含一个image类型的对象。Axes对象7包含一个image类型的对象。Axes对象8包含一个image类型的对象。Axes对象9包含一个image类型的对象。 Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

划分数据存储,使训练集中的每个类别都有750个图像,而测试集中有来自每个标签的剩余图像。

numTrainingFiles = 750;[imdsTrain, imdsTest] = splitEachLabel (imd, numTrainingFiles“随机”);

splitEachLabel分割图像文件digitData到两个新的数据存储中,imdsTrain而且imdsTest

定义卷积神经网络体系结构。

层= [...imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,“步”2) fullyConnectedLayer(10) softmaxLayer classificationLayer];

将选项设置为带有动量的随机梯度下降的默认设置。设置最大课时数为20,以初始学习率0.0001开始训练。

选择= trainingOptions (“个”...“MaxEpochs”, 20岁,...“InitialLearnRate”1的军医,...“详细”假的,...“阴谋”“训练进步”);

培训网络。

网= trainNetwork (imdsTrain层,选项);

{

在没有用于训练网络的测试集中运行训练过的网络,并预测图像标签(数字)。

YPred =分类(净,imdsTest);欧美= imdsTest.Labels;

计算的准确性。准确率是测试数据中与分类匹配的真实标签的数量之比分类到测试数据中的图像数量。

精度= sum(YPred == YTest)/numel(YTest)
精度= 0.9408

利用增强图像数据训练卷积神经网络。数据增强有助于防止网络过拟合和记忆训练图像的精确细节。

加载示例数据,它由手写数字的合成图像组成。

[XTrain, YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData将数字训练集加载为4-D数组数据。XTrain是一个28 × 28 × 1 × 5000数组,其中:

  • 28是图像的高度和宽度。

  • 1是通道数。

  • 5000是手写数字合成图像的数量。

YTrain包含每个观察结果的标签的分类向量。

预留1000个映像用于网络验证。

idx = randperm(大小(XTrain, 4), 1000);XValidation = XTrain (:,:,:, idx);XTrain (::,:, idx) = [];YValidation = YTrain (idx);YTrain (idx) = [];

创建一个imageDataAugmenter对象,该对象指定用于图像增强的预处理选项,如调整大小、旋转、平移和反射。随机地将图像水平和垂直地平移到3个像素,并以20度的角度旋转图像。

imageAugmenter = imageDataAugmenter (...“RandRotation”(-20年,20),...“RandXTranslation”3 [3],...“RandYTranslation”3 [3])
imageAugmenter = imageDataAugmenter与属性:FillValue: 0 RandXReflection: 0 RandRotation: [-20 20] RandScale: [1 1] RandXScale: [1 1] RandYScale: [1 1] RandXShear: [0 0] RandYShear: [0 0] RandXTranslation: [-3 3] RandYTranslation: [-3 3]

创建一个augmentedImageDatastore对象用于网络训练并指定图像输出大小。在训练过程中,数据存储执行图像增强并调整图像的大小。数据存储增加图像,而不将任何图像保存到内存中。trainNetwork更新网络参数,然后丢弃增强图像。

imageSize = [28 28 1];augimds = augmentedImageDatastore(图象尺寸、XTrain YTrain,“DataAugmentation”, imageAugmenter);

指定卷积神经网络结构。

layers = [imageInputLayer(imageSize) convolution2dLayer(3,8,“填充”“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”“相同”maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”“相同”) batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];

指定有动量的随机梯度下降的训练选项。

选择= trainingOptions (“个”...“MaxEpochs”15岁的...“洗牌”“every-epoch”...“阴谋”“训练进步”...“详细”假的,...“ValidationData”, {XValidation, YValidation});

培训网络。由于验证图像未进行增广,因此验证精度高于训练精度。

网= trainNetwork (augimds层,选择);

加载示例数据,它由手写数字的合成图像组成。第三个输出包含每个图像旋转的相应角度。

将训练图像加载为4-D数组digitTrain4DArrayData.输出XTrain是一个28 × 28 × 1 × 5000数组,其中:

  • 28是图像的高度和宽度。

  • 1是通道数。

  • 5000是手写数字合成图像的数量。

YTrain包含以角度为单位的旋转角度。

[XTrain ~, YTrain] = digitTrain4DArrayData;

显示20个随机训练图像使用imshow

figure numTrainImages = numel(YTrain);idx = randperm (numTrainImages 20);i = 1:元素个数(idx)次要情节(4、5、i) imshow (XTrain (:,:,:, idx(我)))drawnow;结束

图中包含20个轴对象。坐标轴对象1包含一个image类型的对象。Axes对象2包含一个image类型的对象。Axes对象3包含一个image类型的对象。Axes对象4包含一个image类型的对象。Axes对象5包含一个image类型的对象。Axes对象6包含一个image类型的对象。Axes对象7包含一个image类型的对象。Axes对象8包含一个image类型的对象。Axes对象9包含一个image类型的对象。 Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

指定卷积神经网络结构。对于回归问题,在网络的末端包含一个回归层。

层= [...imageInputLayer([28 28 1]) convolution2dLayer(12,25) reluLayer fulllyconnectedlayer (1) regressionLayer];

指定网络训练选项。将初始学习速率设置为0.001。

选择= trainingOptions (“个”...“InitialLearnRate”, 0.001,...“详细”假的,...“阴谋”“训练进步”);

培训网络。

网= trainNetwork (XTrain、YTrain层,选择);

{

通过评估测试数据的预测精度来测试网络的性能。使用预测对验证图像的旋转角度进行预测。

[XTest ~,欧美]= digitTest4DArrayData;YPred =预测(净,XTest);

通过计算预测转角和实际转角的均方根误差(RMSE)来评估模型的性能。

rmse =√(mean((YTest - YPred).^2))
rmse =6.0360

训练深度学习LSTM网络进行序列到标签分类。

按照[1]和[2]中描述的方式加载日语元音数据集。XTrain是包含270个不同长度序列的单元阵列,有12个特征对应于LPC倒谱系数。Y是标签1,2,…,9的分类向量。的条目XTrain矩阵有12行(一行表示每个特征)和不同数量的列(一列表示每个时间步)。

[XTrain, YTrain] = japaneseVowelsTrainData;

在一个情节中想象第一个时间序列。每一行对应一个特征。

图绘制(XTrain{1}”)标题(“训练观察1”) numFeatures = size(XTrain{1},1);传奇(“特性”+字符串(1:numFeatures),“位置”“northeastoutside”

图中包含一个axes对象。标题为Training Observation 1的坐标轴对象包含12个类型为line的对象。这些对象代表特性1、特性2、特性3、特性4、特性5、特性6、特性7、特性8、特性9、特性10、特性11、特性12。

定义LSTM网络架构。指定输入大小为12(输入数据的特征数量)。指定一个LSTM层有100个隐藏单元,并输出序列的最后一个元素。最后,指定9个类,包括一个大小为9的完全连接层,然后是一个softmax层和一个分类层。

inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer inputSize lstmLayer (numHiddenUnits,“OutputMode”“最后一次”fulllyconnectedlayer (numClasses)
2”LSTM LSTM与100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex

指定培训选项。指定求解器为“亚当”而且“GradientThreshold”为1。将迷你批处理大小设置为27,并将最大epoch数设置为70。

因为小批次的序列较短,CPU更适合训练。集“ExecutionEnvironment”“cpu”.在GPU上训练,如果可用,设置“ExecutionEnvironment”“汽车”(默认值)。

maxEpochs = 70;miniBatchSize = 27个;选择= trainingOptions (“亚当”...“ExecutionEnvironment”“cpu”...“MaxEpochs”maxEpochs,...“MiniBatchSize”miniBatchSize,...“GradientThreshold”, 1...“详细”假的,...“阴谋”“训练进步”);

使用指定的培训选项对LSTM网络进行培训。

网= trainNetwork (XTrain、YTrain层,选择);

{

加载测试集并将序列分类到扬声器中。

[XTest,欧美]= japaneseVowelsTestData;

对测试数据进行分类。指定与培训时相同的小批大小。

XTest YPred =分类(净,“MiniBatchSize”, miniBatchSize);

计算预测的分类精度。

acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9459

如果您有一个数字特征的数据集(例如一个没有空间或时间维度的数字数据集合),那么您可以使用特征输入层来训练深度学习网络。

从CSV文件中读取传输套管数据“transmissionCasingData.csv”

文件名=“transmissionCasingData.csv”;台= readtable(文件名,“TextType”“字符串”);

方法将用于预测的标签转换为类别convertvars函数。

labelName =“GearToothCondition”;台= convertvars(资源描述、labelName“分类”);

要使用分类特征训练网络,必须首先将分类特征转换为数字。方法将类别预测器转换为类别预测器convertvars通过指定包含所有类别输入变量名称的字符串数组来实现。在这个数据集中,有两个带有名称的分类特征“SensorCondition”而且“ShaftCondition”

categoricalInputNames = [“SensorCondition”“ShaftCondition”];台= convertvars(资源描述、categoricalInputNames“分类”);

循环遍历分类输入变量。为每一个变量:

  • 方法将分类值转换为一次性编码的向量onehotencode函数。

  • 方法将单热向量添加到表中addvars函数。指定在包含相应类别数据的列之后插入向量。

  • 删除包含分类数据的对应列。

i = 1:numel(categoricalInputNames) name = categoricalInputNames(i);哦= onehotencode(资源描述(:,名字));台= addvars(资源描述,哦,“后”、名称);台(:名字)= [];结束

方法将向量拆分为单独的列splitvars函数。

台= splitvars(台);

查看表的前几行。请注意,类别预测器已被拆分为多个列,类别值作为变量名。

头(台)
SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis没有传感器漂移传感器漂移没有轴穿轴穿GearToothCondition  ________ _________ ______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ ________________________ _______________ ____________ _____________ __________ __________________ -0.94876 -0.9722 1.3726 0.98387 0.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1429 0.031581 79.931 0 6.75e-06 3.23e-07 162.13 01 10无牙故障-0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.037835 70.325 0 5.08e-08 9.16e-08 226.12 01 10无牙故障1.0502 1.0267 1.4449 0.98491 2.8157 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.14790.031565 - 125.19 6.74 2.85 e-06 e-07 162.13 0 1 0 1没有牙齿错1.0227 1.0045 1.4288 0.99553 2.8157 3.6314 -0.016356 2.2483 1.9707 0.81324 30984 1.1472 0.032088 112.5 4.99 e-06 2.4 e-07 162.13 0 1 0 1没有牙齿错1.0123 1.0024 1.4202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.1469 0.03287 108.86 3.62 e-06 2.28 e-07 230.39 0 1 0 1没有牙齿错1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 1.65 0.81589 1.0985 0.033427 64.576 31102 0 2.55 e-06 e-07 230.3901 01无牙故障1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034159 98.838 0 1.73e-06 1.55e-07 230.39 01 01无牙故障1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.0353 44.223 0 1.11e-06 1.39e-07 230.39 01 01无牙故障

查看数据集的类名。

一会=类别(台{:,labelName})
一会=2 x1细胞{'无牙齿故障'}{'牙齿故障'}

接下来,将数据集划分为训练和测试分区。预留15%的数据用于测试。

确定每个分区的观察数。

numObservations =大小(1台);numObservationsTrain =地板(0.85 * numObservations);numObservationsTest = numObservations - numObservationsTrain;

创建一个与观察值对应的随机索引数组,并使用分区大小对其进行分区。

idx = randperm (numObservations);idxTrain = idx (1: numObservationsTrain);idxTest = idx (numObservationsTrain + 1:结束);

使用索引将数据表划分为训练和测试分区。

tblTrain =(资源(idxTrain:);tblTest =(资源(idxTest:);

定义一个具有特征输入层的网络,并指定特征的数量。另外,配置输入层以使用z分数归一化来归一化数据。

numFeatures = size(tbl,2) - 1;numClasses =元素个数(类名);layers = [featureInputLayer(numFeatures,“归一化”“zscore”) fulllyconnectedlayer (50) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

指定培训选项。

miniBatchSize = 16;选择= trainingOptions (“亚当”...“MiniBatchSize”miniBatchSize,...“洗牌”“every-epoch”...“阴谋”“训练进步”...“详细”、假);

使用定义的体系结构来训练网络、训练数据和训练选项。

网= trainNetwork (tblTrain层,选项);

{

利用训练好的网络对测试数据进行标签预测,并计算准确率。准确率是网络正确预测的标签的比例。

tblTest YPred =分类(净,“MiniBatchSize”, miniBatchSize);欧美= tblTest {: labelName};精度= sum(YPred == YTest)/numel(YTest)
精度= 0.9688

输入参数

全部折叠

图像数据,指定为以下之一:

数据类型 描述 示例使用
数据存储 ImageDatastore 保存在磁盘上的映像的数据存储。

用保存在磁盘上的图像训练图像分类神经网络,其中图像大小相同。

当图像大小不同时,使用AugmentedImageDatastore对象。

ImageDatastore对象只支持图像分类任务。为回归网络使用图像数据存储,请创建包含图像和响应的转换或组合数据存储变换而且结合函数,分别。

AugmentedImageDatastore 应用随机仿射几何变换的数据存储,包括调整大小、旋转、反射、剪切和平移。

  • 用保存在磁盘上的不同大小的图像训练图像分类神经网络。

  • 训练图像分类神经网络,使用增广法生成新数据。

TransformedDatastore 使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。

  • 训练图像回归神经网络。

  • 训练多输入的网络。

  • 对输出不支持的数据存储进行转换trainNetwork

  • 对数据存储输出应用自定义转换。

CombinedDatastore 从两个或多个基础数据存储读取数据的数据存储。

  • 训练图像回归神经网络。

  • 训练多输入的网络。

  • 结合来自不同数据源的预测器和响应。

PixelLabelImageDatastore(计算机视觉工具箱) 对图像和相应的像素标签应用相同的仿射几何变换的数据存储。 训练神经网络进行语义分割。
RandomPatchExtractionDatastore(图像处理工具箱) 从图像或像素标签图像中提取成对随机补丁的数据存储,并可选地对这些对应用相同的随机仿射几何变换。 训练神经网络进行目标检测。
DenoisingImageDatastore(图像处理工具箱) 应用随机生成的高斯噪声的数据存储。 训练神经网络进行图像去噪。
自定义mini-batch数据存储 返回小批量数据的自定义数据存储。

使用其他数据存储不支持的格式的数据训练神经网络。

有关详细信息,请参见开发自定义小批量数据存储

数字数组 指定为数值数组的图像。如果将图像指定为数字数组,则还必须指定反应论点。 训练神经网络使用适合内存的数据,不需要额外的处理,如扩充。
表格 指定为表的图像。控件将图像指定为一个表,那么还可以指定哪些列包含响应反应论点。 使用存储在表中的数据训练神经网络。

对于有多个输入的网络,数据存储必须是TransformedDatastoreCombinedDatastore对象。

提示

对于图像序列,例如视频数据,使用序列输入参数。

数据存储

数据存储读取小批的图像和响应。当您的数据不适合存储在内存中,或者您希望对数据应用扩充或转换时,数据存储是最适合的。

下面的列表列出了直接兼容的数据存储trainNetwork图像数据。

方法可以创建映像数据存储imageDatastore函数,并使用包含图像的文件夹的名称作为标签“LabelSource”选项“foldernames”.方法手动指定标签标签图像数据存储的属性。

请注意,ImageDatastore对象允许使用预取批量读取JPG或PNG图像文件。如果使用自定义函数读取图像,则ImageDatastore对象不预取。

提示

使用augmentedImageDatastore用于深度学习的图像高效预处理,包括图像调整。

请勿使用readFcn选择的imageDatastore函数用于预处理或调整大小,因为此选项通常非常慢。

方法可以使用其他内置数据存储来训练深度学习网络变换而且结合功能。这些函数可以将从数据存储中读取的数据转换为所需的格式trainNetwork

对于有多个输入的网络,数据存储必须是TransformedDatastoreCombinedDatastore对象。

所需的数据存储输出格式取决于网络架构。

网络体系结构 数据存储输出 示例输出
单个输入层

有两列的表格或单元格数组。

第一列和第二列分别指定预测器和响应。

表元素必须是标量、行向量或包含数字数组的1 × 1单元格数组。

自定义小批处理数据存储必须输出表。

一输入一输出网络表:

data =阅读(ds)
data = 4×2 table Predictors Response __________________ ________ {224×224×3 double} 2 {224×224×3 double} 7 {224×224×3 double} 9 {224×224×3 double} 9

具有一个输入和一个输出的网络单元格数组:

data =阅读(ds)
Data = 4×2 cell array {224×224×3 double} {[2]} {224×224×3 double} {[7]} {224×224×3 double} {[9]} {224×224×3 double} {[9]}

多个输入层

带有(的单元格数组numInputs+ 1)列,其中numInputs是网络输入的数量。

第一个numInputs列指定每个输入的预测器,最后一列指定响应。

输入的顺序由InputNames层图的属性

用于两个输入和一个输出的网络的单元阵列。

data =阅读(ds)
数据= 4×3 cell array {224×224×3 double} {128×128×3 double} {[2]} {224×224×3 double} {128×128×3 double} {[2]} {224×224×3 double} {128×128×3 double} {[9]} {224×224×3 double} {128×128×3 double} {[9]}

预测器的格式取决于数据的类型。

数据 格式
二维图像

h——- - - - - -w——- - - - - -c数字数组,hw,c分别为图像的高度、宽度和通道数。

三维图像 h——- - - - - -w——- - - - - -d——- - - - - -c数字数组,hwd,c分别为图像的高度、宽度、深度和通道数。

对于表中返回的预测器,元素必须包含数值标量、数值行向量或包含数值数组的1 × 1单元格数组。

响应的格式取决于任务的类型。

任务 响应格式
图像分类 绝对标量
形象回归
  • 数字标量

  • 数值向量

  • 表示二维图像的三维数字数组

  • 表示3-D图像的4-D数字数组

对于在表中返回的响应,元素必须是类别标量、数值标量、数值行向量或包含数值数组的1 × 1单元格数组。

有关更多信息,请参见用于深度学习的数据存储

数字数组

对于适合内存且不需要额外处理(如增强)的数据,可以将图像数据集指定为数字数组。如果将图像指定为数字数组,则还必须指定反应论点。

数值数组的大小和形状取决于图像数据的类型。

数据 格式
二维图像

h——- - - - - -w——- - - - - -c——- - - - - -N数字数组,hw,c图像的高度、宽度和通道数是否分别为N是图像的数量。

三维图像 h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N数字数组,hwd,c图像的高度、宽度、深度和通道数是否分别为N是图像的数量。

表格

作为数据存储或数字数组的替代方案,您还可以在表中指定图像和响应。控件将图像指定为一个表,那么还可以指定哪些列包含响应反应论点。

在表中指定图像和响应时,表中的每一行都对应一个观察结果。

对于图像输入,预测器必须在表的第一列中,指定为以下之一:

  • 图像的绝对或相对文件路径,指定为字符向量

  • 1 × 1单元格数组包含h——- - - - - -w——- - - - - -c表示二维图像的数值数组,其中hw,c分别对应于图像的高度、宽度和通道数。

响应的格式取决于任务的类型。

任务 响应格式
图像分类 绝对标量
形象回归
  • 数字标量

  • 两个或多个标量值列

  • 1 × 1单元格数组包含h——- - - - - -w——- - - - - -c表示二维图像的数字数组

  • 1 × 1单元格数组包含h——- - - - - -w——- - - - - -d——- - - - - -c表示3d图像的数字数组

对于带有图像输入的神经网络,如果不指定反应,则该函数默认使用的第一列资源描述用于预测器和后续列作为响应。

提示

  • 如果预测器或响应包含S,然后它们在训练过程中通过网络传播。在这些情况下,训练通常无法收敛。

  • 对于回归任务,将响应归一化通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络用于回归

  • 将复值数据输入到网络中SplitComplexInputs输入层的选项必须为1

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|表格
复数的支持:是的

序列或时间序列数据,指定为下列之一:

数据类型 描述 示例使用
数据存储 TransformedDatastore 使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。

  • 对输出不支持的数据存储进行转换trainNetwork

  • 对数据存储输出应用自定义转换。

CombinedDatastore 从两个或多个基础数据存储读取数据的数据存储。

结合来自不同数据源的预测器和响应。

自定义mini-batch数据存储 返回小批量数据的自定义数据存储。

使用其他数据存储不支持的格式的数据训练神经网络。

有关详细信息,请参见开发自定义小批量数据存储

数字或单元格数组 指定为数值数组的单个序列或指定为数值数组的单元数组的序列数据集。如果将序列指定为数值或单元格数组,则还必须指定反应论点。 使用适合内存的数据训练神经网络,不需要额外的处理,如自定义转换。

数据存储

数据存储读取小批序列和响应。当您的数据不适合存储在内存中,或者您希望对数据应用转换时,数据存储是最适合的。

下面的列表列出了直接兼容的数据存储trainNetwork序列数据。

方法可以使用其他内置数据存储来训练深度学习网络变换而且结合功能。这些函数可以将从数据存储读取的数据转换为所需的表或单元格数组格式trainNetwork.例如,您可以使用转换和组合从内存数组和CSV文件读取的数据ArrayDatastore而且TabularTextDatastore对象,分别。

数据存储必须返回表或单元格数组中的数据。自定义小批处理数据存储必须输出表。

数据存储输出 示例输出
表格
data =阅读(ds)
表= 4×2数据预测的反应  __________________ ________ { 12×50双}2{12×50双}7{12×50双}9{12×50双}9
单元阵列
data =阅读(ds)
Data = 4×2 cell array {12×50 double} {[2]} {12×50 double} {[7]} {12×50 double} {[9]} {12×50 double} {[9]}

预测器的格式取决于数据的类型。

数据 格式的预测
向量序列

c——- - - - - -年代矩阵,c序列的特征数和年代为序列长度。

一维图像序列

h——- - - - - -c——- - - - - -年代数组,h而且c分别对应于图像的高度和通道数,和年代为序列长度。

小批中的每个序列必须具有相同的序列长度。

二维图像序列

h——- - - - - -w——- - - - - -c——- - - - - -年代数组,hw,c分别对应于图像的高度、宽度和通道数,和年代为序列长度。

小批中的每个序列必须具有相同的序列长度。

三维图像序列

h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代数组,hwd,c分别对应于图像的高度、宽度、深度和通道数,和年代为序列长度。

小批中的每个序列必须具有相同的序列长度。

对于表中返回的预测器,元素必须包含数值标量、数值行向量或包含数值数组的1 × 1单元格数组。

响应的格式取决于任务的类型。

任务 格式的响应
Sequence-to-label分类 绝对标量
Sequence-to-one回归

标量

Sequence-to-vector回归

数字行向量

Sequence-to-sequence分类

  • 1 -年代类别标签序列,其中年代是对应预测器序列的序列长度。

  • h——- - - - - -w——- - - - - -年代类别标签序列,其中hw,年代分别为对应预测器序列的高度、宽度和序列长度。

  • h——- - - - - -w——- - - - - -d——- - - - - -年代类别标签序列,其中hwd,年代分别为对应预测器序列的高度、宽度、深度和序列长度。

小批中的每个序列必须具有相同的序列长度。

Sequence-to-sequence回归
  • R——- - - - - -年代矩阵,R回复的数量和年代是对应预测器序列的序列长度。

  • h——- - - - - -w——- - - - - -R——- - - - - -年代数字响应序列,其中R是回复的数量,和hw,年代分别为对应预测器序列的高度、宽度和序列长度。

  • h——- - - - - -w——- - - - - -d——- - - - - -R——- - - - - -年代数字响应序列,其中R是回复的数量,和hwd,年代分别为对应预测器序列的高度、宽度、深度和序列长度。

小批中的每个序列必须具有相同的序列长度。

对于在表中返回的响应,元素必须是类别标量、数值标量、数值行向量或包含数值数组的1 × 1单元格数组。

有关更多信息,请参见用于深度学习的数据存储

数字或单元格数组

对于适合内存且不需要其他处理(如自定义转换)的数据,可以将单个序列指定为数值数组,或将序列数据集指定为数值数组的单元格数组。如果将序列指定为单元格或数字数组,则还必须指定反应论点。

对于单元格数组输入,单元格数组必须是N-by-1单元格数组的数字数组,其中N是观察数。表示序列的数值数组的大小和形状取决于序列数据的类型。

输入 描述
向量序列 c——- - - - - -年代矩阵,c序列的特征数量和年代为序列长度。
一维图像序列 h——- - - - - -c——- - - - - -年代数组,h而且c分别对应图像的高度和通道数,和年代为序列长度。
二维图像序列 h——- - - - - -w——- - - - - -c——- - - - - -年代数组,hw,c分别对应于图像的高度、宽度和通道数,和年代为序列长度。
三维图像序列 h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代,在那里hwd,c分别为三维图像的高度、宽度、深度和通道数,和年代为序列长度。

trainNetwork函数支持最多一个序列输入层的网络。

提示

  • 如果预测器或响应包含S,然后它们在训练过程中通过网络传播。在这些情况下,训练通常无法收敛。

  • 对于回归任务,规范化响应通常有助于稳定和加速训练。有关更多信息,请参见训练卷积神经网络用于回归

  • 将复值数据输入到网络中SplitComplexInputs输入层的选项必须为1

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|细胞
复数的支持:是的

特征数据,指定为以下之一:

数据类型 描述 示例使用
数据存储 TransformedDatastore 使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。

  • 训练多输入的网络。

  • 对输出不支持的数据存储进行转换trainNetwork

  • 对数据存储输出应用自定义转换。

CombinedDatastore 从两个或多个基础数据存储读取数据的数据存储。

  • 训练多输入的网络。

  • 结合来自不同数据源的预测器和响应。

自定义mini-batch数据存储 返回小批量数据的自定义数据存储。

使用其他数据存储不支持的格式的数据训练神经网络。

有关详细信息,请参见开发自定义小批量数据存储

表格 作为表指定的特性数据。控件将功能部件指定为表,那么还可以指定哪些列包含响应反应论点。 使用存储在表中的数据训练神经网络。
数字数组 指定为数值数组的特征数据。如果将特性指定为数字数组,则还必须指定反应论点。 使用适合内存的数据训练神经网络,不需要额外的处理,如自定义转换。

数据存储

数据存储读取特性数据和响应的小批。当您的数据不适合存储在内存中,或者您希望对数据应用转换时,数据存储是最适合的。

下面的列表列出了直接兼容的数据存储trainNetwork特性数据。

方法可以使用其他内置数据存储来训练深度学习网络变换而且结合功能。这些函数可以将从数据存储读取的数据转换为所需的表或单元格数组格式trainNetwork.有关更多信息,请参见用于深度学习的数据存储

对于有多个输入的网络,数据存储必须是TransformedDatastoreCombinedDatastore对象。

数据存储必须返回表或单元格数组中的数据。自定义小批处理数据存储必须输出表。数据存储输出的格式取决于网络架构。

网络体系结构 数据存储输出 示例输出
单个输入层

有两列的表格或单元格数组。

第一列和第二列分别指定预测器和响应。

表元素必须是标量、行向量或包含数字数组的1 × 1单元格数组。

自定义小批处理数据存储必须输出表。

一输入一输出网络表:

data =阅读(ds)
表= 4×2数据预测的反应  __________________ ________ { 24×1双}2{24×1双}7{24×1双}9{24×1双}9

具有一个输入和一个输出的网络单元格数组:

data =阅读(ds)
Data = 4×2 cell array {24×1 double} {[2]} {24×1 double} {[7]} {24×1 double} {[9]} {24×1 double} {[9]}

多个输入层

带有(的单元格数组numInputs+ 1)列,其中numInputs是网络输入的数量。

第一个numInputs列指定每个输入的预测器,最后一列指定响应。

输入的顺序由InputNames层图的属性

两个输入和一个输出的网络单元阵列:

data =阅读(ds)
数据= 4×3 cell array {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[9]} {24×1 double} {28×1 double} {[9]}

预测器肯定是这样c-by-1列向量,其中c就是特征的数量。

响应的格式取决于任务的类型。

任务 格式的响应
分类 绝对标量
回归

  • 标量

  • 数值向量

有关更多信息,请参见用于深度学习的数据存储

表格

对于适合内存且不需要额外处理(如自定义转换)的特征数据,可以将特征数据和响应指定为表。

表中的每一行都对应一个观察结果。预测器和响应在表列中的排列取决于任务的类型。

任务 预测 反应
功能分类

在一个或多个列中指定为标量的特性。

如果不指定反应参数,那么预测器必须在第一个numFeatures表的列,其中numFeatures是输入数据的特征数。

分类标签

功能回归

标量值的一个或多个列

对于带有特征输入的分类网络,如果不指定反应参数,则该函数默认使用第一个(numColumns - 1)的列资源描述对于预测器和标签的最后一列,其中numFeatures是输入数据中特征的数量。

对于带有特征输入的回归网络,如果不指定responseNames参数,则该函数在默认情况下使用第一个numFeatures预测器的列和响应的后续列,其中numFeatures是输入数据中特征的数量。

数字数组

对于适合内存且不需要其他处理(如自定义转换)的特征数据,可以将特征数据指定为数值数组。如果将特征数据指定为数字数组,则还必须指定反应论点。

数值数组必须是N——- - - - - -numFeatures数字数组,N观察的次数和numFeatures是输入数据的特征数。

提示

  • 将反应归一化通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络用于回归

  • 回复中不能包含s.如果预测数据包含S,然后它们通过训练进行传播。然而,在大多数情况下,训练不能收敛。

  • 将复值数据输入到网络中SplitComplexInputs输入层的选项必须为1

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|表格
复数的支持:是的

混合数据和答复,指定为以下之一:

数据类型 描述 示例使用
TransformedDatastore 使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。

  • 训练多输入的网络。

  • 不支持的数据存储的转换输出trainNetwork要有所需的格式。

  • 对数据存储输出应用自定义转换。

CombinedDatastore 从两个或多个基础数据存储读取数据的数据存储。

  • 训练多输入的网络。

  • 结合来自不同数据源的预测器和响应。

自定义mini-batch数据存储 返回小批量数据的自定义数据存储。

使用其他数据存储不支持的格式的数据训练神经网络。

有关详细信息,请参见开发自定义小批量数据存储

方法可以使用其他内置数据存储来训练深度学习网络变换而且结合功能。这些函数可以将从数据存储读取的数据转换为所需的表或单元格数组格式trainNetwork.有关更多信息,请参见用于深度学习的数据存储

数据存储必须返回表或单元格数组中的数据。自定义小批处理数据存储必须输出表。数据存储输出的格式取决于网络架构。

数据存储输出 示例输出

带有(的单元格数组numInputs+ 1)列,其中numInputs是网络输入的数量。

第一个numInputs列指定每个输入的预测器,最后一列指定响应。

输入的顺序由InputNames层图的属性

data =阅读(ds)
数据= 4×3 cell array {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[9]} {24×1 double} {28×1 double} {[9]}

对于图像、序列和特征预测器输入,预测器的格式必须与中描述的格式相匹配图片序列,或特性参数描述,分别。类似地,响应的格式必须与中描述的格式匹配图片序列,或特性与任务类型对应的实参描述。

trainNetwork函数支持最多一个序列输入层的网络。

有关演示如何训练具有多个输入的网络的示例,请参见图像与特征数据训练网络

提示

  • 若要将数字数组转换为数据存储,请使用ArrayDatastore

  • 当在具有混合数据类型的网络中组合层时,在将数据传递给组合层(例如连接层或添加层)之前,可能需要重新格式化数据。要重新格式化数据,可以使用压平层将空间维度压平为通道维度,或者创建FunctionLayer对象或重新格式化和重塑的自定义层。

响应。

当输入数据是单元格数组的数字数组时,将响应指定为以下方式之一。

  • 标签的分类向量

  • 数字响应的数字数组

  • 分类或数字序列的单元格数组

当输入数据是一个表时,您可以选择指定表的哪些列包含响应,如下所示:

  • 特征向量

  • 字符向量的单元格数组

  • 字符串数组

如果输入数据是数值数组或单元格数组,则响应的格式取决于任务的类型。

任务 格式
分类 图像分类 N-by-1标签分类向量,其中N是观察数。
功能分类
Sequence-to-label分类
Sequence-to-sequence分类

N-by-1单元格的标签分类序列数组,其中N是观察数。每个序列必须具有与相应的预测序列相同的时间步数。

对于单次观测的序列到序列分类任务,序列也可以是一个向量。在这种情况下,反应必须是标签的分类行向量。

回归 二维图像回归
  • N——- - - - - -R矩阵,N是图像的数量和R是回应的数量。

  • h——- - - - - -w——- - - - - -c——- - - - - -N数字数组,hw,c图像的高度、宽度和通道数是否分别为N是图像的数量。

三维图像回归
  • N——- - - - - -R矩阵,N是图像的数量和R是回应的数量。

  • h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N数字数组,hwd,c图像的高度、宽度、深度和通道数是否分别为N是图像的数量。

功能回归

N——- - - - - -R矩阵,N观察的次数和R是回应的数量。

Sequence-to-one回归 N——- - - - - -R矩阵,N序列的个数和R是回应的数量。
Sequence-to-sequence回归

N-by-1单元格数组的数字序列,其中N是数列数,数列由下列之一给出:

  • R——- - - - - -年代矩阵,R回复的数量和年代是对应预测器序列的序列长度。

  • h——- - - - - -w——- - - - - -R——- - - - - -年代数组,h而且w分别为输出的高度和宽度,R是回复的数量,和年代是对应预测器序列的序列长度。

  • h——- - - - - -w——- - - - - -d——- - - - - -R——- - - - - -年代数组,hw,d分别为输出的高度、宽度和深度,R是回复的数量,和年代是对应预测器序列的序列长度。

对于单次观测的序列对序列回归任务,序列可以是数字数组。在这种情况下,反应肯定是响应的数字数组。

提示

将反应归一化通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络用于回归

提示

回复中不能包含s.如果预测数据包含S,然后它们通过训练进行传播。然而,在大多数情况下,训练不能收敛。

网络层,指定为数组或一个LayerGraph对象。

要创建所有层按顺序连接的网络,可以使用数组作为输入参数。在本例中,返回的网络是SeriesNetwork对象。

有向无环图(DAG)网络具有复杂的结构,其中各层可以有多个输入和输出。要创建DAG网络,请将网络架构指定为LayerGraph对象,然后使用该图层图作为输入参数trainNetwork

trainNetwork函数支持最多一个序列输入层的网络。

有关内置层的列表,请参见深度学习层列表

培训选项,指定为TrainingOptionsSGDMTrainingOptionsRMSProp,或TrainingOptionsADAM对象返回的trainingOptions函数。

输出参数

全部折叠

受过网络训练,归为一SeriesNetwork对象或一个DAGNetwork对象。

如果你用数组,然后是一个SeriesNetwork对象。如果你用LayerGraph对象,然后是一个DAGNetwork对象。

训练信息,作为结构返回,其中每个字段是一个标量或一个数字向量,每个训练迭代有一个元素。

对于分类任务,信息包含以下字段:

  • TrainingLoss-损失函数值

  • TrainingAccuracy——训练精度

  • ValidationLoss-损失函数值

  • ValidationAccuracy——验证精度

  • BaseLearnRate——学习利率

  • FinalValidationLoss-返回网络的验证丢失

  • FinalValidationAccuracy-返回网络的验证精度

  • OutputNetworkIteration-返回网络的迭代次数

对于回归任务,信息包含以下字段:

  • TrainingLoss-损失函数值

  • TrainingRMSE-训练RMSE值

  • ValidationLoss-损失函数值

  • ValidationRMSE-验证RMSE值

  • BaseLearnRate——学习利率

  • FinalValidationLoss-返回网络的验证丢失

  • FinalValidationRMSE-返回网络的RMSE验证

  • OutputNetworkIteration-返回网络的迭代次数

该结构只包含字段ValidationLossValidationAccuracyValidationRMSEFinalValidationLossFinalValidationAccuracy,FinalValidationRMSE选项指定验证数据。的ValidationFrequency训练选项决定软件计算验证指标的迭代。最终的验证指标是标量的。该结构的其他字段是行向量,其中每个元素对应于一个训练迭代。对于软件不计算验证度量的迭代,结构中的对应值为

对于包含批处理归一化层的网络,如果BatchNormalizationStatistics训练方法是“人口”最后的验证指标往往与培训期间评估的验证指标不同。这是因为最终网络中的批处理归一化层执行的操作与训练期间不同。有关更多信息,请参见batchNormalizationLayer

更多关于

全部折叠

保存检查点网络并恢复训练

深度学习工具箱™使您能够在培训期间将网络保存为.mat文件。当您拥有大型网络或大型数据集,并且训练需要很长时间时,这种定期节省尤其有用。如果训练因某种原因中断,您可以从最后保存的检查点网络恢复训练。如果你想要trainNetwork方法来指定路径的名称,以保存检查点网络CheckpointPath选择trainingOptions.如果指定的路径不存在,则trainingOptions返回一个错误。

trainNetwork自动为检查点网络文件分配唯一的名称。在示例名称中,net_checkpoint__351__2018_04_12__18_09_52.mat, 351为迭代次数,2018年_04_12日期是,和18 _09_52是几点trainNetwork保存网络。您可以通过双击检查点网络文件或在命令行上使用load命令来加载它。例如:

负载net_checkpoint__351__2018_04_12__18_09_52.mat
然后,您可以通过使用网络的层作为输入参数来恢复训练trainNetwork.例如:

trainNetwork (XTrain TTrain、net.Layers选项)
您必须手动指定训练选项和输入数据,因为检查点网络不包含这些信息。示例请参见从检查点网络恢复培训

浮点算术

训练网络时使用trainNetwork函数,或者在使用预测或验证函数时DAGNetwork而且SeriesNetwork对象,该软件使用单精度浮点算术执行这些计算。用于训练、预测和验证的函数包括trainNetwork预测分类,激活.当你使用cpu和gpu训练网络时,该软件使用单精度算法。

参考文献

[1]工藤、富山、Shimbo。“利用穿过区域的多维曲线分类”。模式识别的字母.第20卷第11-13期,第1103-1111页。

[2]工藤、富山、Shimbo。日语元音数据集.https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

扩展功能

版本历史

介绍了R2016a

全部展开

Baidu
map