主要内容

深度网络设计器中预训练音频网络的迁移学习

这个例子展示了如何使用深度网络设计器交互微调预训练的网络以分类新的音频信号。

迁移学习通常用于深度学习应用。你可以把一个预训练好的网络作为学习新任务的起点。使用迁移学习对网络进行微调通常比从头开始训练随机初始化权重的网络要快得多,也容易得多。你可以使用更少的训练信号快速地将学习到的特征转移到新的任务中。

这个例子重新训练YAMNet,一个预训练的卷积神经网络,对一组新的音频信号进行分类。

加载数据

下载并解压空压机数据集[1]。此数据集由空气压缩机在健康状态或七个故障状态之一的记录组成。

zipFile = matlab.internal.examples.download金宝appSupportFile(“音频”“AirCompressorDataset / AirCompressorDataset.zip”);dataFolder = fileparts(zipFile);解压缩(zipFile dataFolder);

创建一个audioDatastore对象来管理数据。

ads = audioDatastore(dataFolder, inclesubfolders =true,LabelSource= .“foldernames”);

将数据拆分为训练集、验证集和测试集splitEachLabel函数。

[adsTrain,adsValidation,adsTest] = splitEachLabel(ads,0.7,0.2,0.1);

使用变换函数使用该函数对数据进行预处理audioPreprocess,在本示例的末尾找到。对于每个信号:

  • 使用yamnetPreprocess(音频工具箱)生成适合使用YAMNet进行训练的mel谱图。每个音频信号产生多个频谱图。

  • 为每个谱图复制类标签。

tdsTrain = transform(adsTrain,@audioPreprocess,IncludeInfo=true);tdsValidation = transform(adsValidation,@audioPreprocess,IncludeInfo=true);tdsTest = transform(adsTest,@audioPreprocess,IncludeInfo=true);

选择预训练网络

准备和培训网络交互使用深度网络设计器。要打开深度网络设计器,请在应用程序选项卡,在机器学习和深度学习,单击应用程序图标。或者,您可以从命令行打开应用程序。

deepNetworkDesigner

深度网络设计器提供了一个预先训练的音频分类网络的选择。这些模型需要音频工具箱™和深度学习工具箱™。

音频网络中,选择YAMNet从预训练的网络列表中,点击开放。如果未安装YAMNet的“音频工具箱”模型,请单击安装代替。深度网络设计器提供了一个指向网络权重位置的链接。将文件解压缩到MATLAB路径上的一个位置。现在关闭深度网络设计器开始页并重新打开它。当网络安装正确并在路径上时,可以单击开放按钮。YAMNet模型可以将音频分为521个声音类别之一。有关更多信息,请参见yamnet(音频工具箱)

控件中显示整个网络的缩小视图设计师窗格。要用鼠标放大,请使用Ctrl+滚轮。要平移,请使用方向键,或按住滚轮并拖动鼠标。选择一个图层来查看其属性。清除所有层,查看网络汇总信息属性窗格。

为迁移学习准备网络

为网络迁移学习做准备,在设计师窗格,替换最后一个可学习层和最后一个分类层。

替换最后一个可学习层

要使用预训练网络进行迁移学习,必须更改类的数量以匹配新的数据集。首先,找到网络中最后一个可学习的层。对于YAMNet,最后一个可学习层是最后一个完全连接层,密集的

拖一个新的fullyConnectedLayer在画布上。的OutputSize属性定义用于分类问题的类的数量。改变OutputSize与新数据中的类数量相比,在本例中为8。

通过设置改变学习率,使新层的学习速度比迁移层的学习速度快WeightLearnRateFactorBiasLearnRateFactor10

删除最后一个完全连接的层,然后连接新层。

替换输出层

对于迁移学习,你需要替换输出层。滚动到末尾层的图书馆然后拖动一个新的classificationLayer在画布上。删除原来的分类层,并在原来的位置连接新层。

对于新的输出层,您不需要设置OutputSize。在训练时,Deep Network Designer根据数据自动设置层的输出类。

检查网络

要检查网络是否可以进行训练,请单击分析。如果深度学习网络分析器报告零错误,则编辑后的网络已准备好进行训练。

导入数据

要将数据加载到深度网络设计器中,请在数据选项卡上,单击导入数据>导入自定义数据。选择tdsTrain作为训练数据和tdsValidation作为验证数据。

使用深度网络设计器,您可以检查训练和验证数据数据选项卡。您可以看到,在训练之前的数据与预期一致。

选择培训选项

要指定培训选项,请选择培训选项卡并单击培训方案。将初始学习率设置为较小的值,以减缓迁移层的学习速度。再加上全连接层的学习率因子的增加,现在只有在新层中学习速度快,在其他层中学习速度慢。

对于本例,设置解算器亚当InitialLearnRate0.0001,MaxEpochs2。

列车网络的

要使用指定的训练选项训练网络,请单击好吧然后点击火车

深度网络设计器允许您可视化和监控培训进度。然后,如果需要,您可以编辑培训选项并重新培训网络。为了找到最佳的训练选项,使用实验管理器创建一个深度学习实验。您可以通过点击在深度网络设计器中创建一个深度学习实验出口>创建实验

导出培训的结果,在培训选项卡上,选择出口>输出训练网络和结果。深度网络设计器将训练好的网络导出为变量trainedNetwork_1训练信息作为变量trainInfoStruct_1

您还可以生成MATLAB代码,它可以重新创建网络和使用的训练选项。在培训选项卡上,选择出口>生成培训代码。检查MATLAB代码,学习如何以编程方式准备训练数据,创建网络架构,并训练网络。

测试网络

使用导出的网络对测试数据进行分类分类函数。

data = readall(tdsTest);YTest = [data{:,2}];YPred = classified (trainedNetwork_1,tdsTest);准确性= sum(YPred == YTest')/ nummel (YTest)
精度= 0.9830

金宝app支持函数

这个函数audioPreprocess使用yamnetPreprocess(音频工具箱)生成MEL谱图audioIn你可以将其输入到YAMNet预训练网络中。每个输入信号产生多个频谱图,因此必须复制标签以与频谱图建立一对一的对应关系。

函数[data,info] = audioPreprocess(audioIn,info) class = info. label;fs = info.SampleRate;features = yamnetPreprocess(audioIn,fs);numSpectrograms = size(features,4);data = cell(numSpectrograms,2);index = 1:numSpectrograms data{index,1} = features(:,:,:,index);数据{index,2} = class;结束结束

参考文献

[1] Verma, nischal K., Rahul Kumar Sevakula, Sonal Dixit和Al Salour。“基于声学信号的空气压缩机智能状态监测”IEEE可靠性学报,第65期。1(2016年3月):291-309。https://doi.org/10.1109/TR.2015.2459684。

另请参阅

|

相关的话题