MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究

全文链接:https://tecdat.cn/?p=38258

在语音处理领域,对语音情感的分类是一个重要的研究方向。本文将介绍如何通过结合二维卷积神经网络(2 - D CNN)和长短期记忆网络(LSTM)构建一个用于语音分类任务的网络,特别是针对语音情感识别这一应用场景。文中将展示相关代码和实验结果,包括数据处理、模型架构定义、训练以及测试等环节,并对重要步骤和结果进行详细阐述和分析**(** 点击文末"阅读原文"获取完整代码数据******** )。

方法

(一)数据准备

  • 数据下载

    本文使用柏林情感语音数据库(Emo - DB)来训练模型。这个数据集包含了由10个演员说出的535个语句,这些语句被标记为愤怒、无聊、厌恶、焦虑/恐惧、快乐、悲伤或中性这七种情感之一。

  • 提取情感标签

    文件名编码了说话者ID、所说文本、情感和版本信息。情感标签的编码如下:"W---愤怒"、"L---无聊"、"E---厌恶"、"A---焦虑/恐惧"、"F---快乐"、"T---悲伤"、"N---中性"。

go 复制代码
filepaths = ads.Files;
\[~,filenames\] = fileparts(filepaths);
emotionLabels = extractBetween(filenames,6,6);

这段代码首先获取audioDatastore对象中所有音频文件的路径,然后提取文件名,并从文件名的第六个字符获取情感标签。

  • 标签转换

    将单字母代码形式的标签替换为描述性标签,并将标签转换为分类数组。

  • 设置标签属性并查看分布

首先将提取并转换后的情感标签设置为audioDatastore对象的Labels属性。然后,通过绘制直方图来查看不同情感类别的数据分布情况。

  • 读取样本、查看波形和试听
go 复制代码
\[audio,info\] = read(ads);
fs = info.SampleRate;
sound(audio,fs)

上述代码从数据存储中读取一个音频样本,获取其采样率,播放该音频。同时,绘制音频的波形图,标题显示其情感类别

  • 数据划分与增强

    将数据划分为训练集、验证集和测试集,其中训练集占70%,验证集和测试集各占15%。

go 复制代码
\[adsTrain,adsValidation,adsTest\] = splitEachLabel(ads,0.70,0.15,0.15);

为了提高模型的拟合能力,在训练数据有限的情况下,可以通过数据增强的方式增加训练数据量。创建一个audioDataAugmenter对象,指定每个文件的增强次数、音高偏移概率、时间偏移概率和范围、添加噪声概率和信噪比范围等参数。

创建一个新文件夹来存储增强后的数据,然后通过循环遍历数据存储和使用音频数据增强器来增强训练数据。对于每个增强样本,进行归一化处理,并将其保存为WAV文件。

最后,创建增强数据的音频数据存储对象,并将其标签设置为原始训练数据标签的重复元素。

go 复制代码
augadsTrain = audioDatastore(agumentedDataFolder);
augadsTrain.Labels = repelem(adsTrain.Labels,augmenter.NumAugmentations,1);
  • 特征提取

    使用audioFeatureExtractor对象从音频数据中提取特征,指定窗口长度、跳跃长度、窗口类型和要提取的频谱类型等参数。

设置特征提取器的参数,包括梅尔频带数量和是否禁用窗口归一化。

使用preprocessAudioData函数从训练集、验证集和测试集中提取特征和标签。

绘制一些训练样本的波形和听觉频谱图,如下代码所示:

go 复制代码
numPlots = 3;
idx = randperm(numel(augadsTrain.Files),numPlots);
f = figure;
f.Position(3) = 2*f.Position(3);

tiledlayout(2,numPlots,TileIndexing = "columnmajor")

结果如训练样本的波形和频谱图所示。同时查看前几个观测值的大小,以确保网络能够支持训练数据,并计算输入层最短序列的长度。


点击标题查阅往期内容

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

左右滑动查看更多

01

02

03

04

(二)模型架构定义

定义二维CNN - LSTM网络,用于预测序列的类别标签,网络结构如下所示:

对于序列输入,指定一个序列输入层,其输入大小与输入数据匹配,并设置MinLength选项为训练数据中最短序列的长度。使用二维CNN架构来学习一维图像序列中的空间关系,包括四个重复的卷积、批量归一化、ReLU和最大池化层块,并逐渐增加第三和第四卷积层的滤波器数量。通过包含一个具有256个隐藏单元的LSTM层来学习一维图像序列中的长期依赖关系,并将OutputMode选项设置为"last",仅输出最后一个时间步。对于分类任务,包含一个全连接层和一个softmax层,最后添加一个分类层。

(三)训练选项指定

使用trainingOptions函数指定训练选项,包括使用Adam优化器、小批量大小、训练轮数、初始学习率、学习率调整策略、L2正则化项、序列填充方向、是否打乱数据、验证频率、是否显示训练进度以及是否在GPU上训练等参数,代码如下:

go 复制代码
miniBatchSize = 32;

