高端网站建设电话,公司网站建设意见和建议,免费网络电话无限打不用充值,合川网站优化目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建3. 模型训练及保存4. 模型生成 系统测试1. 训练准确率2. 测试效果 相关其它博客工程源代码下载其它资料下载 前言
博主前段时间发布了一篇有关方言识别和分类模型训练的博客#xff… 目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建3. 模型训练及保存4. 模型生成 系统测试1. 训练准确率2. 测试效果 相关其它博客工程源代码下载其它资料下载 前言
博主前段时间发布了一篇有关方言识别和分类模型训练的博客在读者的反馈中发现许多小伙伴对方言的辨识和分类表现出浓厚兴趣。鉴于此博主决定专门撰写一篇关于方言分类的博客以满足读者对这一主题的进一步了解和探索的需求。上篇博客可参考
《基于PythonWaveNetCTCTensorflow智能语音识别与方言分类—深度学习算法应用含全部工程源码》
引言
本项目以科大讯飞提供的数据集为基础通过特征筛选和提取的过程选用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, sr16000):audio np.memmap(path, dtypeh, moder)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, numcepmfcc_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, paddingpost, value0.0)
print(X_data.shape)
#预测方言种类并输出
prob model.predict(X_data)
prob np.mean(prob, axis0)
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(locupperright)
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(locupper 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]
labelpath.split(/)[1]
print(label,path)
pathsglob.glob(D:/课堂导读/信息系统设计/方言种类分类/data/*/dev/*/*.pcm)
#预测方言种类并输出
probmodel.predict(X_data)
prob np.mean(prob,axis0)
pred np.argmax(prob)
prob prob[pred]
pred id2class[pred]
print(True:,label)
print(Pred:, pred, Confidence:, prob)在PyCharm上编辑运行得到的分类结果与语音片段一致如图所示。 相关其它博客
基于PythonWaveNetMFCCTensorflow智能方言分类—深度学习算法应用含全部工程源码一
基于PythonWaveNetMFCCTensorflow智能方言分类—深度学习算法应用含全部工程源码二
基于PythonWaveNetMFCCTensorflow智能方言分类—深度学习算法应用含全部工程源码三
工程源代码下载
详见本人博客资源下载页 其它资料下载
如果大家想继续了解人工智能相关学习路线和知识体系欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线所有资料免关注免套路直接网盘下载》 这篇博客参考了Github知名开源平台AI技术平台以及相关领域专家DatawhaleApacheCNAI有道和黄海广博士等约有近100G相关资料希望能帮助到所有小伙伴们。