基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(四)

目录

  • 前言
  • 引言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
  • 模块实现
    • 1. 数据预处理
    • 2. 模型构建
    • 3. 模型训练及保存
    • 4. 模型生成
  • 系统测试
    • 1. 训练准确率
    • 2. 测试效果
  • 相关其它博客
  • 工程源代码下载
  • 其它资料下载


在这里插入图片描述

前言

博主前段时间发布了一篇有关方言识别和分类模型训练的博客,在读者的反馈中发现许多小伙伴对方言的辨识和分类表现出浓厚兴趣。鉴于此,博主决定专门撰写一篇关于方言分类的博客,以满足读者对这一主题的进一步了解和探索的需求。上篇博客可参考:

《基于Python+WaveNet+CTC+Tensorflow智能语音识别与方言分类—深度学习算法应用(含全部工程源码)》

引言

本项目以科大讯飞提供的数据集为基础,通过特征筛选和提取的过程,选用WaveNet模型进行训练。旨在通过语音的梅尔频率倒谱系数(MFCC)特征,建立方言和相应类别之间的映射关系,解决方言分类问题。

首先,项目从科大讯飞提供的数据集中进行了特征筛选和提取。包括对语音信号的分析,提取出最能代表语音特征的MFCC,为模型训练提供有力支持。

其次,选择了WaveNet模型进行训练。WaveNet模型是一种序列生成器,用于语音建模,在语音合成的声学建模中,可以直接学习采样值序列的映射,通过先前的信号序列预测下一个时刻点值的深度神经网络模型,具有自回归的特点。

在训练过程中,利用语音的MFCC特征,建立了方言和相应类别之间的映射关系。这样,模型能够识别和分类输入语音的方言,并将其划分到相应的类别中。

最终,通过这个项目,实现了方言分类问题的解决方案。这对于语音识别、语音助手等领域具有实际应用的潜力,也有助于保护和传承各地区的语言文化。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述

运行环境

本部分包括Python环境、TensorFlow环境、JupyterNotebook环境、PyCharm环境。

详见博客。

模块实现

本项目包括4个模块:数据预处理、模型构建、模型训练及保存、模型生成。下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

本部分包括数据介绍、数据测试和数据处理。

详见博客。

2. 模型构建

数据加载进模型之后,需要定义模型结构并优化损失函数。

详见博客。

3. 模型训练及保存

本部分包括模型训练、模型保存和映射保存。

详见博客。

4. 模型生成

将训练好的.h5模型文件放入总目录下:信息系统设计方言种类识别/fangyan.h5

相关代码如下:

#打开映射
with open('resources.pkl', 'rb') as fr:[class2id, id2class, mfcc_mean, mfcc_std] = pickle.load(fr)
model = load_model('fangyan.h5')
#glob()提取路径参数
paths = glob.glob('data/*/dev/*/*/*.pcm')

将保存的方言和种类之间映射关系.pkl文件放到总文件目录下:信息系统设计/方言种类识别/resources.pkl。相关代码如下:

#打开保存的方言和种类之间的映射
with open('resources.pkl', 'rb') as fr:[class2id, id2class, mfcc_mean, mfcc_std] = pickle.load(fr)

在单机上加载训练好的模型,随机选择一条语音进行分类。新建测试主运行文件main.py,加载库之后,调用生成的模型文件获得预测结果。

相关代码如下:

#glob()提取路径参数
paths = glob.glob('data/*/dev/*/*/*.pcm')
#通过random模块随机提取一条语音数据
path = np.random.choice(paths, 1)[0]
label = path.split('/')[1]
print(label, path)
#本部分的相关代码
# -*- coding:utf-8 -*-
import numpy as np
from keras.models import load_model
from keras.preprocessing.sequence import pad_sequences
import librosa
from python_speech_features import mfcc
import pickle
import wave
import glob
#打开映射
with open('resources.pkl', 'rb') as fr:[class2id, id2class, mfcc_mean, mfcc_std] = pickle.load(fr)
model = load_model('fangyan.h5')
#glob()提取路径参数
paths = glob.glob('data/*/dev/*/*/*.pcm')
#通过random模块随机提取一条语音数据
path = np.random.choice(paths, 1)[0]
label = path.split('/')[1]
print(label, path)
#语音分片处理
mfcc_dim = 13
sr = 16000
min_length = 1 * sr
slice_length = 3 * sr
#提取语音信号的参数
def load_and_trim(path, sr=16000):audio = np.memmap(path, dtype='h', mode='r')audio = audio[2000:-2000]audio = audio.astype(np.float32)energy = librosa.feature.rmse(audio)frames = np.nonzero(energy >= np.max(energy) / 5)indices = librosa.core.frames_to_samples(frames)[1]audio = audio[indices[0]:indices[-1]] if indices.size else audio[0:0]slices = []for i in range(0, audio.shape[0], slice_length):s = audio[i: i + slice_length]slices.append(s)return audio, slices
#提取MFCC特征进行测试
audio, slices = load_and_trim(path)
X_data = [mfcc(s, sr, numcep=mfcc_dim) for s in slices]
X_data = [(x - mfcc_mean) / (mfcc_std + 1e-14) for x in X_data]
maxlen = np.max([x.shape[0] for x in X_data])
X_data = pad_sequences(X_data, maxlen, 'float32', padding='post', value=0.0)
print(X_data.shape)
#预测方言种类并输出
prob = model.predict(X_data)
prob = np.mean(prob, axis=0)
pred = np.argmax(prob)
prob = prob[pred]
pred = id2class[pred]
print('True:', label)
print('Pred:', pred, 'Confidence:', prob)

