主要内容

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

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

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

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

加载数据

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

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

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

广告= audioDatastore (dataFolder IncludeSubfolders = true, LabelSource =“foldernames”);

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

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

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

  • 使用yamnetPreprocess利用YAMNet生成适合训练的mel谱图。每个音频信号产生多个声谱图。

  • 复制每个光谱图的类标签。

tdsTrain =变换(adsTrain、@audioPreprocess IncludeInfo = true);tdsValidation =变换(adsValidation、@audioPreprocess IncludeInfo = true);tdsTest =变换(adsTest、@audioPreprocess IncludeInfo = true);

选择Pretrained网络

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

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。

列车网络的

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

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

导出培训的结果,对培训选项卡上,选择出口>导出培训网络和结果.Deep Network Designer将训练过的网络作为变量导出trainedNetwork_1训练信息作为变量trainInfoStruct_1

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

测试网络

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

data = readall (tdsTest);欧美={:2}][数据;YPred =分类(trainedNetwork_1 tdsTest);accuracy = sum(YPred == YTest')/numel(YTest)
精度= 0.9830

支持函数

这个函数audioPreprocess使用yamnetPreprocess生成MEL光谱图audioIn你可以把它提供给YAMNet预训练的网络。每个输入信号产生多个光谱图,因此必须复制标签以创建与光谱图一一对应的关系。

函数[data,info] = audioPreprocess(audioIn,info) class = info. label;fs = info.SampleRate;特点= yamnetPreprocess (audioIn, fs);numSpectrograms =大小(功能,4);data =细胞(numSpectrograms 2);index = 1:numSpectrograms data{index,1} = features(:,:,:,index);数据{指数,2}=类;结束结束

参考文献

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

Baidu
map