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

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

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

方法

(一)数据准备

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

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

filepaths = ads.Files;
\[~,filenames\] = fileparts(filepaths);
emotionLabels = extractBetween(filenames,6,6);

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

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

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

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

1a092d90adc06b3425fe01db95565fce.png

  • 读取样本、查看波形和试听

\[audio,info\] = read(ads);
fs = info.SampleRate;
sound(audio,fs)

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

ccafa60e2496b3b8bf5a3d9b1ab35092.png

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

\[adsTrain,adsValidation,adsTest\] = splitEachLabel(ads,0.70,0.15,0.15);

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

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

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

augadsTrain = audioDatastore(agumentedDataFolder);
augadsTrain.Labels = repelem(adsTrain.Labels,augmenter.NumAugmentations,1);
  • 特征提取
    使用audioFeatureExtractor对象从音频数据中提取特征,指定窗口长度、跳跃长度、窗口类型和要提取的频谱类型等参数。

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

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

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

numPlots = 3;
idx = randperm(numel(augadsTrain.Files),numPlots);
f = figure;
f.Position(3) = 2*f.Position(3);tiledlayout(2,numPlots,TileIndexing = "columnmajor")

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

6f4ca3d54e885c1df3827e701e75e893.png


点击标题查阅往期内容

3026198466cd4b36346c9649422de25f.jpeg

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

outside_default.png

左右滑动查看更多

outside_default.png

01

5287da2e9e680edb893d8209e018a820.png

02

e97108cea0fa2100cd33e174995248a1.png

03

bda322f1dd749ff8401adbd530abbdcf.png

04

f4172c152d48561648694f602e640872.png

(二)模型架构定义

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

3a08581f112c777decbf3ae4e9dde9d6.png

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

(三)训练选项指定

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

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

模型训练与测试

(一)训练网络

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

(二)测试网络

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

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

figure
confusionchart(labelsTest,labelsPred)

f38374d789be33ebc78c8ff49d55b547.png

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

本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 

f5317bbeaf9455ffc1eac9562c1cd365.png


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

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

ebf5475ab9671e7349d4a1595ce44100.png

63b6b3e0487f3bc84ab600fe9e742b05.png

eaddd433a22da946090b6ea53d479a11.jpeg

562217c25b0c2acbf1e382fc13fa0d94.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android笔记(三十七):封装一个RecyclerView Item曝光工具——用于埋点上报

背景 项目中首页列表页需要统计每个item的曝光情况,给产品运营提供数据报表分析用户行为,于是封装了一个通用的列表Item曝光工具,方便曝光埋点上报 源码分析 核心就是监听RecyclerView的滚动,在滚动状态为SCROLL_STATE_IDLE的时…

使用视频提升应用在 App Store 中的推广效果

App Store 上有485 万个应用和游戏。每个应用开发者都知道,要在如此庞大的市场中脱颖而出,吸引宝贵的用户眼球,是多么困难。 您需要在应用推广游戏中尝试一些不同的东西,那就是视频预览。这些短小的电影奇迹已经成为应用营销人员…

Minikube 上安装 Argo Workflow

文章目录 步骤 1:启动 Minikube 集群步骤 2:安装Argo Workflow步骤 3:访问UI创建流水线任务参考 前提条件: Minikube:确保你已经安装并启动了 Minikube。 kubectl:确保你已经安装并配置了 kubectl&#xff…

关于做完 C# 项目的问题总结

1. .Any()方法使用 可以与其他LINQ方法结合使用&#xff0c;以构建更复杂的查询。例如&#xff0c;你可以首先过滤集合&#xff0c;然后检查过滤后的集合是否包含任何元素&#xff1a; List<string> fruits new List<string> { "Apple", "Banana&q…

Vue实现响应式导航菜单:桌面端导航栏 + 移动端抽屉式菜单

在现代Web开发中&#xff0c;为了提升用户体验&#xff0c;响应式设计已成为必备技能。本文将通过Vue.js&#xff0c;创建一个响应式导航菜单&#xff0c;桌面端显示顶部导航栏&#xff0c;移动端则切换为抽屉式菜单&#xff0c;并具备点击遮罩关闭的功能。以下是具体实现步骤。…

GCP Cloud Storage 的lock retention policy是什么

简介 Google Cloud Storage 的锁定保留策略&#xff08;Lock Retention Policy&#xff09;是一种用于保护存储桶中对象数据的功能。它允许用户设置一个保留期&#xff0c;在此期间对象不能被删除或覆盖。这对于确保数据的长期保留和合规性非常重要&#xff0c;尤其是在需要满…

STM32设计防丢防摔智能行李箱

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展&#xff0c;嵌入式系统、物联网技术、智能设备…

