主要内容

管理机器学习的数据集和深度学习工作流

使用MATLAB®和信号处理工具箱™功能来创建一个成功的人工智能(AI)工作流从标签到培训部署。

常见的人工智能任务

常见的人工智能任务是信号分类,sequence-to-sequence分类和回归。一个人工智能模型预测:

  • 信号分类为每个输入信号——一个离散类标签

  • sequence-to-sequence分类——一个标签为每个时间步的序列数据

  • 回归——一个连续的数值

数据组织

对于许多机器学习和深度学习应用程序,数据集很大,包括信号和标签变量。根据你的数据集是如何组织的,您可以使用数据存储和功能在MATLAB信号处理工具箱来管理您的数据。

有各种各样的方法来收集和存储数据影响如何在工作流访问它。在数据准备阶段,你可能会遇到的一个或多个这些常见的问题:

  • 如何组织我的数据?

  • 我怎么访问数据进行训练?

  • 我如何创建标签?

  • 我怎么把信号和标签数据?

这个表提供了不同的数据组织的场景和向您展示如何创建数据存储对应于这些场景中,这样你就可以访问和数据准备您的工作流。

数据组织 任务 相关的数据存储 例子
信号和标签变量分别存储在内存中
  • 信号分类

考虑一个数据集组成的信号存储在矩阵团体和相应的标签中存储向量lbls。创建一个arrayDatastore对象的信号数据,另一个标签。您可以使用IterationDimension的属性arrayDatastore指定是否数据存储在列或行。

ads1 = arrayDatastore(团体);ads2 = arrayDatastore (lbls);

使用结合函数来将数据从两个数据存储到一个CombinedDatastore

cd =结合(ads1 ads2);

确定每个标签的数据集的计数。指定底层数据存储索引数的标签ads2

问= countlabels (cds, UnderlyingDatastoreIndex = 2)
问= 4×3表标签数百分比_____ _____ _________ 20 25 b 20 25 c 20 25 d 20 25

使用splitlabels函数把数据随机分成训练、验证和测试集。

idx = splitlabels (cd, (0.7 - 0.2),“随机”);trainDs =子集(cd, idx {1});valDs =子集(cd, idx {2});testDs =子集(cd, idx {3});

数一数的标签训练子集数据存储。

trainCnt = countlabels (trainDs UnderlyingDatastoreIndex = 2)
trainCnt = 4×3表标签数百分比_____ _____ _________ 14 25 b 14 25 c 14 25 d 14 25
信号和标签变量存储在单独的mat文件
  • 信号分类

考虑一个数据集组成的两套mat文件。第一组包含信号数据和第二组包含相应的标签。所有文件保存在同一文件夹,“信号”或“标签“作为一个前缀。创建一个signalDatastore对象指向文件的位置。

sds = signalDatastore (datasetFolder);

使用子集函数来创建两个新的数据存储,数据存储包含信号数据和其他数据存储包含标签数据。所有信号数据文件名包含”信号“和所有标签数据文件名包含“标签”。

sigds =子集(sds,包含(sds.Files“信号”));lblds =子集(sds,包含(sds.Files“标签”));

读取标签数据到内存中。把标签和类别分类数组一个,b,c

labeldata = readall (lblds);lblcat =分类(labeldata, {“一个”“b”“c”});

创建一个arrayDatastore对象包含分类标签。将标签与信号数据。

广告= arrayDatastore (lblcat);allds =结合(sigds、广告);

预览第一信号和对应的标签数据存储。

预览(allds)
ans = 1×2单元阵列{1000×1双}{[一]}

请注意

数据存储解析文件按字母顺序。确保信号变量和标签变量存储在单独的文件中正确配对,使用一个标识符匹配相应的文件名。

信号和标签变量存储在单个MAT-file
  • Sequence-to-sequence分类

