Johanna Pingel, MathWorks
Mathworks Emelie Andersson
事实证明,深度学习网络是一种多功能工具。它们最初是用于图像分类的,现在正越来越多地应用于各种其他数据类型。在本次网络研讨会中,我们将探讨深度学习的基础知识,为理解和使用深度神经网络处理信号数据提供基础。通过两个示例,您将看到深度学习的实际应用,它提供了无需领域专家就能执行大型数据集复杂分析的能力。
探索MATLAB如何解决使用CNNS和LSTMS遇到的共同挑战,以创建信号和声音系统,并查看用于信号数据的深度学习的新功能。
我们将演示深度学习去噪语音信号和生成音乐曲调。您将看到如何使用MATLAB:
Emelie Andersson是MathWorks的应用工程师,专注于Matlab应用程序,如数据分析,机器学习和深度学习。在她的角色中,她支持客户在整个数万博1manbetx据分析工作流程中适应MATLAB产品。s manbetx 845她一直在有2年的Mathworks并拥有一个M.Sc.隆德大学的图像分析和信号处理学位。
Johanna Pingel于2013年加入MathWorks团队,专攻图像处理和MATLAB计算机视觉应用。她拥有伦斯勒理工学院的硕士学位和卡内基梅隆大学的学士学位。她在计算机视觉应用领域工作了5年多,专注于目标检测和跟踪。
录音时间:2018年12月6日
欢迎深入学习信号和声音。我的名字是Johanna Pingel来自产品营销,我从应用工程中加入Emelie Andersson。今天,我们将介绍何时以及为什么您可以使用深度学习的信号和音频数据,当然,当然会向您展示它通过两个新示例所做的方式。
在深入学习和机器学习方面,工程师有不同类型的数据。大多数数据类型是三个表格数据,时间序列数据或图像数据之一。深入学习历史上用于图像数据,技术首次起飞并获得非常有前途的结果。深度学习现在已成为其他类型数据的工具。该研讨会将专注于中间部分 - 深度学习信号和音频类型数据。
你有信号和/或音频数据。你应该使用深度学习还是传统机器学习?这是一个经常出现的问题。每个人都在谈论深度学习,但它真的对信号和音频数据有好处吗?什么时候我应该使用机器学习而不是深度学习?在回答这个问题之前,我先花30秒定义一下两者的区别。我们将深度学习定义为机器学习的一个子集,在机器学习内部也是经典机器学习。在这两种情况下,我们都有输入数据,我们需要一种算法来学习识别信号之间的独特质量。您有输入数据,并且希望算法从数据生成输出。
让我们从经典的机器学习开始,手动从数据中提取相关特征。这些特征被添加到机器学习模型中进行分类,然后生成输出。有了深度学习,你可以直接将原始数据输入深度神经网络,然后自动学习特征。深度学习通常使用神经网络架构来实现,我们将通过示例进行更详细的解释。这是机器学习和深度学习之间的一个很大的区别。但问题是,我该用哪一个?
答案是,视情况而定。也许这就是你的处境。我有很多数据,但对这些数据所包含的内容知之甚少。如果是这样,你应该尝试深入学习。由于模型学习了自己的特性,作为工程师,您不必对数据了解太多,更多的数据可能意味着更好的模型。也许您有一个较小的数据集。你还能使用深度学习吗?答案是,当然,去尝试吧。但机器学习模型可能会给你带来更好的结果。在经典的机器学习中,您可以利用有关数据的知识,提取最佳特征和适当数量的特征。
你可能会问,我能不能尝试两种方法——深度学习和机器学习——然后比较结果?答案是,是的,你可以两种都试试。这些方法很容易通过精确度来进行比较。你可以在MATLAB环境中创建机器学习和深度学习模型。在这个研讨会上,我们只讨论深度学习方法。但在研讨会的最后,你会发现如何使用机器学习做类似的事情的资源。最好的部分是,在MATLAB中,你不需要成为信号处理工程师来处理信号数据,你也不需要成为数据科学家来处理机器学习和深度学习。
那么,让我们开始吧。不管您的具体深度学习问题是什么,您都很可能从遵循典型的深度学习工作流中受益。首先,您需要从任何地方访问音频和信号数据文件——无论是MP3文件、数据库中的历史数据,还是实时流媒体数据。然后需要大量的标记数据。你需要输入数据来给神经网络提供大量的例子,这样它就可以学习和理解这些特征来做出决定。所有这些数据使得网络的训练相当密集。为了能够更快地进行这些计算,您可以并且应该使用gpu,这可以使训练大大加快。
一旦你有了一个训练有素的模型,你很可能想要将它整合到一个更大的系统中,或者允许用户通过应用程序调用模型,或者将模型导出到外部硬件。您可能正在考虑针对嵌入式GPU, MATLAB提供了产品自动生成CUDA代码从您的模型。s manbetx 845正如你可能知道,深度学习是一个反复的过程,你最有可能需要去这些步骤之间来回很多次因为各种各样的原因,可能带来更多的数据来提高模型精度,或改变的参数在部署之前,您的模型。好消息是,MATLAB提供了在这些步骤之间来回切换的所有工具。
因此,按照标准工作流程,我们今天将看两个演示,这两个演示都将展示您可以在数据上尝试的不同深度学习技术。第一个演示是music generation,它使用LSTM网络架构。Emelei将设计一个能够产生旋律的网络,这样,通过播放一段简短的介绍歌曲,网络将能够根据播放的内容继续播放歌曲。第二个演示是关于严重背景噪声下的语音去噪,它将使用CNN图像。我们将训练一个网络,以便它能够消除或减少输入中的噪声,留下干净的语音信号。
现在,我将把它交给Emelei,他将引导您完成这两个示例。
谢谢你,汉娜。那么,让我们开始第一个演示,音乐一代。我们在网络上训练的数据是一组古老的民歌旋律数据。我们将使用的网络类型称为LSTM。它代表长-短记忆。顾名思义,与几乎所有其他没有时间记忆的神经网络类型相比,网络具有先天记忆。列车网络将被称为folkNet。然后我们将通过播放一首短歌来使用folkNet,并让它跟随。创造一个后续的旋律。
让我们仔细看看这些网络是如何工作的。“我出生在瑞典。我说——“根据上下文,我知道漏掉的单词是瑞典语。lstm是一种递归神经网络。而递归神经网络在进行预测时,会考虑到之前的时间数据。这些类型的网络特别适合于信号、音频、文本和时间序列数据。信息可以通过发送回网络来保存,这些循环可以展开,以便更容易地可视化。
让我们回到这个例子,“我出生在瑞典”,然后我们可以有,比方说,五页的文本。要想让瑞典继续存在,需要比秩序更大的记忆。因此,长-短期记忆网络在这方面非常擅长,因为它们在整个过程中都携带着一个记忆细胞。在我的演示中,我将向您展示在MATLAB中创建这些类型的网络是多么容易。
所以,我们将首先查看我们在此训练有素的神经网络结束时可以创建的内容。在这里,我们有一个钢琴,看起来像这样。此应用程序已在Matlab中创建,在此,我可以录制调整。然后将使用该曲调或旋律来产生更长的后续旋律。我可以在这里改变温度。在这种情况下,温度是一个技术术语,描述了未来曲调如何成为我播放的笔记。因此,较低的温度意味着曲调与我播放的音符相似,更高的温度意味着调谐会从播放的原始笔记中变化更多。让我们离开这件事。我会按REC并开始玩“老麦克唐纳有一个农场”。
现在我会按“让我调整!”我们可以看到它开始产生神经旋律。在Y轴上,我们有音高或纸张。在X轴上,我们有时间在节拍中。所以在红色的颜色中,我们刚刚播放的曲调,蓝色,我们有新的生成曲调。让我们玩曲调。
我就在这里暂停一下。所以,开头听起来不像我们习惯的一个原因是,当我演奏几首曲子时,音符被拉长了。所以我一开始演奏了三个G,它们变成了一个长音,而不是三个节拍。但是很酷。这里我们实际上有一首计算机生成的歌曲。
让我们来看看训练用于生成音乐的网络的脚本。我们将在此脚本中进行的是培训一台辅助预测网络,这是一个网络,它可以在给定当前注释时预测下一个注意。总而言之,网络将学习35个不同的笔记。我将从Melody文件夹中开始阅读民间歌曲数据。如果我去文件夹,我们可以看到数据处于MIDI格式。这是一个在订单和音乐之间沟通的格式。所以基本上,这些文件只是数据。所以没有录制声音。但是计算机可以使用备注等数据播放歌曲。
让我们在MATLAB之外播放其中一个旋律,并让Windows Media Player将MIDI数据转换为声音。
这些是网络将接受培训的颜色类型。您可能会认识到它如何从我们看待应用程序中生成的那种音调的声音。
在下一节中,我们将为从媒体数据中得到的每个数据矩阵创建一个旋律向量。我们还将删除包含和声片段的文件,并删除一些较长的歌曲。总而言之,我们从1034个旋律变成了985个。现在我们有了旋律矢量,但没有预测因素或对模型的反应。
在本节中,我们将通过将985个旋律中的35个不同的音符转换为分类数据类型来创建响应变量。我们将通过为每个音符取一个虚拟变量来创建预测器,这也是处理分类数据的一种方法,但将它保留为数字数据类型。在本节中,我们还将在响应数据旋律的末尾添加一个end令牌。在这种情况下,我们取最高音符加1,也就是89。这给了我们一个非常有趣的特性。现在,火车网络可以自行决定何时完成一首曲子的生成。通过在每一段音乐中添加结束标记,我们基本上是在告诉网络音乐何时结束。
下一节将预测器中的数据和响应划分为培训和验证数据。根据这里的设置,我们留出10%的数据用于测试。因此,训练数据将用于训练网络,测试数据将用于检查新数据上网络的准确性。在这里,我们可以检测数据是否过度拟合到训练集。
现在,我们终于到了设计这个超前LSTM预测器的架构部分。网络中的第一层是序列输入层。这里,我们有数字35,也就是我们的旋律中有多少个音符。在输入层之后,我们将使用两个LSTM层,每个层有250个隐藏单元。这是一个相当武断的选择。然而,我们希望通过包含两个带有适当数量隐藏单元的LSTM层,网络将能够学习足够复杂的行为来学习音乐关系。每个LSTM层之后的dropout层提供了一种防止过拟合的方法。
在这些层之后,我们有一个完全连接的层,顾名思义,它确保层拥有与类数量一样多的注释。在这里,我们有数字35,因为我们有35节课的笔记。这些softmax层——接下来是——输出35个值,它确保这些值在0和1之间。我们可以把它看成是不同类别的概率分布。最后,我们有一个分类层,它只输出概率最高的类。
在下一节中,我们将选择我们将用于培训网络的培训选项。选择ADAM优化算法和1的梯度阈值以稳定训练过程。如果您不熟悉图层选项和培训选项,您可以了解MATLAB文档中的所有图层和培训选项。
现在我们已到达最后一节,我们正在培训网络。我们需要添加的只是X-Train和Y车辆数据,以及我们在层中设置的架构和我们选择的培训选项。作为输出,我们将拥有网络民间文章。在这里,我们可以看到网络培训进展,并且蓝色,我们有准确性,幸运的是。在下面的红色中,我们有多个分类的跨熵损失,这是下降的。这也是好消息。我们希望损失在黑色上移动到0.在黑色中,我们有验证数据结果。使用此,我们可以看出模型是否开始过度装备到培训数据。
所以你们现在看到的这个训练实际上已经加速了好几倍。在现实中,跑步需要的时间要长得多。您可以看到训练集上的性能随着时间的推移而提高。如果我们继续训练,表现会更好。但这并不能保证我们能得到一个能产生好音乐的网络。相反,更有可能的是我们训练了一个与训练集非常相似的网络。
在大约20个时代,我们在验证准确性方面有了一个转折点。我认为这是网络最普遍的地方,因此网络可以合理地预测看不见的作品的音乐性。在这里的角落里,我们有一个台阶按钮。如果我按下此键,我将得到网络权重,因为它们是在我停止训练的那一刻。
所以这是结果。在准确性方面看起来并不伟大,但在这种情况下,我们真的不介意。目标不是训练一个完全再现训练数据的LSTM。相反,目标是训练一个LSTM,它产生合理的探测件。现在,我们已经完成了培训,这是一家已被放入我们的音乐生成钢琴应用程序的网络。所以在这里,我们研究了一个使用深度学习来通过一步预测生成新数据的示例。
我们做的下一件事就是看看深度学习如何用于去代表已经存在的信号。在此演示中,我们将使用卷积神经网络,或者CNNS,而不是使用LSTMS,这正是您将如何在图像上培训网络。所以在这个例子中,我们有人们的音频数据。每个序列的持续时间是句子的长度。要培训Denoiser模型,我们将为清洁语音数据添加洗衣机噪声。噪声扰乱的语音数据将是预测器,我们现在拥有的清洁语音数据将是响应。通过该知识,网络将学习如何去噪不安的信号。
因此,正如我所说,我们将使用为图像输入数据构造的网络类型。但是,现在,我们有音频数据。让我们使用一种常用的技术来从名为谱图的信号数据创建图像。我们将采用清洁数据和嘈杂数据并将其转换为频谱图。谱图是在短片段上的傅里叶变换,也称为短时傅里叶变换。并且这会在一个轴上输出频率,另一个输出频率。我们将采用嘈杂音频的每种谱图,并及时向后移动,以便我们最终以八个连续的频谱图。我们将根据这些频谱图使用图像使用图像训练网络。基本上,这些8×129大小的图像连续八次仅为八个频率向量。预测或估计将基于最新的频率矢量及时。
在我们再次跳转到MATLAB之前,让我们简单看看CNN是如何工作的。在一个非常高的层次上,卷积神经网络就像我们在这里的图像中看到的那样工作。我们有多层,在许多步骤中,我们使用不同大小的滤波器进行卷积。过滤器的第一层学习识别低级特征,例如颜色和非常简单的形状。后面的层将学习识别更高级的功能。
让我们跳回Matlab。我将首先向您展示一个我们可以通过这种去噪网络结束的例子。这是一个应用程序,在这里,我可以选择在这里收听的信号。让我们开始播放噪音信号。
这就是噪音信号的声音。它的信噪比为0分贝,这是原始信号的严重失真。让我们听听去噪后的信号——记住我们要消除的是洗衣机的噪音。
如果第二个弓的红色落在第一个蔬菜上,结果是给出异常宽的弓
因此,这里发生了什么是嘈杂的信号已通过网络,在这里我们拥有网络的输出。我们可以听到洗衣机噪音几乎完全消失。让我们播放清洁的音频数据。
关于彩虹已经形成了许多复杂的观念。
这是我们将用作基本真相的原始声音。我将转到脚本,在脚本中,我们训练执行此去噪的网络。要进行深入学习,我们需要一个相当大的数据集。在“声音数据”文件夹中,我们有121000个MP3格式的声音文件。为了方便地使用这些文件,我们将创建一个数据存储,它基本上是指向数据的指针。数据存储对象非常小——如图所示,只有8个字节。具体来说,这是一个音频数据存储,具有音频特定功能。
接下来,我将选择要使用的数据的子集,这只是1,000个文件。当然,最好使用更大的数据集,但为了时间,我们现在将使用1,000。让我们在数据存储中的1,000中的一个文件中阅读,并将其命名为Cleandaudio。
这个数据是48千赫兹,但8千赫兹就足够了。我们创建一个采样率转换器对象,然后我将对干净的音频文件进行采样,以减少一些计算负载。我们要给这个信号加一些杂音。在这种情况下,它将是洗衣机的噪音。我们在噪声文件中随机选择一个位置,然后计算噪声功率和语音功率,使噪声音频的信噪比为0分贝。正如我之前所说,这是原始信号的严重失真,所以清晰的音频几乎无法分辨。我们来听听这是什么声音。
我会画出我们现在有的两个信号。我们可以在信号中看到很大的不同。神经网络的目标是输入有噪声的音频,输出尽可能接近干净的音频。我在幻灯片中提到过我们将使用一种叫做短时间傅里叶变换的技术,也被称为光谱图,来从音频信号中创建这些图像。让我们定义做我们的光谱图所需的参数。我们将使用长度为256的汉明窗口,重叠窗口长度的75%。在此之后,我们利用我们刚刚定义的所有参数对干净数据和噪声数据的谱图进行短时傅里叶变换。
我们还没有八段频率矩阵。让我们创建。正如我在幻灯片中所展示的,我们只创建了八份声谱图的拷贝,每一份都按一个声谱图的时间步长进行移动。这就是我们创建目标和预测器的方法。
尽管我们在一段时间前创建了数据存储,但我们仍然没有处理所有的数据。现在让我们开始处理我们选择保留的所有1000个文件。要简单地做到这一点,我们将数据存储转换为一个高数组。什么是高数组?“长数组”指的是数组的行数超过了实际内存容量,非常适合大数据集。当我在高数组上执行一组命令时,它们将保持未求值状态,直到我调用gather函数。这种延迟评估使我们能够快速处理大型数据集。当我们最终使用gather请求输出时,MATLAB在可能的地方结合了排队计算,并获取通过数据的最小次数。如果您的计算机中有多个核,这也可以并行执行。
在下一节中,我们将在这个helper函数的一行中完成我们为一个文件所做的整个过程——从读入到获取目标和预测值。直到我们运行gather命令,函数才真正运行。我们可以看到,MATLAB已经确定,我们只需要做一次数据传递,就可以在helper函数中进行计算。现在我们只是对预测值和目标数据进行标准化,这是深度学习中的标准过程。在我们开始训练网络之前,让我们留出数据进行验证,以便能够发现过度拟合。
现在,我们已经谈到了网络架构。如前所述,我们将创建图像输入数据,以便能够利用图像可用的网络类型。让我们开始设计一个卷积神经网络。我可以像这里一样用代码来写,但我也可以用一个叫做Deep Network Designer的应用程序来快速设计。在这个应用程序中,我可以拖放我感兴趣的图层。我将从一个图像输入层开始,它的大小如下——特征的数量,即频率分辨率,为129,时间片段的数量,即8。之后,我抓取一个卷积层,添加一些滤镜设置,比如滤镜的大小和数量。con层之后是标准化层,然后是激活层。
我们重复了孔层,我可以继续复制和复制粘贴应该是相同的。如果我依靠到最后,我们将共有16个整个层。
我们将以回归层结束。计算半均方误差损失。我可以按outer range,以便层对齐整齐,然后我将按analyze,看看架构中是否有任何错误。我得到了三个错误,他们说“缺少输入”和“缺少输出”。我可以看到他们就在网络的开始。如果我回到图上,我可以看到我忘记连接最开始的图层了。我把它们连接起来,再次分析,这一次,一切正常。
总共有这个网络中有48层。并利用我在这里设计的这种体系结构,我将继续前进并按Export。与前面的示例一样,我们将为我们想要培训此模型的方式设置一些培训选项。我们设置了epoch,以便三次通过数据,使每个批处理由128个图像组成。在此之后,我们只需要进行培训。我将插入训练数据,图层和选项。由于这次这是一个回归问题,我们具有以蓝色下降的根均方错误,而不是进行准确性。我们可以看到错误稳步下降,然后在低于4的错误下展开。黑色中的验证数据显示该模型不会过度装备。
现在我们已经有了一个火车网络,可以接受新的数据了。所以让我们读入一个新文件,给它添加一些噪声,然后在网络中运行它。让我们画出干净的演讲,嘈杂的演讲和去噪的演讲。我们可以看到,去噪语音的外观更接近于清晰语音而不是噪声语音。如果我们播放它,我们可以听到它的声音,就像在应用程序中。
因此,您如何使用卷积神经网络创建去噪网络的一个示例。这一切都是我的。
我们希望这个网络研讨会对你有用,在我们的网站上有更多的例子供你探索。有关信号数据的深度学习的更多信息,以及尝试示例,可以访问我们的文档页面。通过这些链接,你可以在MATLAB中了解更多关于机器学习和深度学习的解决方案。万博 尤文图斯谢谢你的倾听。
您还可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。