trainNetwork
训练深度学习神经网络
语法
描述
分类和回归任务,你可以训练各种类型的神经网络使用trainNetwork
函数。
例如,你可以训练:
卷积神经网络(ConvNet, CNN)用于图像数据
循环神经网络(RNN),如长短期记忆(LSTM)或门控循环单元(GRU)神经网络用于序列和时间序列数据
数值特征数据的多层感知器(MLP)神经网络
您可以在CPU或GPU上进行训练。对于图像分类和图像回归,您可以使用多个gpu或本地或远程并行池并行训练单个神经网络。在GPU或并行上进行训练需要并行计算工具箱™。要使用GPU进行深度学习,还必须有支持GPU的设备。有关受支持设备的信息,请参见GPU计算要求(并行计算工具箱).若要指定培训选项,包括用于执行环境的选项,请使用trainingOptions
函数。
在训练神经网络时,可以将预测器和响应指定为单个输入或两个单独的输入。
例子
图像分类训练网络
加载数据为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;结束
对数据存储进行划分,使训练集中的每个类别有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);
在未用于训练网络的测试集上运行训练好的网络,并预测图像标签(数字)。
YPred = category (net,imdsTest);YTest = imdsTest.Labels;
计算精度。准确度是测试数据中与分类相匹配的真实标签的数量之比分类
到测试数据中的图像数量。
精度= sum(YPred == YTest)/numel(YTest)
准确度= 0.9412
列车网络与增强图像
使用增强图像数据训练卷积神经网络。数据增强有助于防止网络过度拟合和记忆训练图像的确切细节。
加载由手写数字合成图像组成的样本数据。
[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);
图像回归训练网络
加载由手写数字合成图像组成的样本数据。第三个输出包含每个图像旋转的相应角度(以角度为单位)。
使用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;结束
指定卷积神经网络架构。对于回归问题,在网络的末端包含一个回归层。
层= [...imageInputLayer([28 28 1]) convolution2dLayer(12,25) reluLayer fullyConnectedLayer(1) regressionLayer];
指定网络培训选项。将初始学习速率设置为0.001。
选项= trainingOptions(“个”,...“InitialLearnRate”, 0.001,...“详细”假的,...“阴谋”,“训练进步”);
培训网络。
net = trainNetwork(XTrain,YTrain,图层,选项);
通过评估测试数据的预测精度来测试网络的性能。使用预测
预测验证图像的旋转角度。
[XTest,~,YTest] = digitTest4DArrayData;YPred = predict(net,XTest);
通过计算预测和实际旋转角度的均方根误差(RMSE)来评估模型的性能。
rmse =√(mean(YTest - YPred).^2))
rmse =单6.0783
序列分类训练网络
训练深度学习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”)
定义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,图层,选项);
加载测试集并将序列分类到扬声器中。
[XTest,YTest] =日本evowelstestdata;
分类测试数据。指定用于训练的相同的小批大小。
YPred = category (net,XTest,“MiniBatchSize”, miniBatchSize);
计算预测的分类精度。
acc = sum(YPred == YTest)./ nummel (YTest)
Acc = 0.9486
具有数字特征的列车网络
如果你有一个数字特征的数据集(例如,一个没有空间或时间维度的数字数据集合),那么你可以使用特征输入层训练深度学习网络。
从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);
查看表的前几行。请注意,类别预测符已被分割为多个列,其中类别值作为变量名。
头(台)
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 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);
利用训练好的网络预测测试数据的标签,并计算准确率。准确率是指网络正确预测的标签的比例。
YPred =分类(net,tblTest,“MiniBatchSize”, miniBatchSize);YTest = tblTest{:,labelName};精度= sum(YPred == YTest)/numel(YTest)
准确度= 0.9688
输入参数
图片
- - - - - -图像数据
数据存储|数字数组|表格
图像数据,指定为下列之一:
数据类型 | 描述 | 示例使用 | |
---|---|---|---|
数据存储 | ImageDatastore |
保存在磁盘上的图像的数据存储。 | 用保存在磁盘上的图像训练图像分类神经网络,其中图像大小相同。 当图像大小不同时,请使用
|
AugmentedImageDatastore |
应用随机仿射几何变换的数据存储,包括调整大小、旋转、反射、剪切和平移。 |
|
|
TransformedDatastore |
使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。 |
|
|
CombinedDatastore |
从两个或多个底层数据存储中读取的数据存储。 |
|
|
PixelLabelImageDatastore (计算机视觉工具箱) |
对图像和相应像素标签应用相同仿射几何变换的数据存储。 | 训练神经网络进行语义分割。 | |
RandomPatchExtractionDatastore (图像处理工具箱) |
从图像或像素标签图像中提取随机补丁对并可选地对其应用相同的随机仿射几何变换的数据存储。 | 训练神经网络进行目标检测。 | |
DenoisingImageDatastore (图像处理工具箱) |
应用随机生成的高斯噪声的数据存储。 | 训练神经网络进行图像去噪。 | |
自定义小批量数据存储 | 返回小批量数据的自定义数据存储。 | 使用其他数据存储不支持的数据格式训练神经网络。 详细信息请参见开发自定义小批量数据存储. |
|
数字数组 | 指定为数值数组的图像。如果将图像指定为数字数组,则还必须指定反应 论点。 |
使用适合内存的数据训练神经网络,不需要额外的处理,如增强。 | |
表格 | 指定为表的映像。方法指定图像为表,则还可以指定包含响应的列反应 论点。 |
使用存储在表中的数据训练神经网络。 |
对于具有多个输入的神经网络,数据存储必须是aTransformedDatastore
或CombinedDatastore
对象。
提示
对于图像序列,例如视频数据,使用序列
输入参数。
数据存储
数据存储读取小批量的图像和响应。当您拥有不适合内存的数据时,或者当您希望对数据应用扩充或转换时,数据存储最适合。
下面的列表列出了与之直接兼容的数据存储trainNetwork
用于图像数据。
PixelLabelImageDatastore
(计算机视觉工具箱)RandomPatchExtractionDatastore
(图像处理工具箱)DenoisingImageDatastore
(图像处理工具箱)自定义小批量数据存储。详细信息请参见开发自定义小批量数据存储.
方法创建映像数据存储imageDatastore
函数,并使用包含图像的文件夹的名称作为标签“LabelSource”
选项“foldernames”
.方法手动指定标签标签
映像数据存储的属性。
请注意,ImageDatastore
对象允许使用预取批量读取JPG或PNG图像文件。如果使用自定义函数读取图像,则ImageDatastore
对象不预取。
提示
使用augmentedImageDatastore
用于深度学习图像的有效预处理,包括图像大小调整。
请勿使用readFcn
选项imageDatastore
函数用于预处理或调整大小,因为此选项通常显着较慢。
可以使用其他内置数据存储来训练深度学习神经网络变换
而且结合
功能。这些函数可以将从数据存储读取的数据转换为所需的格式trainNetwork
.
对于具有多个输入的神经网络,数据存储必须是aTransformedDatastore
或CombinedDatastore
对象。
所需的数据存储输出格式取决于神经网络架构。
神经网络架构 | 数据存储输出 | 示例输出 |
---|---|---|
单输入层 | 有两列的表或单元格数组。 第一列和第二列分别指定预测器和响应。 表元素必须是标量、行向量或包含数字数组的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]} |
||
多个输入层 | 单元格数组( 第一个 输入的顺序由 |
神经网络的单元阵列,具有两个输入和一个输出。 数据=读取(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数字数组,其中h,w,c分别为图像的高度、宽度和通道数。 |
三维图像 | h——- - - - - -w——- - - - - -d——- - - - - -c数字数组,其中h,w,d,c分别为图像的高度、宽度、深度和通道数。 |
对于表中返回的预测器,元素必须包含数值标量、数值行向量或包含数值数组的1乘1单元格数组。
响应的格式取决于任务的类型。
任务 | 响应格式 |
---|---|
图像分类 | 绝对标量 |
形象回归 |
|
对于表中返回的响应,元素必须是分类标量、数字标量、数字行向量或包含数字数组的1乘1单元格数组。
有关更多信息,请参见用于深度学习的数据存储.
数字数组
对于适合内存且不需要额外处理(如增强)的数据,可以将图像数据集指定为数值数组。如果将图像指定为数字数组,则还必须指定反应
论点。
数值数组的大小和形状取决于图像数据的类型。
数据 | 格式 |
---|---|
二维图像 | h——- - - - - -w——- - - - - -c——- - - - - -N数字数组,其中h,w,c图像的高度、宽度和通道数分别是和N是图像的数量。 |
三维图像 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N数字数组,其中h,w,d,c图像的高度、宽度、深度和通道数分别为和N是图像的数量。 |
表格
作为数据存储或数字数组的替代方法,还可以在表中指定映像和响应。方法指定图像为表,则还可以指定包含响应的列反应
论点。
在表中指定图像和响应时,表中的每一行都对应一个观察值。
对于图像输入,预测器必须在表的第一列中,指定为以下之一:
图像的绝对或相对文件路径,指定为字符向量
包含a的1乘1单元格数组h——- - - - - -w——- - - - - -c表示二维图像的数字数组,其中h,w,c分别对应于图像的高度、宽度和通道数。
响应的格式取决于任务的类型。
任务 | 响应格式 |
---|---|
图像分类 | 绝对标量 |
形象回归 |
|
对于有图像输入的神经网络,如果不指定反应
的第一列,则该函数默认使用资源描述
将预测器和后续列作为响应。
提示
如果预测因子或响应包含
南
S,然后在训练过程中通过神经网络进行传播。在这种情况下,训练通常不能收敛。对于回归任务,将响应归一化通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络回归.
将复值数据输入到神经网络中
SplitComplexInputs
输入层的选项必须为1
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|表格
复数支持:是的
序列
- - - - - -序列或时间序列数据
数据存储|数值数组的单元格数组|数字数组
序列或时间序列数据,指定为下列之一:
数据类型 | 描述 | 示例使用 | |
---|---|---|---|
数据存储 | TransformedDatastore |
使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。 |
|
CombinedDatastore |
从两个或多个底层数据存储中读取的数据存储。 | 结合来自不同数据源的预测器和响应。 |
|
自定义小批量数据存储 | 返回小批量数据的自定义数据存储。 | 使用其他数据存储不支持的数据格式训练神经网络。 详细信息请参见开发自定义小批量数据存储. |
|
数字或单元格数组 | 指定为数值数组的单个序列或指定为数值数组的单元格数组的序列数据集。如果将序列指定为数字或单元格数组,则还必须指定反应 论点。 |
使用适合内存的数据训练神经网络,不需要额外的处理,如自定义转换。 |
数据存储
数据存储读取小批量的序列和响应。当您拥有不适合内存的数据时,或者当您希望对数据应用转换时,数据存储最适合。
下面的列表列出了与之直接兼容的数据存储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——- - - - - -年代数组,h而且c分别对应于图像的高度和通道数,和年代是序列长度。 小批中的每个序列必须具有相同的序列长度。 |
二维图像序列 | h——- - - - - -w——- - - - - -c——- - - - - -年代数组,h,w,c分别对应图像的高度、宽度和通道数,和年代是序列长度。 小批中的每个序列必须具有相同的序列长度。 |
三维图像序列 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代数组,h,w,d,c分别对应图像的高度、宽度、深度和通道数,和年代是序列长度。 小批中的每个序列必须具有相同的序列长度。 |
对于表中返回的预测器,元素必须包含数字标量、数字行向量或包含数字数组的1乘1单元格数组。
响应的格式取决于任务的类型。
任务 | 回应格式 |
---|---|
Sequence-to-label分类 | 绝对标量 |
Sequence-to-one回归 | 标量 |
Sequence-to-vector回归 | 数字行向量 |
Sequence-to-sequence分类 |
小批中的每个序列必须具有相同的序列长度。 |
Sequence-to-sequence回归 |
小批中的每个序列必须具有相同的序列长度。 |
对于表中返回的响应,元素必须是分类标量、数字标量、数字行向量或包含数字数组的1乘1单元格数组。
有关更多信息,请参见用于深度学习的数据存储.
数字或单元格数组
对于适合内存且不需要自定义转换等额外处理的数据,可以将单个序列指定为数值数组,或将序列数据集指定为数值数组的单元格数组。如果将序列指定为单元格或数字数组,则还必须指定反应
论点。
对于单元格数组输入,单元格数组必须为N-by-1单元格数组的数值数组,其中N是观测的数量。表示序列的数值数组的大小和形状取决于序列数据的类型。
输入 | 描述 |
---|---|
向量序列 | c——- - - - - -年代矩阵,c序列特征的数量和年代是序列长度。 |
一维图像序列 | h——- - - - - -c——- - - - - -年代数组,h而且c分别对应图像的高度和通道数,和年代是序列长度。 |
二维图像序列 | h——- - - - - -w——- - - - - -c——- - - - - -年代数组,h,w,c分别对应图像的高度、宽度和通道数,和年代是序列长度。 |
三维图像序列 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代,在那里h,w,d,c分别对应三维图像的高度、宽度、深度和通道数,和年代是序列长度。 |
的trainNetwork
函数支持最多一个序列输入层的神经网络。
提示
如果预测因子或响应包含
南
S,然后在训练过程中通过神经网络进行传播。在这种情况下,训练通常不能收敛。对于回归任务,标准化的反应通常有助于稳定和加速训练。有关更多信息,请参见训练卷积神经网络回归.
将复值数据输入到神经网络中
SplitComplexInputs
输入层的选项必须为1
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|细胞
复数支持:是的
特性
- - - - - -特性数据
数据存储|数字数组|表格
特征数据,指定为以下之一:
数据类型 | 描述 | 示例使用 | |
---|---|---|---|
数据存储 | TransformedDatastore |
使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。 |
|
CombinedDatastore |
从两个或多个底层数据存储中读取的数据存储。 |
|
|
自定义小批量数据存储 | 返回小批量数据的自定义数据存储。 | 使用其他数据存储不支持的数据格式训练神经网络。 详细信息请参见开发自定义小批量数据存储. |
|
表格 | 作为表指定的特性数据。方法将特性指定为表,则还可以指定包含响应的列反应 论点。 |
使用存储在表中的数据训练神经网络。 | |
数字数组 | 指定为数值数组的特征数据。如果将特性指定为数字数组,则还必须指定反应 论点。 |
使用适合内存的数据训练神经网络,不需要额外的处理,如自定义转换。 |
数据存储
数据存储读取小批量的特征数据和响应。当您拥有不适合内存的数据时,或者当您希望对数据应用转换时,数据存储最适合。
下面的列表列出了与之直接兼容的数据存储trainNetwork
对于特征数据。
自定义小批量数据存储。详细信息请参见开发自定义小批量数据存储.
可以使用其他内置数据存储来训练深度学习神经网络变换
而且结合
功能。这些函数可以将从数据存储读取的数据转换为所需的表或单元格数组格式trainNetwork
.有关更多信息,请参见用于深度学习的数据存储.
对于具有多个输入的神经网络,数据存储必须是aTransformedDatastore
或CombinedDatastore
对象。
数据存储必须返回表或单元格数组中的数据。自定义小批量数据存储必须输出表。数据存储输出的格式取决于神经网络架构。
神经网络架构 | 数据存储输出 | 示例输出 |
---|---|---|
单输入层 | 有两列的表或单元格数组。 第一列和第二列分别指定预测器和响应。 表元素必须是标量、行向量或包含数字数组的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]} |
||
多个输入层 | 单元格数组( 第一个 输入的顺序由 |
双输入一输出神经网络单元阵列: 数据=读取(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是特征的数量。
响应的格式取决于任务的类型。
任务 | 回应格式 |
---|---|
分类 | 绝对标量 |
回归 |
|
有关更多信息,请参见用于深度学习的数据存储.
表格
对于适合内存且不需要额外处理(如自定义转换)的特性数据,可以将特性数据和响应指定为表。
表中的每一行都对应一个观察值。表列中预测器和响应的排列取决于任务的类型。
任务 | 预测 | 反应 |
---|---|---|
功能分类 | 在一个或多个列中作为标量指定的特性。 如果没有指定 |
分类标签 |
功能回归 | 一列或多列标量值 |
对于带有特征输入的分类神经网络,如果不指定反应
参数,则该函数默认使用第一个(numColumns - 1
)列资源描述
对于预测器和标签的最后一列,其中numFeatures
输入数据中特征的数量。
对于带特征输入的回归神经网络,如果不指定responseNames
参数,则函数默认使用第一个numFeatures
预测器的列和响应的后续列,其中numFeatures
输入数据中特征的数量。
数字数组
对于适合内存且不需要自定义转换等额外处理的特征数据,可以将特征数据指定为数值数组。如果将特性数据指定为数值数组,则还必须指定反应
论点。
数值数组必须为N——- - - - - -numFeatures
数字数组,其中N观察的次数和numFeatures
输入数据的特征数。
提示
常态化响应通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络回归.
响应不能包含
南
s.如果预测器数据包含南
S,然后通过训练进行传播。然而,在大多数情况下,训练不能收敛。将复值数据输入到神经网络中
SplitComplexInputs
输入层的选项必须为1
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|表格
复数支持:是的
混合
- - - - - -混合数据
数据存储
混合数据和响应,指定为以下之一:
数据类型 | 描述 | 示例使用 |
---|---|---|
TransformedDatastore |
使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。 |
|
CombinedDatastore |
从两个或多个底层数据存储中读取的数据存储。 |
|
自定义小批量数据存储 | 返回小批量数据的自定义数据存储。 | 使用其他数据存储不支持的数据格式训练神经网络。 详细信息请参见开发自定义小批量数据存储. |
可以使用其他内置数据存储来训练深度学习神经网络变换
而且结合
功能。这些函数可以将从数据存储读取的数据转换为所需的表或单元格数组格式trainNetwork
.有关更多信息,请参见用于深度学习的数据存储.
数据存储必须返回表或单元格数组中的数据。自定义小批量数据存储必须输出表。数据存储输出的格式取决于神经网络架构。
数据存储输出 | 示例输出 |
---|---|
单元格数组( 第一个 输入的顺序由 |
数据=读取(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是响应的数量。 |
|
Sequence-to-one回归 | N——- - - - - -R矩阵,N序列数是和吗R是响应的数量。 | |
Sequence-to-sequence回归 | N-by-1单元数组的数值序列,其中N是序列的数量,由下列之一给出的序列:
对于只有一次观测的序列到序列的回归任务, |
提示
常态化响应通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络回归.
提示
响应不能包含南
s.如果预测器数据包含南
S,然后通过训练进行传播。然而,在大多数情况下,训练不能收敛。
层
- - - - - -神经网络层
层
数组|LayerGraph
对象
神经网络层,指定为a层
数组或LayerGraph
对象。
要创建一个所有层按顺序连接的神经网络,您可以使用层
数组作为输入参数。在这种情况下,返回的神经网络是aSeriesNetwork
对象。
有向无环图(DAG)神经网络具有复杂的结构,其中各层可以有多个输入和输出。要创建DAG神经网络,请将神经网络架构指定为LayerGraph
对象,然后使用该层图作为输入参数trainNetwork
.
的trainNetwork
函数支持最多一个序列输入层的神经网络。
有关内置层的列表,请参见深度学习层列表.
选项
- - - - - -培训方案
TrainingOptionsSGDM
|TrainingOptionsRMSProp
|TrainingOptionsADAM
培训选项,指定为TrainingOptionsSGDM
,TrainingOptionsRMSProp
,或TrainingOptionsADAM
对象返回的trainingOptions
函数。
输出参数
网
-训练过的神经网络
SeriesNetwork
对象|DAGNetwork
对象
训练过的神经网络,返回为SeriesNetwork
对象或DAGNetwork
对象。
如果你训练神经网络使用层
数组,然后网
是一个SeriesNetwork
对象。如果你训练神经网络使用LayerGraph
对象,然后网
是一个DAGNetwork
对象。
信息
-培训信息
结构
训练信息,作为结构返回,其中每个字段是一个标量或一个数字向量,每次训练迭代有一个元素。
对于分类任务,信息
包含以下字段:
TrainingLoss
-损失函数值TrainingAccuracy
-培训准确性ValidationLoss
-损失函数值ValidationAccuracy
-验证精度BaseLearnRate
-学习率FinalValidationLoss
-返回神经网络的验证损失FinalValidationAccuracy
-返回神经网络的验证精度OutputNetworkIteration
-返回神经网络的迭代次数
对于回归任务,信息
包含以下字段:
TrainingLoss
-损失函数值TrainingRMSE
-培训RMSE值ValidationLoss
-损失函数值ValidationRMSE
-验证RMSE值BaseLearnRate
-学习率FinalValidationLoss
-返回神经网络的验证损失FinalValidationRMSE
-返回神经网络的RMSE验证OutputNetworkIteration
-返回神经网络的迭代次数
该结构只包含字段ValidationLoss
,ValidationAccuracy
,ValidationRMSE
,FinalValidationLoss
,FinalValidationAccuracy
,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训练神经网络时,该软件使用单精度算法。
再现性
为了提供最佳的性能,深度学习使用了MATLAB中的GPU®不能保证是确定的。根据您的网络架构,在某些情况下,当使用GPU训练两个相同的网络或使用相同的网络和数据进行两次预测时,您可能会得到不同的结果。
参考文献
[1]工藤,M.,富山,M. Shimbo。“使用穿过区域的多维曲线分类”模式识别信.第20卷,第11-13号,第1103-1111页。
[2]工藤,M.,富山,M. Shimbo。日语元音数据集.https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
扩展功能
自动平行支撑
通过使用并行计算工具箱™自动并行运行计算来加速代码。
要并行运行计算,请设置“ExecutionEnvironment”
选项“multi-gpu”
或“平行”
.
使用trainingOptions
设置“ExecutionEnvironment”
并提供选项
来trainNetwork
.如果不设置“ExecutionEnvironment”
,然后trainNetwork
运行在GPU上(如果可用的话)。
详细信息请参见并行、gpu和云中扩展深度学习.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
为了防止内存不足的错误,建议不要将大量的训练数据转移到GPU上。相反,在GPU上训练你的神经网络
trainingOptions
设置“ExecutionEnvironment”
来“汽车”
或“图形”
并提供选项
来trainNetwork
.的
ExecutionEnvironment
选项必须是“汽车”
或“图形”
当输入数据为:一个
gpuArray
单元格数组,包含
gpuArray
对象包含以下内容的表
gpuArray
对象一个数据存储,它输出包含
gpuArray
对象一个数据存储,它输出包含
gpuArray
对象
有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
在R2016a中引入R2022b:trainNetwork
在指定拆分之前,将小批填充到最长序列的长度SequenceLength
训练选项为整数
从R2022b开始,当您使用序列数据训练神经网络时trainNetwork
功能和SequenceLength
选项为整数,软件将序列填充为每个mini-batch中最长序列的长度,然后按照指定的序列长度将序列分割为mini-batch。如果SequenceLength
没有均匀划分小批的序列长度,那么最后一个分割小批的长度小于SequenceLength
.这种行为可以防止神经网络在只包含填充值的时间步长上进行训练。
在以前的版本中,软件填充小批量的序列,使其长度匹配最接近的倍数SequenceLength
它大于或等于迷你批处理长度,然后分割数据。若要重现此行为,请在预处理小批数据时使用自定义训练循环并实现此行为。
R2021b:trainNetwork
当损失时自动停止训练南
当你训练神经网络时使用trainNetwork
功能,训练在损失时自动停止南
.通常,一个损失值为南
介绍了南
值到神经网络的可学习参数,这反过来会导致神经网络无法训练或做出有效的预测。这一变化有助于在训练完成之前识别神经网络的问题。
在以前的版本中,当损失发生时,神经网络继续训练南
.
R2021a:对指定MAT文件路径表的支持将被移除
类型的序列数据时trainNetwork
函数中,指定MAT文件路径表的支持将在未来的版本中被移除。
要用不适合内存的序列训练神经网络,请使用数据存储。可以使用任何数据存储来读取数据,然后使用变换
函数将数据存储输出转换为trainNetwork
功能要求。例如,可以使用FileDatastore
或TabularTextDatastore
对象,然后使用变换
函数。
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。