考虑一个数据集组成的mat文件包含两个信号(团体)和标签(lbl)数据。文件保存在文件夹。创建一个signalDatastore对象指向文件的位置,包括子文件夹的路径。指定团体lbl的变量名SignalVariableNames数据存储的属性。

sds = signalDatastore (datasetFolder IncludeSubFolders = true,SignalVariableNames = [“团体”“lbl”]);

读第一对信号和标签数据。

阅读(sds)
ans = 2×1单元阵列{225000×1双}{225000×1分类}

把数据随机分成训练集和测试集。使用80%的数据训练网络,20%的数据来测试网络。

[trainIdx ~, testIdx] = dividerand(元素个数(sds.Files), 0.8, 0.2);trainds =子集(sds、trainIdx);testds =子集(sds、testIdx);
信号存储在mat文件和标签存储在内存中
  • 信号分类

  • Sequence-to-sequence分类

考虑一个数据集组成的信号在mat文件存储的位置文件夹和相应的标签中存储向量lbls在内存中。标签的值存储在一个矩阵中每一列对应一个标签序列。创建一个signalDatastore消费对象和一个信号数据arrayDatastore对象的标签。

sds = signalDatastore(文件夹);广告= arrayDatastore (lbls);

使用结合函数来将数据从两个数据存储到一个CombinedDatastore

cd =结合(sds、广告)
cd = CombinedDatastore属性:UnderlyingDatastores: {[1×1 signalDatastore] [1×1 matlab.io.datastore。ArrayDatastore]} 万博1manbetxSupportedOutputFormats(“三种”:“csv”“xlsx”“xls”“铺”“parq”…)
信号存储在mat文件保存在文件夹包含标签的名字
  • 信号分类

考虑一个数据集组成的信号存储在mat文件。文件保存在文件夹,每个文件夹名称对应于一个标签。创建一个signalDatastore对象指向文件夹的位置。

sds = signalDatastore(位置);

使用folders2labels函数获取标签名称的列表。创建一个arrayDatastore包含标签的对象。

lbls = folders2labels(位置,FileExtensions =“.mat”);广告= arrayDatastore (lbls);

结合信号数据存储和数组数据存储使用结合函数。

cd =结合(sds、广告);
信号存储在mat文件和区域(ROI)限制存储在单独的mat文件
  • Sequence-to-sequence分类

考虑一个数据集组成的mat文件包含信号数据和其他mat文件包含标签数据。标签数据存储的表定义一个标签值不同的信号区域。创建两个单独的数据存储消费数据。

sds1 = signalDatastore (FileLocation1 SampleRate = fs);sds2 = signalDatastore (FileLocation2 SignalVariableNames = (“LabelVals”;“LabelROIs”]);

ROI限制和标签转换为一个分类顺序,您可以用它来训练模型。