CSP/信奥赛C++语法基础刷题训练(11):洛谷P5743:猴子吃桃

CSP/信奥赛C语法基础刷题训练&#xff08;11&#xff09;&#xff1a;洛谷P5743&#xff1a;猴子吃桃 题目描述 一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半&#xff0c;又贪嘴多吃了一个&#xff1b;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 n n n…

控制器ThinkPHP6

五、控制器中对数组值的返回 在做接口服务时&#xff0c;很多时候回使用数组作为返回值&#xff0c;那么数组如何返回成 json呢&#xff1f; 在 tp6 中返回json 很简单&#xff0c;直接使用 json 进行返回即可&#xff0c;例如&#xff1a; public function index(){$resarra…

洛谷刷题日记||基础篇8

#include <iostream> #include <vector> using namespace std;int N, M; // N为行数&#xff0c;M为列数 vector<vector<char>> field; // 表示田地的网格&#xff0c;每个元素是W或. vector<vector<bool>> visited; // 用来记录网格是否访…

随机森林(Random Forest, RF)筛选回归数据(处理异常值)

下面是一个完整的 MATLAB 代码示例&#xff0c;用于实现随机森林&#xff08;Random Forest, RF&#xff09;回归&#xff0c;执行 5 折交叉验证&#xff0c;并根据预测误差删除误差较大的行&#xff0c;将处理后的数据保存为新的 Excel 文件。 % 导入数据 data readmatrix(d…

Qwen2.5-3B-Instruct-GGUF部署

注册账号&#xff1a; 魔搭社区 等一会&#xff1a; 部署好了&#xff1a; 立即使用&#xff1a; 您部署的服务提供OpenAI API接口&#xff0c;可通过OpenAI SDK进行调用。请确保您的服务处于正常运行状态&#xff0c;并预先安装OpenAI SDK: pip install openai 在本地新建…

微信小程序进行md5加密 ,base64 转码

封装一个Md5加密的工具 &#xff1a; utils /md5.js function md5(string) { function md5_RotateLeft(lValue, iShiftBits) { return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); } function md5_AddUnsigned(lX, lY) { var lX4, lY4, l…

服务器虚拟化技术深度解析及代码应用案例

服务器虚拟化技术深度解析及代码应用案例 在现代数据中心和云计算环境中&#xff0c;服务器虚拟化技术已经成为提高资源利用率、降低成本和简化管理的重要手段。本文将详细介绍服务器虚拟化的基本概念、主要类型、技术特性、应用优势&#xff0c;并通过一个基于Golang的容器化…

深入解析Python中的逻辑回归:从入门到精通

引言 在数据科学领域&#xff0c;逻辑回归&#xff08;Logistic Regression&#xff09;是一个非常重要的算法&#xff0c;它不仅用于二分类问题&#xff0c;还可以通过一些技巧扩展到多分类问题。逻辑回归因其简单、高效且易于解释的特点&#xff0c;在金融、医疗、广告等多个…

恶意PDF文档分析记录

0x1 PDF是什么 PDF&#xff08;便携式文件格式&#xff0c;Portable Document Format&#xff09;是由Adobe Systems在1993年用於文件交换所发展出的文件格式。 因为PDF的文件格式性质广泛用于商业办公&#xff0c;引起众多攻击者对其开展技术研究&#xff0c;在一些APT&#…

Spring-事务学习

spring事务 1. 什么是事务? 事务其实是一个并发控制单位&#xff0c;是用户定义的一个操作序列&#xff0c;这些操作要么全部完成&#xff0c;要不全部不完成&#xff0c;是一个不可分割的工作单位。事务有 ACID 四个特性&#xff0c;即&#xff1a; 原子性&#xff08;Atom…

CVE-2024-2961漏洞的简单学习

简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞&#xff0c;实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响&#xff1…

[Kotlin标准函数] run、with、apply、also、let、use等

文章目录 1. let2. with2.1 参数解析2.2 用法示例 3、use函数 1. let 2. with 2.1 参数解析 第一个参数可以是一个任意类型的对象&#xff0c; 第二个参数是一个Lambda表达式 with函数会在Lambda表达式中提供第一个参数对象的上下文&#xff0c; 并使用Lambda表达式中的最后…

2024山西省网络建设运维第十八届职业院校技能大赛解析答案(3. ansible 服务)

\3. ansible 服务 任务描述:请采用ansible,实现自动化运维。 (1)在Server2上安装系统自带的ansible-core,作为ansible 控制节 点。Linux1-linux7 作为 ansible 的受控节点。 (2)编写/root/resolv.yml 剧本,实现在所有linux主机的 /etc/resolv.conf文件,文件内容均…