主要内容

trainNetwork

训练深度学习神经网络

描述

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

例如,你可以训练:

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

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

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

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

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

例子

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

例子

= trainNetwork (图片反应选项)指定的图像的火车图片和由反应

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

例子

= trainNetwork (序列反应选项)指定的序列来训练序列和由反应

例子

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

= trainNetwork (特性反应选项)使用指定的特征数据进行训练特性和由反应

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

例子

全部折叠

加载数据为ImageDatastore对象。

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

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

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

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

图中包含20个轴对象。坐标轴对象1包含一个image类型的对象。坐标轴对象2包含一个image类型的对象。坐标轴对象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(imds,numTrainingFiles,“随机”);

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

定义卷积神经网络架构。

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

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

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

培训网络。

net = trainNetwork(imdsTrain,layers,options);

图训练进度(01-Sep-2021 08:30:15)包含2个axis对象和另一个类型为uigridlayout的对象。坐标轴对象1包含patch、text、line类型的6个对象。坐标轴对象2包含patch、text、line类型的6个对象。

在未用于训练网络的测试集上运行训练好的网络,并预测图像标签(数字)。

YPred = category (net,imdsTest);YTest = imdsTest.Labels;

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

精度= sum(YPred == YTest)/numel(YTest)
准确度= 0.9404

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

加载由手写数字合成图像组成的样本数据。

[XTrain,YTrain] = digitTrain4DArrayData;

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

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

  • 1是通道数。

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

YTrain是包含每个观察值的标签的分类向量。

留出1000个图像用于网络验证。

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

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

imageAugmenter = imageDataAugmenter(...“RandRotation”(-20年,20),...“RandXTranslation”3 [3],...“RandYTranslation”3 [3])
imageAugmenter = imageDataAugmenter with properties: FillValue: 0 RandXReflection: 0 RandYReflection: 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 = augmentedimagedastore (imageSize,XTrain,YTrain,“DataAugmentation”, imageAugmenter);

指定卷积神经网络架构。

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

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

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

培训网络。由于验证图像未被增强,验证精度高于训练精度。

net = trainNetwork(augimds,layers,opts);

图训练进度(01-Sep-2021 08:35:08)包含2个axis对象和另一个类型为uigridlayout的对象。坐标轴对象1包含8个类型为patch、text、line的对象。坐标轴对象2包含8个类型为patch、text、line的对象。

加载由手写数字合成图像组成的样本数据。第三个输出包含每个图像旋转的相应角度(以角度为单位)。

使用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类型的对象。坐标轴对象2包含一个image类型的对象。坐标轴对象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 fullyConnectedLayer(1) regressionLayer];

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

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

培训网络。

net = trainNetwork(XTrain,YTrain,图层,选项);

图Training Progress (01-Sep-2021 08:38:00)包含2个axis对象和另一个uigridlayout类型的对象。坐标轴对象1包含patch、text、line类型的7个对象。坐标轴对象2包含patch、text、line类型的7个对象。

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

[XTest,~,YTest] = digitTest4DArrayData;YPred = predict(net,XTest);

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

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

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

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

[XTrain,YTrain] =日本evowelstraindata;

把第一个时间序列想象成一个图形。每一行对应一个特征。

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

图中包含一个轴对象。标题为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”“最后一次”fullyConnectedLayer(numClasses) softmaxLayer classificationLayer
2”LSTM LSTM 100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex

指定培训选项。指定求解器为“亚当”而且“GradientThreshold”为1。将mini-batch大小设置为27,并将最大epoch数设置为70。

因为迷你批的数量小,序列短,所以CPU更适合训练。集“ExecutionEnvironment”“cpu”.要在GPU上训练,如果可用,请设置“ExecutionEnvironment”“汽车”(默认值)。

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

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

net = trainNetwork(XTrain,YTrain,图层,选项);

图训练进度(01-Sep-2021 08:34:05)包含2个axis对象和另一个类型为uigridlayout的对象。坐标轴对象1包含11个类型为patch、text、line的对象。坐标轴对象2包含11个类型为patch、text、line的对象。

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

[XTest,YTest] =日本evowelstestdata;

分类测试数据。指定用于训练的相同的小批大小。

YPred = category (net,XTest,“MiniBatchSize”, miniBatchSize);

计算预测的分类精度。

acc = sum(YPred == YTest)./ nummel (YTest)
Acc = 0.9568

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

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

文件名=“transmissionCasingData.csv”;TBL =可读(文件名,“TextType”“字符串”);

属性将预测标签转换为分类标签convertvars函数。

labelName =“GearToothCondition”;tbl = convertvars(tbl,labelName,“分类”);

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

categoricalInputNames = [“SensorCondition”“ShaftCondition”];tbl = convertvars(tbl,categoricalInputNames,“分类”);

遍历分类输入变量。对于每个变量:

  • 类将类别值转换为单热编码向量onehotencode函数。

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

  • 删除包含类别数据的相应列。

i = 1:numel(categoricalInputNames) name = categoricalInputNames(i);Oh = onehotencode(tbl(:,name));TBL = addvars(TBL,哦,“后”、名称);Tbl (:,name) = [];结束

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

TBL =分裂(TBL);

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

头(台)
ans =表8×23SigMean 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 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 011牙号故障

查看数据集的类名。

classNames =类别(tbl{:,labelName})
一会=2 x1细胞{“没有牙齿故障”}{“牙齿故障”}

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

确定每个分区的观察数。

