Main Content

将数据导入深度网络设计器中

注意

不推荐使用深度网络设计器来导入数据和训练网络。

要在深度网络设计器中导入和可视化训练数据和验证数据,请使用传统语法 deepNetworkDesigner("-v1")

导入数据

在深度网络设计器中,您可以从图像数据存储或从包含每个类的图像子文件夹的文件夹中导入图像分类数据。根据您使用的数据存储的类型选择一种导入方法。

导入 ImageDatastore 对象导入任何其他数据存储对象(不推荐用于 ImageDatastore

选择导入数据 > 导入图像分类数据

Import Image Classification Data dialog. Using this dialog, you can select the source of image classification data, specify augmentation options, and split validation data.

选择导入数据 > 导入自定义数据

Import Custom Data dialog. Using this dialog, you can import training and validation data sets.

按任务导入数据

任务数据类型数据导入方法
图像分类

具有子文件夹(其中包含每个类的图像)的文件夹。类标签源自子文件夹名称。

选择导入数据 > 导入图像分类数据

ImageDatastore

例如,创建一个包含数字数据的图像数据存储。

dataFolder = fullfile(toolboxdir('nnet'),'nndemos', ... 
'nndatasets','DigitDataset');

imds = imageDatastore(dataFolder, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

AugmentedImageDatastore

例如,创建一个包含数字数据的增强图像数据存储。

dataFolder = fullfile(toolboxdir('nnet'),'nndemos', ... 
'nndatasets','DigitDataset');

imds = imageDatastore(dataFolder, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

imageAugmenter = imageDataAugmenter( ...
    'RandRotation',[1,2]);
augimds = augmentedImageDatastore([28 28],imds, ...
'DataAugmentation',imageAugmenter);

augimds = shuffle(augimds);

选择导入数据 > 导入自定义数据

语义分割

CombinedDatastore

例如,组合 ImageDatastorePixelLabelDatastore (Computer Vision Toolbox)

dataFolder  = fullfile(toolboxdir('vision'), ...
'visiondata','triangleImages');

imageDir = fullfile(dataFolder,'trainingImages');
labelDir = fullfile(dataFolder,'trainingLabels');

imds = imageDatastore(imageDir);
classNames = ["triangle","background"];
labelIDs   = [255 0];

pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);
cds = combine(imds,pxds);

选择导入数据 > 导入自定义数据

图像到图像回归

CombinedDatastore

例如,组合含噪输入图像和原始输出图像,以创建适用于图像到图像回归的数据。

dataFolder = fullfile(toolboxdir('nnet'),'nndemos', ... 
'nndatasets','DigitDataset');

imds = imageDatastore(dataFolder, ...
    'IncludeSubfolders',true, ....
    'LabelSource','foldernames');

imds = transform(imds,@(x) rescale(x));
imdsNoise = transform(imds,@(x) {imnoise(x,'Gaussian',0.2)});

cds = combine(imdsNoise,imds);
cds = shuffle(cds);

选择导入数据 > 导入自定义数据

回归

CombinedDatastore

通过组合数组数据存储对象来创建适用于训练回归网络的数据。

[XTrain,~,YTrain] = digitTrain4DArrayData;

ads = arrayDatastore(XTrain,'IterationDimension',4, ...
 'OutputType','cell');
adsAngles = arrayDatastore(YTrain,'OutputType','cell');

cds = combine(ads,adsAngles);

选择导入数据 > 导入自定义数据

序列和时间序列

CombinedDatastore

要将预测变量的数据存储中的序列数据输入深度学习网络,序列的小批量必须具有相同的长度。您可以使用 padsequences 函数填充或截断序列以使其具有特定长度。

例如,将若干序列填充为全部与最长的序列长度相同。

[XTrain,YTrain] = japaneseVowelsTrainData;

XTrain = padsequences(XTrain,2);

adsXTrain = arrayDatastore(XTrain,'IterationDimension',3);
adsYTrain = arrayDatastore(YTrain);

cdsTrain = combine(adsXTrain,adsYTrain);

为了减少填充量,可以使用变换数据存储和辅助函数。例如,填充序列,使一个小批量中的所有序列与该小批量中最长的序列具有相同的长度。您还必须在训练选项中使用相同的小批量大小。

[XTrain,TTrain] = japaneseVowelsTrainData; 

miniBatchSize = 27;
adsXTrain = arrayDatastore(XTrain,'OutputType',"same",'ReadSize',miniBatchSize);
adsTTrain = arrayDatastore(TTrain,'ReadSize',miniBatchSize);

tdsXTrain = transform(adsXTrain,@padToLongest);
cdsTrain = combine(tdsXTrain,adsTTrain);
function data = padToLongest(data)
sequence = padsequences(data,2,Direction="left");
for n = 1:numel(data)
    data{n} = sequence(:,:,n);
end
end

您还可以通过从最短到最长对数据进行排序来减少填充量,并通过指定填充方向来减少填充的影响。有关填充序列数据的详细信息,请参阅序列填充和截断

您还可以使用自定义数据存储对象导入序列数据。有关如何创建自定义序列数据存储的示例,请参阅使用序列数据的自定义小批量数据存储来训练网络

选择导入数据 > 导入自定义数据

其他扩展工作流(如数值特征输入、无法放入内存的数据、图像处理以及音频和语音处理)

数据存储

对于其他扩展工作流,请使用合适的数据存储对象。例如,自定义数据存储、randomPatchExtractionDatastore (Image Processing Toolbox)denoisingImageDatastore (Image Processing Toolbox)audioDatastore (Audio Toolbox)。有关详细信息,请参阅Datastores for Deep Learning

例如,使用 Image Processing Toolbox™ 创建一个 denoisingImageDatastore 对象。

dataFolder = fullfile(toolboxdir('images'),'imdata');

imds = imageDatastore(dataFolder,'FileExtensions',{'.jpg'});

dnds = denoisingImageDatastore(imds,...
    'PatchesPerImage',512,...
    'PatchSize',50,...
    'GaussianNoiseLevel',[0.01 0.1]);

对于表数组数据,您必须将数据转换为合适的数据存储,以便使用深度网络设计器进行训练。例如,首先将您的表转换为包含预测变量和响应变量的数组。然后,将数组转换为 arrayDatastore 对象。最后,将预测变量和响应变量数组数据存储组合为一个 CombinedDatastore 对象。然后,您可以使用合并数据存储在深度网络设计器中进行训练。有关合适的数据存储的详细信息,请参阅Datastores for Deep Learning

选择导入数据 > 导入自定义数据

图像增强

对于图像分类问题,深度网络设计器提供简单的增强选项来应用于训练数据。通过选择导入数据 > 导入图像分类数据,打开“导入图像分类数据”对话框。您可以选择选项,将翻转、旋转、重新缩放和平移操作的随机组合应用于训练数据。

Import Image Classification Data dialog. Using this dialog, you can select the source of image classification data, specify augmentation options, and split validation data.

要执行比深度网络设计器提供的操作更常见且更复杂的图像预处理操作,请使用 TransformedDatastoreCombinedDatastore 对象。要导入 CombinedDatastoreTransformedDatastore 对象,请选择导入数据 > 导入自定义数据

Import Custom Data dialog. Using this dialog, you can import training and validation data sets.

有关图像增强的详细信息,请参阅预处理图像以进行深度学习

验证数据

在深度网络设计器中,您可以导入验证数据以在训练期间使用。您可以监视验证度量,如损失和准确度,以评估网络是否过拟合或欠拟合,并根据需要调整训练选项。例如,如果验证损失远高于训练损失,则网络可能过拟合。

Loss plot showing the training and validation loss versus iteration number. The validation loss is much higher than the training loss.

在深度网络设计器中,您可以通过以下方式导入验证数据:

  • 从工作区中的数据存储。

  • 从包含每个类的图像子文件夹的文件夹中(仅限图像分类数据)。

  • 通过拆分一部分训练数据用作验证数据(仅限图像分类数据)。在训练之前,系统会对数据进行一次拆分,分成验证集和训练集。这种方法称为留出法验证。

从训练数据中拆分验证数据

从训练数据中拆分留出法验证数据时,深度网络设计器会从每个类中拆分一定百分比的训练数据。例如,假设您有一个包含两个类(cat 和 dog)的数据集,并选择使用 30% 的训练数据进行验证。深度网络设计器使用标签为“cat”的图像的最后 30% 和标签为“dog”的图像的最后 30% 作为验证集。

通过选中“导入图像数据”对话框中的随机化复选框,您可以选择将观测值随机分配给训练集和验证集,而不是使用最后 30% 的训练数据作为验证数据。随机化图像可以提高基于以非随机顺序存储的数据训练的网络的准确度。例如,数字数据集由 10,000 个内容是手写数字的合成灰度图像组成。此数据集有底层顺序,在此顺序中,具有相同手写样式的图像在每个类中彼此相邻出现。下面是显示示例。

Six images of a handwritten number three. The first three images share the same handwriting and the latter three images share the same handwriting.

另请参阅

| | | | |

相关主题