主要内容

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

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

迁移学习是深度学习应用中常用的一种方法。你可以使用预先训练好的网络,并将其作为学习新任务的起点。用迁移学习对网络进行微调通常比用随机初始化的权重从头训练网络更快更容易。您可以使用较少的训练信号快速将学习到的特征转移到新任务中。

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

加载数据

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

zipFile = matlab.internal.examples.download万博1manbetxSupportFile(“音频”“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的Audio Toolbox模型,请单击安装代替。深度网络设计器提供了一个指向网络权重位置的链接。将文件解压缩到MATLAB路径上的某个位置。现在关闭“深度网络设计器”开始页并重新打开它。当网络正确安装并在路径上时,可以单击开放按钮在YAMNet上。YAMNet模型可以将音频分类为521种声音类别之一。有关更多信息,请参见yamnet(音频工具箱)

“深度网络设计器”中显示全网的缩小视图设计师窗格。要用鼠标放大,请使用Ctrl+滚轮。若要平移,请使用方向键,或按住滚轮并拖动鼠标。选择一个图层来查看它的属性。清除所有层以查看网络摘要属性窗格。

为迁移学习准备网络

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

替换最后一个可学习层

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

拖动一个新的fullyConnectedLayer画在画布上。的OutputSize属性定义分类问题的类数。改变OutputSize到新数据中的类数,在本例中为8。

改变学习率,使学习在新层比在转移层更快通过设置WeightLearnRateFactor而且BiasLearnRateFactor10

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

替换输出层

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

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

检查网络

单击,检查网络是否可以进行培训分析.如果深度学习网络分析仪报告零错误,那么编辑的网络已经准备好训练了。

导入数据

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

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

选择培训选项

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

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

列车网络的

单击,使用指定的训练选项对网络进行训练关闭然后点击火车

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

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

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

测试网络

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

数据= readall(tdsTest);YTest = [data{:,2}];YPred = classification (trainedNetwork_1,tdsTest);精度= sum(YPred == YTest')/numel(YTest)
准确度= 0.9830

万博1manbetx支持函数

这个函数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);数据{索引,2}=类;结束结束

参考文献

[1]维尔马,尼什查尔·K.,拉胡尔·库马尔·塞瓦库拉,索纳尔·迪克西特和阿尔·萨鲁。基于声学信号的空气压缩机智能状态监测《IEEE可靠性汇刊》第65期。1(2016年3月):291-309。https://doi.org/10.1109/TR.2015.2459684。

另请参阅

|

相关的话题