管理机器学习的数据集和深度学习工作流
使用MATLAB®和信号处理工具箱™功能来创建一个成功的人工智能(AI)工作流从标签到培训部署。
常见的人工智能任务
常见的人工智能任务是信号分类,sequence-to-sequence分类和回归。一个人工智能模型预测:
为信号分类为每个输入信号——一个离散类标签
为sequence-to-sequence分类——一个标签为每个时间步的序列数据
为回归——一个连续的数值
数据组织
对于许多机器学习和深度学习应用程序,数据集很大,包括信号和标签变量。根据你的数据集是如何组织的,您可以使用数据存储和功能在MATLAB信号处理工具箱来管理您的数据。
有各种各样的方法来收集和存储数据影响如何在工作流访问它。在数据准备阶段,你可能会遇到的一个或多个这些常见的问题:
如何组织我的数据?
我怎么访问数据进行训练?
我如何创建标签?
我怎么把信号和标签数据?
这个表提供了不同的数据组织的场景和向您展示如何创建数据存储对应于这些场景中,这样你就可以访问和数据准备您的工作流。
数据组织 | 任务 | 相关的数据存储 | 例子 |
---|---|---|---|
信号和标签变量分别存储在内存中 |
|
考虑一个数据集组成的信号存储在矩阵 ads1 = arrayDatastore(团体);ads2 = arrayDatastore (lbls); 使用 cd =结合(ads1 ads2); 确定每个标签的数据集的计数。指定底层数据存储索引数的标签 问= countlabels (cds, UnderlyingDatastoreIndex = 2) 问= 4×3表标签数百分比_____ _____ _________ 20 25 b 20 25 c 20 25 d 20 25 使用 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文件。第一组包含信号数据和第二组包含相应的标签。所有文件保存在同一文件夹,“ sds = signalDatastore (datasetFolder); 使用 sigds =子集(sds,包含(sds.Files“信号”));lblds =子集(sds,包含(sds.Files“标签”)); 读取标签数据到内存中。把标签和类别分类数组 labeldata = readall (lblds);lblcat =分类(labeldata, {“一个”“b”“c”}); 创建一个 广告= arrayDatastore (lblcat);allds =结合(sigds、广告); 预览第一信号和对应的标签数据存储。 预览(allds) ans = 1×2单元阵列{1000×1双}{[一]} 请注意 数据存储解析文件按字母顺序。确保信号变量和标签变量存储在单独的文件中正确配对,使用一个标识符匹配相应的文件名。 |
|
信号和标签变量存储在单个MAT-file |
|
考虑一个数据集组成的mat文件包含两个信号( 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文件和标签存储在内存中 |
|
考虑一个数据集组成的信号在mat文件存储的位置 sds = signalDatastore(文件夹);广告= arrayDatastore (lbls); 使用 cd =结合(sds、广告) cd = CombinedDatastore属性:UnderlyingDatastores: {[1×1 signalDatastore] [1×1 matlab.io.datastore。ArrayDatastore]} 万博1manbetxSupportedOutputFormats(“三种”:“csv”“xlsx”“xls”“铺”“parq”…) |
|
信号存储在mat文件保存在文件夹包含标签的名字 |
|
考虑一个数据集组成的信号存储在mat文件。文件保存在文件夹,每个文件夹名称对应于一个标签。创建一个 sds = signalDatastore(位置); 使用 lbls = folders2labels(位置,FileExtensions =“.mat”);广告= arrayDatastore (lbls);
结合信号数据存储和数组数据存储使用 cd =结合(sds、广告); |
|
信号存储在mat文件和区域(ROI)限制存储在单独的mat文件 |
|
考虑一个数据集组成的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); 结合 sds4 =结合(sds1、广告); |
|
标记包含信号和标签数据的信号设置 |
|
考虑一套标记信号 lblnames = getLabelNames (lss) ans = 3×1字符串“WhaleType”“MoanRegions”“TrillRegions” 使用 (sds、广告)= createDatastores (lss lblnames) sds与属性= signalDatastore: MemberNames: {“Whale1”;“Whale2”}成员:{2×1细胞}ReadSize: 1 SampleRate: 4000广告= ArrayDatastore属性:ReadSize: 1 IterationDimension: 1 OutputType:“细胞” |
|
存储在同一个MAT-file输入和输出信号 |
|
考虑mat文件存储在组成的一个数据集 sds = signalDatastore(文件夹,SignalVariableNames = (“鑫”“xOut”]); 你可以输入 考虑不同的mat文件存储在数据集组成 第1 = signalDatastore(位置,SignalVariableNames = (“一个”“b”“c”]);outDs = signalDatastore(位置,SignalVariableNames = (“d”“e”]); |
当你的数据已经准备好了,你可以使用trainNetwork
(深度学习工具箱)函数来训练神经网络。常见的功能,您可以使用网络培训,trainNetwork
或minibatchqueue
(深度学习工具箱),接受数据存储作为训练数据的输入和响应。
网= 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);
关于预处理的更多信息在深度学习工作流程,明白了预处理数据为特定领域的深度学习应用程序(深度学习工具箱)。
工作流场景
通用工作流任何机器学习或深度学习的任务包括以下步骤:
数据准备
网络训练
模型部署
这个表显示了示例和功能您可以使用从准备数据训练网络信号分类任务。
例子 | 数据 | 相关功能 | 突出了 |
---|---|---|---|
|
使用深卷积神经网络预测标签录音(DCNN)和自定义日志声谱图层
|
||
|
预处理信号使用自定义函数和训练对于多变量卷积神经网络(CNN)
|
||
|
|
预测标签录音mel-frequency色上使用一个网络训练
|
这个表显示了示例和功能可以使用从准备sequence-to-sequence数据来训练一个网络分类任务。
例子 | 数据 | 相关功能 | 突出了 |
---|---|---|---|
波形分割使用深度学习 |
|
|
部分地区的兴趣的信号
|
使用EMG信号和深度学习分类的手臂运动 |
|
信号roi进行分类
|
这个表显示了示例和功能可以使用从数据训练网络,回归任务做准备。
例子 | 数据 | 相关功能 | 突出了 |
---|---|---|---|
|
消除干扰信号使用回归模型
|
可用的数据集
有几个现成的数据集用于人工智能工作流:
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
。
额外的数据集,看到时间序列和信号数据集(深度学习工具箱)。
相关的话题
- 数据存储深度学习(深度学习工具箱)
- 信号处理应用程序(深度学习工具箱)
- 使用深度学习序列分类(深度学习工具箱)
- 使用深度学习Sequence-to-Sequence分类(深度学习工具箱)
- 使用深度学习Sequence-to-One回归(深度学习工具箱)