trainNetwork
训练深度学习神经网络
语法
描述
对于分类和回归任务,可以使用类训练各种类型的神经网络trainNetwork
函数。
例如,你可以训练:
用于图像数据的卷积神经网络(ConvNet, CNN)
一种循环神经网络(RNN),如长短时记忆(LSTM)或用于序列和时间序列数据的门控循环单元(GRU)网络
数字特征数据的多层感知器(MLP)网络
你可以在CPU或GPU上进行训练。对于图像分类和图像回归,您可以使用多个gpu或本地或远程并行池并行训练单个网络。GPU或并行训练需要并行计算工具箱™。要使用GPU进行深度学习,还必须有支持的GPU设备。有关支持的设备的信息,请参见GPU计算的需求(并行计算工具箱).要指定培训选项,包括用于执行环境的选项,请使用trainingOptions
函数。
在训练神经网络时,可以将预测器和响应指定为单个输入或两个单独的输入。
例子
图像分类训练网络
将数据加载为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;结束
划分数据存储,使训练集中的每个类别都有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;结束
指定卷积神经网络结构。对于回归问题,在网络的末端包含一个回归层。
层= [...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”)
定义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 |
应用随机仿射几何变换的数据存储,包括调整大小、旋转、反射、剪切和平移。 |
|
|
TransformedDatastore |
使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。 |
|
|
CombinedDatastore |
从两个或多个基础数据存储读取数据的数据存储。 |
|
|
PixelLabelImageDatastore (计算机视觉工具箱) |
对图像和相应的像素标签应用相同的仿射几何变换的数据存储。 | 训练神经网络进行语义分割。 | |
RandomPatchExtractionDatastore (图像处理工具箱) |
从图像或像素标签图像中提取成对随机补丁的数据存储,并可选地对这些对应用相同的随机仿射几何变换。 | 训练神经网络进行目标检测。 | |
DenoisingImageDatastore (图像处理工具箱) |
应用随机生成的高斯噪声的数据存储。 | 训练神经网络进行图像去噪。 | |
自定义mini-batch数据存储 | 返回小批量数据的自定义数据存储。 | 使用其他数据存储不支持的格式的数据训练神经网络。 有关详细信息,请参见开发自定义小批量数据存储. |
|
数字数组 | 指定为数值数组的图像。如果将图像指定为数字数组,则还必须指定反应 论点。 |
训练神经网络使用适合内存的数据,不需要额外的处理,如扩充。 | |
表格 | 指定为表的图像。控件将图像指定为一个表,那么还可以指定哪些列包含响应反应 论点。 |
使用存储在表中的数据训练神经网络。 |
对于有多个输入的网络,数据存储必须是TransformedDatastore
或CombinedDatastore
对象。
提示
对于图像序列,例如视频数据,使用序列
输入参数。
数据存储
数据存储读取小批的图像和响应。当您的数据不适合存储在内存中,或者您希望对数据应用扩充或转换时,数据存储是最适合的。
下面的列表列出了直接兼容的数据存储trainNetwork
图像数据。
PixelLabelImageDatastore
(计算机视觉工具箱)RandomPatchExtractionDatastore
(图像处理工具箱)DenoisingImageDatastore
(图像处理工具箱)自定义mini-batch数据存储。有关详细信息,请参见开发自定义小批量数据存储.
方法可以创建映像数据存储imageDatastore
函数,并使用包含图像的文件夹的名称作为标签“LabelSource”
选项“foldernames”
.方法手动指定标签标签
图像数据存储的属性。
请注意,ImageDatastore
对象允许使用预取批量读取JPG或PNG图像文件。如果使用自定义函数读取图像,则ImageDatastore
对象不预取。
提示
使用augmentedImageDatastore
用于深度学习的图像高效预处理,包括图像调整。
请勿使用readFcn
选择的imageDatastore
函数用于预处理或调整大小,因为此选项通常非常慢。
方法可以使用其他内置数据存储来训练深度学习网络变换
而且结合
功能。这些函数可以将从数据存储中读取的数据转换为所需的格式trainNetwork
.
对于有多个输入的网络,数据存储必须是TransformedDatastore
或CombinedDatastore
对象。
所需的数据存储输出格式取决于网络架构。
网络体系结构 | 数据存储输出 | 示例输出 |
---|---|---|
单个输入层 | 有两列的表格或单元格数组。 第一列和第二列分别指定预测器和响应。 表元素必须是标量、行向量或包含数字数组的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]} |
||
多个输入层 | 带有(的单元格数组 第一个 输入的顺序由 |
用于两个输入和一个输出的网络的单元阵列。 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数字数组,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是图像的数量。 |
表格
作为数据存储或数字数组的替代方案,您还可以在表中指定图像和响应。控件将图像指定为一个表,那么还可以指定哪些列包含响应反应
论点。
在表中指定图像和响应时,表中的每一行都对应一个观察结果。
对于图像输入,预测器必须在表的第一列中,指定为以下之一:
图像的绝对或相对文件路径,指定为字符向量
1 × 1单元格数组包含h——- - - - - -w——- - - - - -c表示二维图像的数值数组,其中h,w,c分别对应于图像的高度、宽度和通道数。
响应的格式取决于任务的类型。
任务 | 响应格式 |
---|---|
图像分类 | 绝对标量 |
形象回归 |
|
对于带有图像输入的神经网络,如果不指定反应
,则该函数默认使用的第一列资源描述
用于预测器和后续列作为响应。
提示
如果预测器或响应包含
南
S,然后它们在训练过程中通过网络传播。在这些情况下,训练通常无法收敛。对于回归任务,将响应归一化通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络用于回归.
将复值数据输入到网络中
SplitComplexInputs
输入层的选项必须为1
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|表格
复数的支持:是的
序列
- - - - - -序列或时间序列数据
数据存储|数值数组的单元格数组|数字数组
序列或时间序列数据,指定为下列之一:
数据类型 | 描述 | 示例使用 | |
---|---|---|---|
数据存储 | TransformedDatastore |
使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。 |
|
CombinedDatastore |
从两个或多个基础数据存储读取数据的数据存储。 | 结合来自不同数据源的预测器和响应。 |
|
自定义mini-batch数据存储 | 返回小批量数据的自定义数据存储。 | 使用其他数据存储不支持的格式的数据训练神经网络。 有关详细信息,请参见开发自定义小批量数据存储. |
|
数字或单元格数组 | 指定为数值数组的单个序列或指定为数值数组的单元数组的序列数据集。如果将序列指定为数值或单元格数组,则还必须指定反应 论点。 |
使用适合内存的数据训练神经网络,不需要额外的处理,如自定义转换。 |
数据存储
数据存储读取小批序列和响应。当您的数据不适合存储在内存中,或者您希望对数据应用转换时,数据存储是最适合的。
下面的列表列出了直接兼容的数据存储trainNetwork
序列数据。
自定义mini-batch数据存储。有关详细信息,请参见开发自定义小批量数据存储.
方法可以使用其他内置数据存储来训练深度学习网络变换
而且结合
功能。这些函数可以将从数据存储读取的数据转换为所需的表或单元格数组格式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——- - - - - -年代数组,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 |
从两个或多个基础数据存储读取数据的数据存储。 |
|
|
自定义mini-batch数据存储 | 返回小批量数据的自定义数据存储。 | 使用其他数据存储不支持的格式的数据训练神经网络。 有关详细信息,请参见开发自定义小批量数据存储. |
|
表格 | 作为表指定的特性数据。控件将功能部件指定为表,那么还可以指定哪些列包含响应反应 论点。 |
使用存储在表中的数据训练神经网络。 | |
数字数组 | 指定为数值数组的特征数据。如果将特性指定为数字数组,则还必须指定反应 论点。 |
使用适合内存的数据训练神经网络,不需要额外的处理,如自定义转换。 |
数据存储
数据存储读取特性数据和响应的小批。当您的数据不适合存储在内存中,或者您希望对数据应用转换时,数据存储是最适合的。
下面的列表列出了直接兼容的数据存储trainNetwork
特性数据。
自定义mini-batch数据存储。有关详细信息,请参见开发自定义小批量数据存储.
方法可以使用其他内置数据存储来训练深度学习网络变换
而且结合
功能。这些函数可以将从数据存储读取的数据转换为所需的表或单元格数组格式trainNetwork
.有关更多信息,请参见用于深度学习的数据存储.
对于有多个输入的网络,数据存储必须是TransformedDatastore
或CombinedDatastore
对象。
数据存储必须返回表或单元格数组中的数据。自定义小批处理数据存储必须输出表。数据存储输出的格式取决于网络架构。
网络体系结构 | 数据存储输出 | 示例输出 |
---|---|---|
单个输入层 | 有两列的表格或单元格数组。 第一列和第二列分别指定预测器和响应。 表元素必须是标量、行向量或包含数字数组的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]} |
||
多个输入层 | 带有(的单元格数组 第一个 输入的顺序由 |
两个输入和一个输出的网络单元阵列: 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就是特征的数量。
响应的格式取决于任务的类型。
任务 | 格式的响应 |
---|---|
分类 | 绝对标量 |
回归 |
|
有关更多信息,请参见用于深度学习的数据存储.
表格
对于适合内存且不需要额外处理(如自定义转换)的特征数据,可以将特征数据和响应指定为表。
表中的每一行都对应一个观察结果。预测器和响应在表列中的排列取决于任务的类型。
任务 | 预测 | 反应 |
---|---|---|
功能分类 | 在一个或多个列中指定为标量的特性。 如果不指定 |
分类标签 |
功能回归 | 标量值的一个或多个列 |
对于带有特征输入的分类网络,如果不指定反应
参数,则该函数默认使用第一个(numColumns - 1
)的列资源描述
对于预测器和标签的最后一列,其中numFeatures
是输入数据中特征的数量。
对于带有特征输入的回归网络,如果不指定responseNames
参数,则该函数在默认情况下使用第一个numFeatures
预测器的列和响应的后续列,其中numFeatures
是输入数据中特征的数量。
数字数组
对于适合内存且不需要其他处理(如自定义转换)的特征数据,可以将特征数据指定为数值数组。如果将特征数据指定为数字数组,则还必须指定反应
论点。
数值数组必须是N——- - - - - -numFeatures
数字数组,N观察的次数和numFeatures
是输入数据的特征数。
提示
将反应归一化通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络用于回归.
回复中不能包含
南
s.如果预测数据包含南
S,然后它们通过训练进行传播。然而,在大多数情况下,训练不能收敛。将复值数据输入到网络中
SplitComplexInputs
输入层的选项必须为1
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|表格
复数的支持:是的
混合
- - - - - -混合数据
数据存储
混合数据和答复,指定为以下之一:
数据类型 | 描述 | 示例使用 |
---|---|---|
TransformedDatastore |
使用自定义转换函数转换从底层数据存储读取的批量数据的数据存储。 |
|
CombinedDatastore |
从两个或多个基础数据存储读取数据的数据存储。 |
|
自定义mini-batch数据存储 | 返回小批量数据的自定义数据存储。 | 使用其他数据存储不支持的格式的数据训练神经网络。 有关详细信息,请参见开发自定义小批量数据存储. |
方法可以使用其他内置数据存储来训练深度学习网络变换
而且结合
功能。这些函数可以将从数据存储读取的数据转换为所需的表或单元格数组格式trainNetwork
.有关更多信息,请参见用于深度学习的数据存储.
数据存储必须返回表或单元格数组中的数据。自定义小批处理数据存储必须输出表。数据存储输出的格式取决于网络架构。
数据存储输出 | 示例输出 |
---|---|
带有(的单元格数组 第一个 输入的顺序由 |
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是回应的数量。 |
|
Sequence-to-one回归 | N——- - - - - -R矩阵,N序列的个数和R是回应的数量。 | |
Sequence-to-sequence回归 | N-by-1单元格数组的数字序列,其中N是数列数,数列由下列之一给出:
对于单次观测的序列对序列回归任务, |
提示
将反应归一化通常有助于稳定和加速神经网络的回归训练。有关更多信息,请参见训练卷积神经网络用于回归.
提示
回复中不能包含南
s.如果预测数据包含南
S,然后它们通过训练进行传播。然而,在大多数情况下,训练不能收敛。
层
- - - - - -网络层
层
数组|LayerGraph
对象
网络层,指定为层
数组或一个LayerGraph
对象。
要创建所有层按顺序连接的网络,可以使用层
数组作为输入参数。在本例中,返回的网络是SeriesNetwork
对象。
有向无环图(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训练网络时,该软件使用单精度算法。
参考文献
[1]工藤、富山、Shimbo。“利用穿过区域的多维曲线分类”。模式识别的字母.第20卷第11-13期,第1103-1111页。
[2]工藤、富山、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函数(并行计算工具箱).
版本历史
介绍了R2016aR2022b:trainNetwork
当指定时,将小批填充到分裂前的最长序列长度SequenceLength
训练选项为整数
从R2022b开始,当使用序列数据训练网络时trainNetwork
函数和SequenceLength
选项为整数时,软件将每个小批中的序列填充为最长序列的长度,然后按照指定的序列长度将序列拆分为小批。如果SequenceLength
没有均匀划分小批量的序列长度,那么最后划分的小批量的长度小于SequenceLength
.此行为防止在只包含填充值的时间步上进行网络训练。
在以前的版本中,软件填充小批量的序列,使其长度与最接近的倍数匹配SequenceLength
它大于或等于小批处理长度,然后拆分数据。若要再现此行为,请在预处理小批量数据时使用自定义训练循环并实现此行为。
R2021b:trainNetwork
当损失时自动停止训练南
训练网络时使用trainNetwork
功能,当损失为时,训练自动停止南
.通常,损失值为南
介绍了南
网络可学习参数的值,这反过来会导致网络无法训练或做出有效的预测。此更改有助于在培训完成之前识别网络中的问题。
在以前的版本中,当损失为时,网络会继续训练南
.
R2021a:对指定MAT文件路径表的支持将被删除
对象的序列数据时trainNetwork
函数,对指定MAT文件路径表的支持将在未来的版本中被删除。
要用不适合内存的序列训练网络,请使用数据存储。可以使用任何数据存储来读取数据,然后使用变换
函数将数据存储输出转换为trainNetwork
功能要求。例如,您可以使用FileDatastore
或TabularTextDatastore
对象转换输出变换
函数。
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。