i = 1;hasdata (sds1)信号=阅读(sds1);标签=阅读(sds2);%标签值转换为分类向量labelCats =分类(标签1 {2,}value, {“一个”“b”“c”' d '});%将标签值和ROI signalMask限制表输入roiTable =表(标签1 {2,}.ROILimits labelCats);m = signalMask (roiTable);%获得分类序列面具掩码= catmask (m,长度(信号);lbls{我}=面具;我=我+ 1;结束%直言面具序列存储在数组数据存储广告= arrayDatastore (lbls IterationDimension = 2);

结合sds1广告到一个数据存储。

sds4 =结合(sds1、广告);
标记包含信号和标签数据的信号设置
  • 信号分类

  • Sequence-to-sequence分类

考虑一套标记信号lss包含信号返回的数据和标签信息信号贴标签机数据集应用。包括两个鲸鱼歌曲的录音。使用getLabelNames函数获取列表的标签名称标签信号设置。您还可以检索标签名称指定的标签类型。

lblnames = getLabelNames (lss)
ans = 3×1字符串“WhaleType”“MoanRegions”“TrillRegions”

使用createDatastores函数创建一个signalDatastore包含数据和信号arrayDatastore包含相应的标签。

(sds、广告)= createDatastores (lss lblnames)
sds与属性= signalDatastore: MemberNames: {“Whale1”;“Whale2”}成员:{2×1细胞}ReadSize: 1 SampleRate: 4000广告= ArrayDatastore属性:ReadSize: 1 IterationDimension: 1 OutputType:“细胞”
存储在同一个MAT-file输入和输出信号
  • 回归

考虑mat文件存储在组成的一个数据集文件夹。每个文件包含一个输入变量和一个输出变量xOut你要养活一个回归模型。创建一个包含这两个变量的信号数据存储。

sds = signalDatastore(文件夹,SignalVariableNames = (“鑫”“xOut”]);

你可以输入sds直接向trainNetwork

考虑不同的mat文件存储在数据集组成位置。每个文件包含输入和输出变量。创建两个信号数据存储分离变量。

第1 = signalDatastore(位置,SignalVariableNames = (“一个”“b”“c”]);outDs = signalDatastore(位置,SignalVariableNames = (“d”“e”]);

当你的数据已经准备好了,你可以使用trainNetwork(深度学习工具箱)函数来训练神经网络。常见的功能,您可以使用网络培训,trainNetworkminibatchqueue(深度学习工具箱),接受数据存储作为训练数据的输入和响应。

网= trainNetwork (ds,)
关于如何创建一个深度学习的更多信息网络信号分类,看看创建简单的深度学习神经网络分类 (深度学习工具箱)

请注意

当数据存储在内存中,您可以直接输入单元阵列trainNetwork函数。如果你需要将内存数据训练之前,使用TransformedDatastore

数据预处理

一些工作流之前需要进行预处理数据喂养一个网络。例如,您可以重新取样、调整或过滤信号之前或在训练。你可以预先执行功能或使用数据存储转换为培训准备数据。

例子:计算傅里叶synchrosqueezed变换(FSST)

计算每个信号的FSST数据存储ds

@fsst fsstDs =变换(ds);

转换后的数据在内存中。使用readall函数来读取所有的数据TransformedDatastore到内存,以便FSST计算在训练步骤只执行一次。

transformedData = readall (fsstDs);

例子:从信号中提取时频特性数据

获得短时傅里叶变换)的每个信号数据存储ds。调用变换函数计算stft然后使用writeall函数来将输出写入到磁盘。

tds =变换(ds, @stft);outputLocation writeall (tds);

创建一个新的数据存储指向内存不足的特性。

ds = signalDatastore (outputLocation);

例子:过滤和downsample信号数据并与定制downsample标签数据预处理功能

创建一个数据存储指向包含信号数据文件和标签的位置数据文件。

sds = signalDatastore(位置,SignalVariableNames = (“数据”“标签”]);

定义一个自定义的预处理功能,带通滤波器和downsamples信号数据和标签数据。

函数[dataOut] = downsampleData (dataIn)团体= dataIn {1};lbls = dataIn {2};filtsig =带通(sig, [400], 3000);downsig = downsample (filtsig 3);downlbls = downsample (lbls 3);dataOut = [downsig, downlbls];结束

调用变换sds应用自定义每个文件预处理功能。

tds =变换(sds、@downsampleData);

关于预处理的更多信息在深度学习工作流程,明白了预处理数据为特定领域的深度学习应用程序(深度学习工具箱)

工作流场景

通用工作流任何机器学习或深度学习的任务包括以下步骤:

  1. 数据准备

  2. 网络训练

  3. 模型部署

这个表显示了示例和功能您可以使用从准备数据训练网络信号分类任务。

例子 数据 相关功能 突出了

语音数字识别与自定义日志声谱图层更深的学习

  • . wav文件

  • 文件名包含标签

  • 文件太大,以适应在内存中集合

使用深卷积神经网络预测标签录音(DCNN)和自定义日志声谱图层

  • 自定义日志声谱图插入到网络层

  • 计算每个信号的对数谱图在网络在训练