系统测试

本部分包括训练准确率及测试效果。

1. 训练准确率

绘制损失函数曲线和准确率曲线,经过10轮训练后,准确率将近100%,验证集准确率在89%左右。相关代码如下:

train_loss = history.history['loss']
valid_loss = history.history['val_loss']
plt.plot(train_loss,label='训练集')
plt.plot(valid_loss,label='验证集')
plt.legend(loc='upperright')
plt.xlabel('迭代次数')
plt.ylabel('损失')
plt.show()
#训练损失
#验证损失
#绘图
train acc = history.history['acc']
valid_acc = history.history['val_acc']
plt.plot(train_acc,label='训练集')
plt.plot(valid acc,label='验证集')
plt.legend(loc='upper right')
plt.xlabel('迭代次数')
plt.ylabel('准确率')
plt.show()

随着训练次数的增多,模型在训练数据、测试数据上的损失和准确率逐渐收敛,最终趋于稳定,如图3和图4所示。

在这里插入图片描述

图3 损失函数曲线

在这里插入图片描述

图4 准确率曲线

2. 测试效果

在本地服务器端进行测试,使用PyCharm调用保存的模型和映射。设置PyCharm运行环境,找到本地Python环境并导入,如图所示。

在这里插入图片描述

从本地随机抽取一段语音进行测试,相关代码如下:

#glob()提取路径参数
paths = glob.glob('data/*/dev/*/*/* / .pcm')
#通过 random模块随机提取一条语音数据
path = np.random.choice(paths, 1)[0]
label=path.split('/')[1]
print(label,path)
paths=glob.glob('D:/课堂导读/信息系统设计/方言种类分类/data/*/dev/*/*.pcm')
#预测方言种类并输出
prob=model.predict(X_data)
prob = np.mean(prob,axis=0)
pred = np.argmax(prob)
prob = prob[pred]
pred = id2class[pred]
print('True:',label)
print('Pred:', pred, 'Confidence:', prob)

在PyCharm上编辑运行,得到的分类结果与语音片段一致,如图所示。

在这里插入图片描述

相关其它博客

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(一)

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(二)

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(三)

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

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

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

相关文章

蓝桥杯小白赛第一场(1~6)(期望DP)

1、模拟 2、贪心 3、前缀和 4、猜结论 5、双指针 6、期望DP 1. 蘑菇炸弹 思路&#xff1a;一个简单的暴力模拟。 #include <bits/stdc.h> using namespace std; int main() {int n;cin >> n;vector<int>a(n , 0);for(int i 0 ; i < n ; i )cin &…

智能优化算法应用:基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.群居蜘蛛算法4.实验参数设定5.算法结果6.…

Linux---Ubuntu操作系统

1. Ubuntu操作系统的介绍 Ubuntu操作系统是属于Linux操作系统中的一种&#xff0c;它是免费、稳定又可以拥有绚丽界面的一个操作系统 2. Ubuntu图形界面的介绍 任务栏 窗口操作按钮 窗口菜单条 任务栏效果图: 窗口操作按钮效果图: 窗口菜单条效果图: 3. 与Windows目录结…

嵌入式系统复习--ARM技术概述

文章目录 上一篇ARM体系结构Thumb技术介绍ARM处理器工作状态ARM的异常响应过程ARM存储器接口及存储器层次下一篇 上一篇 嵌入式系统复习–概述 ARM体系结构 ARM体系结构的技术特征 ARM的体系结构采用了若干Berkeley RISC处理器的特征 Load/store体系结构固定的32为指令3地址…

django-path函数使用

django.urls.path 是 Django 中用于定义 URL 映射规则的函数之一。它用于创建 URL 模式&#xff0c;将请求的 URL 映射到相应的视图函数或处理器。 基本语法 path(route, view, kwargsNone, nameNone)route: 字符串&#xff0c;表示 URL 的路径。可以包含转换器&#xff08;如…

LSTM 双向 Bi-LSTM

目录 一.Bi-LSTM介绍 二.Bi-LSTM结构 Bi-LSTM 代码实例 一.Bi-LSTM介绍 由于LSTM只能从序列里由前往后预测,为了既能够从前往后预测,也能从后往前预测,Bi-LSTM便被发明了出来。简单来说,BiLSTM就是由前向LSTM与后向LSTM组合而成。 二.Bi-LSTM结构 转自:

5. PyTorch——数据处理模块

1.数据加载 在PyTorch中&#xff0c;数据加载可通过自定义的数据集对象。数据集对象被抽象为Dataset类&#xff0c;实现自定义的数据集需要继承Dataset&#xff0c;并实现两个Python魔法方法&#xff1a; __getitem__&#xff1a;返回一条数据&#xff0c;或一个样本。obj[in…

ros的slam建图和导航(含工作空间)

工作空间的结构 准备工作 创建工作空间&#xff08;ros_zy&#xff09; mkdir ros_zy进入工作空间 cd ros_zy创建src文件夹&#xff08;放源程序&#xff09; mkdir src编译工作空间 catkin_make打开vscode&#xff08;从终端打开此工程&#xff09; code .进入工作空间的…

分页存储管理

页框和页面 将内存空间分为一个个大小相等的分区 (比如:每个分区4KB)&#xff0c;每个分区就是一个“页框”(页框页内存块物理块物理页面)。每个页框有一个编号&#xff0c;即“页框号”(页框号页帧号内存块号物理块号物理页号)&#xff0c;页框号从0开始。 为了将各个进程的数…

Android iOS - Android Studio/Xcode历史版本下载

现在搜索Android studio下载&#xff0c;都是最新版本或者几个给定的版本&#xff0c;想去下载更多的版本&#xff0c;找起来很麻烦&#xff0c;很不友好&#xff0c;最近发现了一个博主的文章很不错&#xff0c;在此记录分享一下。 Android & iOS - Android Studio/Xcode…

总结MySQL 的一些知识点:MySQL 运算符

目录 MySQL 运算符 算术运算符 比较运算符 逻辑运算符 位运算符 运算符优先级 MySQL 运算符 本章节我们主要介绍 MySQL 的运算符及运算符的优先级。 MySQL 主要有以下几种运算符&#xff1a; 算术运算符比较运算符逻辑运算符位运算符 算术运算符 MySQL 支持的算术运算符…

LeetCode(56)两数相加【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 两数相加 1.题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和…

Word插件-好用的插件-批量插入图片-大珩助手

现有100张图片&#xff0c;需要批量插入word中&#xff0c;并在word中以每页6张图片的形式呈现&#xff0c;请问怎样做&#xff1f; 使用word大珩助手&#xff0c;多媒体-插入图片&#xff0c;根据图片的长宽&#xff0c;选择连续图片、一行2个图或一行3个图&#xff0c;可一次…

Java EE 多线程之 JUC

文章目录 1. Callable 接口2. ReentrantLock3. 信号量4. CountDownLatch JUC这里就是指&#xff08;java.util.concurrent&#xff09; concurrent 就是并发的意思 这个包里的内容&#xff0c;主要就是一些多线程相关的组件 1. Callable 接口 Callable 也是一种创建线程的方式…

BeautifulSoup学习

前期准备&#xff1a; pip install bs4 pip install lxml bs解析器 从上面的表格可以看出&#xff0c;lxml解析器可以解析HTML和XML文档&#xff0c;并且速度快&#xff0c;容错能力强&#xff0c;所有推荐使用它。 节点选择器 获取名称 soup BeautifulSoup(<b class&…

java面试题-SpringMVC工作原理

远离八股文&#xff0c;面试大白话&#xff0c;通俗且易懂 看完后试着用自己的话复述出来。有问题请指出&#xff0c;有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来&#xff0c;大家一起解决。 java面试题汇总-目录-持续更新中 这个面试题前几年Sprin…

计算机毕业设计 基于SpringBoot的乡村政务办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

持续集成交付CICD:Jenkins流水线操作Harbor仓库

目录 一、实验 1.Jenkins主节点安装Docker 2.Jenkins主节点安装Harbor 3.Jenkins从节点安装Docker 4.Jenkins流水线操作Harbor仓库 二、问题 1.Jenkins主节点登录Harbor仓库报错 2.Jenkins流水线里从节点操作docker报错 3.Jenkins流水线里从节点远程登录Harbor仓库报错…

thinkphp 使用array_reduce 处理返回的数据格式

我想要的效果&#xff1a; 不使用array_reduce 的效果 &#xff1a; 代码&#xff1a; public function teamList($userId,$good_id){$nowbuyers $this->order->where(good_id,$good_id)->count();$data GroupTotalOrder::alias(t_order)->where(merchant_Id,$u…

Jmeter性能测试:ForEach控制器的用法解析(含视频讲解)

引言 最近我在进行JMeter性能测试时遇到了一些问题&#xff0c;特别是在使用ForEach控制器时感到有点棘手。 但是经过不断地摸索和实践&#xff0c;终于成功地掌握了这个神奇的工具&#xff0c;提高了我的测试效率。因此&#xff0c;今天我想和大家分享我的经验&#xff0c;让…