导入数据到深度网络设计器
您可以导入和可视化训练和验证数据深度网络设计器.使用此应用程序,您可以:
有关可用于开始深度学习的数据集的更多信息,请参见深度学习的数据集.有关为深度学习应用程序构造和使用数据存储对象的详细信息,请参见深度学习的数据存储.
导入数据
在深度网络设计器中,您可以从图像数据存储或包含每个类的图像子文件夹的文件夹中导入图像分类数据。类中使用的任何数据存储对象也可以导入和训练trainNetwork
函数。根据所使用的数据存储类型选择导入方法。
进口ImageDatastore 对象 |
导入任何其他数据存储对象(不推荐)ImageDatastore ) |
---|---|
选择导入数据>导入图像分类数据. |
选择导入数据>导入自定义数据. |
导入后,深度网络设计器提供了导入数据的预览,以便您可以在训练之前检查数据是否符合预期。对于图像分类数据,深度网络设计器还显示类标签的直方图和从导入数据中随机选择的图像。您还可以选择查看属于特定类的随机图像。
按任务导入数据
任务 | 数据类型 | 数据导入方法 | 可视化例子 |
---|---|---|---|
图像分类 | 文件夹,其中的子文件夹包含每个类的图像。类标签来自子文件夹名称。 使用示例请参见迁移学习与深度网络设计. |
选择导入数据>导入图像分类数据. 您可以选择增强选项,并使用“导入图像数据”对话框指定验证数据。 导入后,深度网络设计器显示类标签的直方图。您还可以看到来自每个类的随机观察结果。 |
|
例如,创建一个包含数字数据的图像数据存储。 dataFolder = fullfile(toolboxdir()“nnet”),“nndemos”,…“nndatasets”,“DigitDataset”);imds = imageDatastore(数据文件夹,…“IncludeSubfolders”,真的,…“LabelSource”,“foldernames”); |
|||
例如,创建一个包含数字数据的增强图像数据存储。 dataFolder = fullfile(toolboxdir()“nnet”),“nndemos”,…“nndatasets”,“DigitDataset”);imds = imageDatastore(数据文件夹,…“IncludeSubfolders”,真的,…“LabelSource”,“foldernames”);imageAugmenter = imageDataAugmenter(…“RandRotation”[1,2]);augimds = augmentedImageDatastore([28 - 28],imds,…“DataAugmentation”, imageAugmenter);Augimds = shuffle(Augimds); |
选择导入数据>导入自定义数据. 您可以在“导入数据存储”对话框中指定验证数据。 导入后,深度网络设计器显示数据存储中前五个观察结果的预览。 |
|
|
语义分割 | 例如,组合an dataFolder = fullfile(toolboxdir()“愿景”),…“visiondata”,“triangleImages”);imageDir = fullfile(数据文件夹,“trainingImages”);labelDir = fullfile(数据文件夹,“trainingLabels”);imds = imageDatastore(imagedr);classNames = [“三角形”,“背景”];labelIDs = [255 0];pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);CDS = combine(imds,pxds); 也可以将an pxds = pixelLabelImageDatastore(imds,pxds); |
选择导入数据>导入自定义数据. 您可以在“导入数据存储”对话框中指定验证数据。 导入后,深度网络设计器显示数据存储中前五个观察结果的预览。 |
|
Image-to-image回归 | 例如,结合噪声输入图像和原始输出图像来创建适合图像到图像回归的数据。 dataFolder = fullfile(toolboxdir()“nnet”),“nndemos”,…“nndatasets”,“DigitDataset”);imds = imageDatastore(数据文件夹,…“IncludeSubfolders”,真的,….“LabelSource”,“foldernames”);Imds = transform(Imds,@(x) rescale(x));imdsNoise = transform(imds,@(x)) {imnoise(x,“高斯”, 0.2)});cd = combine(imdsNoise,imds);cd =洗牌(cd); |
选择导入数据>导入自定义数据. 您可以在“导入数据存储”对话框中指定验证数据。 导入后,深度网络设计器显示数据存储中前五个观察结果的预览。 |
|
回归 | 通过组合数组数据存储对象,创建适合训练回归网络的数据。 [XTrain,~,YTrain] = digitTrain4DArrayData;ads = arrayDatastore(XTrain)“IterationDimension”4…“OutputType”,“细胞”);adsAngles = arrayDatastore(YTrain)“OutputType”,“细胞”);cds = combine(ads,adsAngles); 有关训练回归网络的更多信息,请参见训练卷积神经网络用于回归. |
选择导入数据>导入自定义数据. 您可以在“导入数据存储”对话框中指定验证数据。 导入后,深度网络设计器显示数据存储中前五个观察结果的预览。 |
|
序列和时间序列 | 为了将序列数据从预测器的数据存储中输入到深度学习网络中,序列的小批量必须具有相同的长度。你可以使用 例如,将所有序列填充为与最长序列相同的长度。 [XTrain,YTrain] = japevowelstraindata;XTrain = padsequences(XTrain,2);adsXTrain = arrayDatastore(XTrain)“IterationDimension”3);adsYTrain = arrayDatastore(YTrain);cdsTrain = combine(adsXTrain,adsYTrain);
为了减少填充量,可以使用转换数据存储和helper函数。例如,填充序列,使mini-batch中的所有序列具有与mini-batch中最长序列相同的长度。您还必须在训练选项中使用相同的小批量大小。 [XTrain,TTrain] = japevowelstraindata;miniBatchSize = 27;adsXTrain = arrayDatastore(XTrain)“OutputType”,“相同”,“ReadSize”, miniBatchSize);adsTTrain = arrayDatastore(TTrain)“ReadSize”, miniBatchSize);tdsXTrain = transform(adsXTrain,@ padtolonest);cdsTrain = combine(tdsXTrain,adsTTrain); 函数data = padtolest (data) sequence = padsequences(data,2,Direction= .“左”);为N = 1:numel(data) data{N} = sequence(:,:, N);结束结束 您还可以通过将数据从最短到最长排序来减少填充量,并通过指定填充方向来减少填充的影响。有关填充序列数据的详细信息,请参见序列填充、截断和分割. 有关在时间序列数据上训练网络的信息,请参见基于深度网络设计器的时间序列预测训练网络. 还可以使用自定义数据存储对象导入序列数据。有关显示如何创建自定义序列数据存储的示例,请参见使用自定义小批量数据存储序列数据的训练网络. |
选择导入数据>导入自定义数据. 您可以在“导入数据存储”对话框中指定验证数据。 导入后,深度网络设计器显示数据存储中前五个观察结果的预览。 |
|
其他扩展工作流(例如数字特性输入、内存不足数据、图像处理以及音频和语音处理) | 数据存储 对于其他扩展工作流,请使用合适的数据存储对象。例如,自定义数据存储, 例如,创建一个 dataFolder = fullfile(toolboxdir()“图片”),“imdata”);imds = imageDatastore(数据文件夹,“FileExtensions”, {“jpg”});dnds = denoisingImageDatastore(imds,…“PatchesPerImage”, 512,…“PatchSize”, 50岁,…“GaussianNoiseLevel”[0.01 - 0.1]); 有关如何在音频数据上训练深度学习网络的示例,请参见深度网络设计器中预训练音频网络的迁移学习. 对于表数组数据,必须将数据转换为合适的数据存储,以便使用深度网络设计器进行训练。例如,首先将表转换为包含预测器和响应的数组。然后,将数组转换为 |
选择导入数据>导入自定义数据. 您可以在“导入数据存储”对话框中指定验证数据。 导入后,深度网络设计器显示数据存储中前五个观察结果的预览。 |
|
图像增强
对于图像分类问题,Deep Network Designer提供了简单的增强选项来应用于训练数据。选择打开“导入图像分类数据”对话框导入数据>导入图像分类数据.您可以选择将反射、旋转、重新缩放和平移操作的随机组合应用于训练数据的选项。
您可以通过对数据应用随机增强来有效地增加训练数据的数量。增强还使您能够训练网络对图像数据中的畸变保持不变。例如,您可以向输入图像添加随机旋转,以便网络对输入图像中的旋转保持不变。数据增强还可以帮助防止网络过度拟合和记忆训练图像的确切细节。当您使用数据增强时,在训练的每个epoch期间使用每个图像的随机增强版本,其中一个epoch是训练算法在整个训练数据集上的完整通过。因此,每个epoch使用的数据集略有不同,但每个epoch的实际训练图像数量不会改变。有关更多信息,请参见创建和探索图像分类数据存储.
要执行比深度网络设计器提供的更一般和更复杂的图像预处理操作,请使用TransformedDatastore
和CombinedDatastore
对象。进口CombinedDatastore
和TransformedDatastore
对象,选择导入数据>导入自定义数据.
有关图像增强的详细信息,请参见深度学习的图像预处理.
验证数据
在深度网络设计器中,您可以导入验证数据以在训练期间使用。验证数据是网络在训练期间不用于更新权重和偏差的数据。由于网络不直接使用这些数据,因此在训练期间评估网络的真实准确性非常有用。您可以监视验证度量,例如损失和准确性,以评估网络是过拟合还是欠拟合,并根据需要调整训练选项。例如,如果验证损失远远高于训练损失,那么网络可能是过拟合的。
有关提高深度学习网络准确性的更多信息,请参见深度学习技巧和技巧.
在深度网络设计器中,您可以导入验证数据:
从工作区中的数据存储中获取。
从包含每个类的图像子文件夹的文件夹(仅限图像分类数据)。
通过分割一部分训练数据用作验证数据(仅限图像分类数据)。在训练之前,数据被分成验证集和训练集一次。此方法称为保留验证。
从训练数据中分离验证数据
当从训练数据中分离出滞留验证数据时,深度网络设计器从每个类中分离出一定百分比的训练数据。例如,假设您有一个包含两个类(猫和狗)的数据集,并选择使用30%的训练数据进行验证。深度网络设计器使用标签为“猫”的最后30%的图像和标签为“狗”的最后30%的图像作为验证集。
而不是使用最后30%的训练数据作为验证数据,您可以选择随机地将观察值分配到训练集和验证集随机化在“导入镜像数据”对话框中选择。随机化图像可以提高以非随机顺序存储的数据训练的网络的准确性。例如,数字数据集由10,000个手写数字的合成灰度图像组成。这个数据集有一个基本的顺序,在这个顺序中,具有相同笔迹样式的图像在每个类中相邻出现。下面是显示的示例。
随机化可确保在分割数据时,对图像进行洗牌,以便训练集和验证集包含来自每个类的随机图像。使用由相似的图像分布组成的训练和验证数据可以帮助防止过拟合。不随机化数据可以确保训练和验证数据每次都是相同的,并且可以帮助提高结果的可重复性。有关更多信息,请参见splitEachLabel
.
另请参阅
深度网络设计器|TransformedDatastore
|CombinedDatastore
|imageDatastore
|augmentedImageDatastore
|splitEachLabel