手势分类使用雷达信号和深度学习

  • .mat文件

  • 每个文件包含三个数据矩阵

  • 文件名包含标签

预处理信号使用自定义函数和训练对于多变量卷积神经网络(CNN)

  • 信号和标签数据合并成单一的数据存储

  • 同时读取所有数据到内存中,并应用预处理

训练语音数字识别网络使用内存不足的特性

  • . wav文件

  • 文件名包含标签

  • 收集的文件装入内存太大

预测标签录音mel-frequency色上使用一个网络训练

  • 所有信号转换为mel-frequency声谱图

  • 写色到磁盘

  • CNN训练分类器

这个表显示了示例和功能可以使用从准备sequence-to-sequence数据来训练一个网络分类任务。

例子 数据 相关功能 突出了
波形分割使用深度学习

  • .mat文件

  • 每个文件包含:

    • 信号变量

    • 标签变量

    • 采样率变量

部分地区的兴趣的信号

  • 变换区域标签分类序列,每个信号样本都有相应的标签

  • 列车网络的

  • 应用过滤和时频变换信号来提高网络性能

  • 重新培训网络

使用EMG信号和深度学习分类的手臂运动

  • .mat文件

    • 一组文件包含信号数据

    • 一组文件包含标签数据

信号roi进行分类

  • 定义基于标签数据感兴趣的区域

  • 信号和标签合并成单一的数据存储

  • 所有数据读入内存和预处理变换应用到整个数据集一次培训

  • 列车网络的

这个表显示了示例和功能可以使用从数据训练网络,回归任务做准备。

例子 数据 相关功能 突出了

降噪脑电图信号使用GPU加速的深度学习回归

  • .mat文件

    • 一个文件包含清洁信号数据矩阵

    • 一个文件包含工件数据的矩阵

消除干扰信号使用回归模型

  • 生成对清洁和噪声信号

  • 定义LSTM网络输出回归层

  • 列车网络的要求与噪声信号作为输入和干净的信号输出

  • 提高网络性能利用短时傅里叶变换的特征提取

  • 降噪使用深度学习回归原始信号

提示

使用,readall,writeall函数来读取数据从数据存储在数据存储或写数据文件。

  • ——使用这个函数读取数据从一个包含文件数据存储数据迭代或内存中的数据。

  • readall——使用这个函数读取所有数据存储中的数据时,数据集适合在内存中。如果数据集太大,适合在内存中,您可以转换数据在每一个时代或使用培训writeall函数来存储转换后的数据,您可以阅读使用signalDatastore

  • writeall——使用这个函数来编写预处理数据,并不适合在内存文件。然后您可以创建一个新的数据存储指向输出文件的位置。

可用的数据集

有几个现成的数据集用于人工智能工作流:

  • QT数据库- 210心电图信号区域标签。可以下载的//www.tianjin-qmedu.com/万博1manbetxsupportfiles/SPT/data/QTDatabaseECGData.zip

  • EEGdenoiseNet - 4514清洁脑电图段和3400眼工件段。可以下载的https://ssd.mathworks.com/万博1manbetxsupportfiles/SPT/data/EEGEOGDenoisingData.zip

  • UWB-gestures - 96多通道超宽频脉冲雷达信号。可以下载的https://ssd.mathworks.com/万博1manbetxsupportfiles/SPT/data/uwb-gestures.zip

  • 肌电的数据- 720多通道肌电图信号区域标签。可以下载的https://ssd.mathworks.com/万博1manbetxsupportfiles/SPT/data/MyoelectricData.zip

  • Mendeley数据- 327与加速度计信号类标签。可以下载的https://ssd.mathworks.com/万博1manbetxsupportfiles/wavelet/crackDetection/transverse_crack.zip

额外的数据集,看到时间序列和信号数据集(深度学习工具箱)

相关的话题