numObservations = size(tbl,1);numObservationsTrain = floor(0.85*numObservations);numObservationsTest = numObservations - numObservationsTrain;

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

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

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

tblTrain = tbl(idxTrain,:);tblTest = tbl(idxTest,:);

定义一个带有特征输入层的网络,并指定特征的数量。此外,配置输入层以使用Z-score规范化对数据进行规范化。

numFeatures = size(tbl,2) - 1;numClasses = numel(classNames);layers = [featureInputLayer(numFeatures,“归一化”“zscore”) fullyConnectedLayer(50) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

指定培训选项。

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

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

net = trainNetwork(tblTrain,layers,options);

图训练进度(01-Sep-2021 08:27:04)包含2个axis对象和另一个类型为uigridlayout的对象。坐标轴对象1包含patch、text、line类型的7个对象。坐标轴对象2包含patch、text、line类型的7个对象。

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

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

输入参数

全部折叠

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

数据类型 描述 示例使用
数据存储 ImageDatastore 包含图像和标签的数据存储。

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

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

ImageDatastore对象只支持图像分金宝app类任务。要将图像数据存储用于回归网络,请创建一个经过转换或组合的数据存储,其中包含使用变换而且结合函数,分别。

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

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

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

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

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

  • 训练多输入网络。

  • 类不支持的数据存储的转换输出金宝apptrainNetwork函数来获得所需的格式。

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

CombinedDatastore 从两个或多个底层数据存储中读取的数据存储。

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

  • 训练多输入网络。

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

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

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

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

数字数组 指定为数值数组的图像。如果将图像指定为数字数组,则还必须指定反应论点。 使用适合内存的数据训练神经网络,不需要额外的处理,如增强。
表格 指定为表的映像。方法指定图像为表,则还可以指定包含响应的列反应论点。 使用存储在表中的数据训练神经网络。

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

提示

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

数据存储

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

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

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

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

提示

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

请勿使用readFcn选择imageDatastore用于预处理或调整大小,因为此选项通常显着较慢。

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

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

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

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

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

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

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

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

一输入一输出网络表:

数据=读取(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 = 4×2 table Predictors Response

一输入一输出网络的单元格数组:

数据=读取(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层图的属性

网络单元阵列,有两个输入和一个输出。

数据=读取(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单元格数组。

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

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

  • 数值向量

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

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

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

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

数字数组

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

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

数据 格式
二维图像

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

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

表格

作为数据存储或数字数组的替代方法,还可以在表中指定映像和响应。方法指定图像为表,则还可以指定包含响应的列反应论点。

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

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

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

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

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

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

  • 两列或多列标量值

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

  • 包含a的1乘1单元格数组h——- - - - - -w——- - - - - -d——- - - - - -c表示三维图像的数字数组

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

提示

如果预测因子或响应包含S,然后在训练过程中通过网络传播。在这种情况下,训练通常不能收敛。

提示

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

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

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

  • 转换不支持的数据存储的输出金宝apptrainNetwork以获得所需的格式。

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

CombinedDatastore 从两个或多个底层数据存储中读取的数据存储。

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

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

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

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

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

数据存储

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

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

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

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

数据存储输出 示例输出
表格
数据=读取(ds)
表= 4×2数据预测的反应  __________________ ________ { 12×50双}2{12×50双}7{12×50双}9{12×50双}9
单元阵列
数据=读取(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——- - - - - -年代数组,hw,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是观测的数量。表示序列的数值数组的大小和形状取决于序列数据的类型:ce

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

提示

如果预测因子或响应包含S,然后在训练过程中通过网络传播。在这种情况下,训练通常不能收敛。

提示

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

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

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

  • 训练多输入网络。

  • 转换不支持的数据存储的输出金宝apptrainNetwork以获得所需的格式。

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

CombinedDatastore 从两个或多个底层数据存储中读取的数据存储。

  • 训练多输入网络。

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

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

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

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

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

数据存储

数据存储读取小批量的特征数据和响应。当您拥有不适合内存的数据时,或者当您希望对数据应用转换时,数据存储最适合。

下面的列表列出了与之直接兼容的数据存储trainNetwork对于特征数据。

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

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

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

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

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

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

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

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

一输入一输出网络表:

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

一输入一输出网络的单元格数组:

数据=读取(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层图的属性

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

数据=读取(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,然后通过训练进行传播。然而,在大多数情况下,训练不能收敛。

响应。

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

  • 标签的分类向量

  • 数字响应的数字数组

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

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

  • 特征向量

  • 字符向量的单元格数组

  • 字符串数组

当输入数据是数字数组或单元格数组时,响应的格式取决于任务的类型。

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

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

对于单次观测的序列到序列分类任务,序列也可以是矢量。在这种情况下,Y一定是标签的分类序列。

回归 二维图像回归
  • 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,然后通过训练进行传播。然而,在大多数情况下,训练不能收敛。

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

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

有向无环图(DAG)网络具有复杂的结构,其中各层可以有多个输入和输出。如果要创建DAG网络,请将网络架构指定为LayerGraph对象,然后使用该层图作为输入参数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 YTrain、net.Layers选项)
您必须手动指定训练选项和输入数据,因为检查点网络不包含这些信息。有关示例,请参见从Checkpoint Network恢复培训

浮点算术

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

兼容性的考虑

全部展开

R2021a开始警告

R2021b的行为发生了变化

参考文献

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

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

扩展功能

在R2016a中引入