options = trainingOptions("adam",...
    MaxEpochs = 3,...
    MiniBatchSize = miniBatchSize,...

模型训练与测试

(一)训练网络

使用trainNetwork函数训练网络,如果没有GPU,训练可能会花费较长时间

(二)测试网络

使用训练好的网络对测试数据进行分类,并通过比较预测结果和真实标签来评估模型的分类准确率。首先,对测试数据进行分类。

然后,通过绘制混淆矩阵来可视化预测结果,代码如下:

go 复制代码
figure
confusionchart(labelsTest,labelsPred)

结果如混淆矩阵图所示。最后,通过计算预测结果和测试标签相同的比例来评估分类准确率,本次实验得到的准确率为0.6329

结论

本文详细介绍了基于二维CNN - LSTM网络的语音情感分类模型的构建、训练和测试过程。通过对柏林情感语音数据库的实验,展示了模型在语音情感分类任务上的性能。虽然取得了一定的准确率,但仍有改进的空间,例如进一步优化数据增强策略、调整模型架构或训练参数等,未来的研究可以在此基础上继续深入。同时,本文中的方法和代码也可以为相关领域的研究人员提供参考和借鉴。

参考文献

1\] Burkhardt, Felix, A. Paeschke, M. Rolfes, Walter F. Sendlmeier, and Benjamin Weiss. "A Database of German Emotional Speech." In Interspeech 2005, 1517--20. ISCA, 2005. https://doi.org/10.21437/Interspeech.2005 - 446. \[2\] Zhao, Jianfeng, Xia Mao, and Lijiang Chen. "Speech Emotion Recognition Using Deep 1D \& 2D CNN LSTM Networks." Biomedical Signal Processing and Control 47 (January 2019): 312--23. https://doi.org/10.1016/j.bspc.2018.08.035. ![10f546ef9ad4149da368ff6cfddb0baa.jpeg](https://img-blog.csdnimg.cn/img_convert/10f546ef9ad4149da368ff6cfddb0baa.jpeg) ##### 本文中**分析的**数据、代码**** 分享到**会员群**,扫描下面二维码即可加群! ![f5317bbeaf9455ffc1eac9562c1cd365.png](https://img-blog.csdnimg.cn/img_convert/f5317bbeaf9455ffc1eac9562c1cd365.png) *** ** * ** *** **资料获取** 在公众号后台回复"**领资料**",可免费获取数据分析、机器学习、深度学习等学习资料。 ![81374dbb7f16538081d13231789f6057.jpeg](https://img-blog.csdnimg.cn/img_convert/81374dbb7f16538081d13231789f6057.jpeg) 点击文末**"阅读原文"** 获取全文完整代码数据资料。 本文选自《MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究》。 **点击标题查阅往期内容** [Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化]() [Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格\|附数据代码]() [R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感]() [Python用CNN-LSTM、ARIMA、Prophet股票价格预测的研究与分析\|附数据代码]() [【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例]() [RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测]() [结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析]() [深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据]() [用PyTorch机器学习神经网络分类预测银行客户流失模型]() [PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据]() [Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化]() [R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化]() [深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据]() [Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析]() [R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列]() [R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感]() [Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化]() [Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析]() [R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告]() [R语言深度学习:用keras神经网络回归模型预测时间序列数据]() [Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类]() [R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)]() [MATLAB中用BP神经网络预测人体脂肪百分比数据]() [Python中用PyTorch机器学习神经网络分类预测银行客户流失模型]() [R语言实现CNN(卷积神经网络)模型进行回归数据分析]() [SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型]() [【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析]() [Python使用神经网络进行简单文本分类]() [R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析]() [R语言基于递归神经网络RNN的温度时间序列预测]() [R语言神经网络模型预测车辆数量时间序列]() [R语言中的BP神经网络模型分析学生成绩]() [matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类]() [R语言实现拟合神经网络预测和结果可视化]() [用R语言实现神经网络预测股票实例]() [使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测]() [python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译]() [用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类]() ![4c34a61758c6ce111d0f5956661bc304.jpeg](https://img-blog.csdnimg.cn/img_convert/4c34a61758c6ce111d0f5956661bc304.jpeg) ![ebf5475ab9671e7349d4a1595ce44100.png](https://img-blog.csdnimg.cn/img_convert/ebf5475ab9671e7349d4a1595ce44100.png) ![63b6b3e0487f3bc84ab600fe9e742b05.png](https://img-blog.csdnimg.cn/img_convert/63b6b3e0487f3bc84ab600fe9e742b05.png) ![eaddd433a22da946090b6ea53d479a11.jpeg](https://img-blog.csdnimg.cn/img_convert/eaddd433a22da946090b6ea53d479a11.jpeg) ![562217c25b0c2acbf1e382fc13fa0d94.png](https://img-blog.csdnimg.cn/img_convert/562217c25b0c2acbf1e382fc13fa0d94.png)

相关推荐
xier_ran10 小时前
深度学习:RMSprop 优化算法详解
人工智能·深度学习·算法
大千AI助手10 小时前
Prefix-Tuning:大语言模型的高效微调新范式
人工智能·神经网络·自然语言处理·llm·prefix-tuning·大千ai助手·前缀微调
哥布林学者11 小时前
吴恩达深度学习课程二: 改善深层神经网络 第三周:超参数调整,批量标准化和编程框架(一)超参数调整
深度学习·ai
qy-ll12 小时前
遥感论文学习
人工智能·深度学习·计算机视觉·gan·遥感·栅格化
G311354227312 小时前
深度学习中适合长期租用的高性价比便宜的GPU云服务器有哪些?
服务器·人工智能·深度学习
8Qi813 小时前
Stable Diffusion详解
人工智能·深度学习·stable diffusion·图像生成
carver w13 小时前
transformer 手写数字识别
人工智能·深度学习·transformer
Dev7z13 小时前
基于Matlab的数字基带通信系统仿真与性能分析
matlab·数字基带通信系统·单极性不归零码·双极性不归零码·单极性归零码·双极性归零码
领航猿1号14 小时前
如何通过神经网络看模型参数量?
人工智能·python·神经网络·大模型参数量
大囚长14 小时前
神经网络AI在人类发明史上的独特性
人工智能·深度学习·神经网络