python keras教程(keras兼容的python)

语音识别是机器或程序识别口语中的单词和短语并将其转换为机器可读格式的能力。通常这些算法的简单实现词汇量有限,可能只能识别单词/短语。然而,更复杂的算法(如云语音转文本和亚马逊转录)的词汇量很大,包含方言、噪音和俚语。
在本文中,我将演示:
语音转文本是如何工作的?要转录的音频怎么处理?使用Keras解决问题的深度学习模型。评估该模型的方法。介绍将预测模型集成到项目中的脚本。言语只是我们的声带引起周围空气的振动而产生的一系列声波。这些声波被麦克风记录下来,然后转换成电信号。然后利用先进的信号处理技术处理信号,分离音节和单词。得益于深度学习令人难以置信的最新进展,计算机也可以从经验中学习理解发音。
语音识别通过使用算法的声学和语言建模来工作。声学建模表示语音的语言单元和音频信号之间的关系;语言建模将声音与单词序列进行匹配,以帮助区分发音相似的单词。通常使用基于循环层的深度学习模型来识别语音中的时间模式,以提高系统中的准确性。也可以使用其他方法,例如隐马尔可夫模型(第一个语音识别算法使用了这种方法)。在本文中,我将只讨论声学模型。
有许多信号处理方法可以将声波转换为算法可以处理的元素,其中一种方法(本教程中使用的方法)是在等距点记录声波的高度:
我们每秒读取数千次,记录一个代表当时声波高度的数字。这是一个未压缩的。wav音频文件。“CD质量”音频的采样频率为44.1 kHz(每秒44,100次读数)。但对于语音识别来说,16khz(每秒16000个样本)的采样率足以覆盖人类语音的频率范围。
通过这种方式,音频由一个数字向量表示,其中每个数字表示声波在1/16000秒间隔内的振幅。这个过程类似于图像预处理,如下例3360所示。
感谢奈奎斯特定理(1933—Vladimir Kotelnikov),我们知道只要采样速度至少是我们想要记录的最高频率的两倍,我们就可以用数学方法从间隔采样中完美地重建原始声波。
Python库为了完成这个任务,我使用了Anaconda环境(Python 3.7)和下面的Python库:
ipython(v 7 . 10 . 2)keras(v 2 . 2 . 4)librosa(v 0 . 7 . 2)scipy(v 1 . 1 . 0)sk learn(v 0 . 20 . 1)sound device(v 0 . 3 . 14)tensor flow(v 1 . 13 . 1)tensor flow-GPU(v 1 . 13 . 1)numpy(v 1 . 17 . 2)从tensorflow.compat.v1导入ConfigProto从tensorflow.compat.v1导入会话数据集我们在实验中使用了TensorFlow提供的语音指令数据集。它由65,000个一秒钟的单词组成,这些单词由成千上万不同的人用30个短单词组成。我们将建立一个语音识别系统,它可以理解简单的语音命令。可以从这里下载数据集(https://www . ka ggle . com/c/tensor flow-speech-recognition-challenge)。
2.预处理音频波在使用的数据集中,有些记录的持续时间不到1秒,采样率过高。所以,我们来读一下声波,用下面的预处理步骤来解决这个问题。这是我们将执行的两个步骤:
不到1秒钟的重新采样和删除短命令。让我们在下面的Python代码片段中定义这些预处理步骤:
train_audio_path=’ ./train/audio/’ all _ wave=[]all _ label=[]for labels : print(label)waves=[f for f in OS。list dir(train _ audio _ path ‘/’ label)如果f .以(‘ .wav’)]对于waves:样本中的wav,sample_rate=librosa。load(train _ audio _ path ‘/’ label ‘/’ wav,Sr=16000)samples=librosa。如果(len(samples)==8000): all _ wave,则重新采样(samples,sample _ rate,8000)。追加(样本)全部_标签。追加(标签)由上可知,信号的采样率为16000赫兹。我们把它重采样到8000赫兹,因为大多数语音相关的频率都在8000赫兹。
第二步是处理我们的标签,这里我们将输出标签转换为整数编码,将整数编码标签转换为一个热点向量,因为这是一个多目标问题:
从sk学习。预处理从keras导入LabelEncoderfrom。utils导入NP _ utilslabel _ enconder=label enconder()y=label _ enconder。fit _ transform(all _ label)classes=list(label _ enconder。classes _)y=NP _ utils。to _ categorial(y,num_classes=len(标签))预处理步骤的最后一步是将2D数组使再成形为3D,因为conv1d的输入必须是三维(三维的缩写)数组:
全波=np.array(全波).整形(-1,8000,1)3。创建训练和验证集为了执行我们的深度学习模型,我们将需要生成两个集合(训练和验证)。对于此实验,我使用80%的数据训练模型,并在其余20%的数据上进行验证:
从sklearn.model_selection导入train_test_splitx_train,x_valid,y_train,y _ valid=train _ test _ split(NP。array(all _ wave),np.array(y),stratify=y,test_size=0.2,random_state=777,shuffle=True)4。机器学习模型架构我使用Conv1d和苏军总参谋部情报总局层来建模用于语音识别的网络10 .conv 1d是一个仅在一维上进行卷积的卷积神经网络,而苏军总参谋部情报总局的目标是解决标准循环神经网络的梯度消失问题106 .苏军总参谋部情报总局也可以看作是长短期记忆网络的一个变体,因为两者的设计相似,在某些情况下,可以产生同样优秀的结果。
该模型基于深度演讲p和wav2字母算法这两种著名的语音识别方法。下面的代码演示了使用克拉斯提出的模型:
从keras .层导入双向、BatchNormalization、CuDNNGRU、时间分布来自keras。层导入密集,dropool,Flatten,Conv1D,Input,maxpooling 1来自keras的D1。模型导入模型从keras.callbacks导入早期停止,模型检查点自从深度学习导入后端作为kk。clear _ session()inputs=Input(shape=(8000,1))x=批量规范化(axis=-1,momentum=0.99,epsilon=1e-3,center=True,scale=True)(inputs)# merge _ mode=’ sum ‘)(x)x=双向(CuDNNGRU(128,return_sequences=True),merge_mode=’sum’)(x)x=双向(CuDNNGRU(128,return_sequences=False),merge _ mode=’ sum ‘)(x)x=批量归一化(axis=-1,momentum=0.99,epsilon=1e-3,center=True,scale=True)(x)# Flatten Layer # x=Flatten()(x)# Dense Layer 1x=Dense(256,activation注意:如果仅使用中央处理器来训练此模型,请用苏军总参谋部情报总局替换CuDNNGRU层。
下一步是将损失函数定义为分类交叉熵,因为它是一个多类分类问题:
模型。编译(loss=’ category _ cross entropy ‘,optimizer=’nadam ‘,metrics=[‘accuracy’])提前停止和模型检查点是回调,以在适当的时间停止训练神经网络并在每个世后保存最佳模型:
early _ stop=提前停止(monitor=’ val _ loss ‘,mode=’min ‘,verbose=1,patience=10,min _ delta=0.0001)check point=model check point(‘ speec text _ model。HD F5 ‘,monitor=’val_acc ‘,verbose=1,save_best_only=True,mode=’max ‘)让我们在32的批量上训练机器学习模型,并评估保留集上的性能:
hist=model.fit( x=x_train,y=y_train,epochs=100,回调=[提前停止,检查点],batch_size=32,validation_data=(x_valid,y_valid))该命令的输出为:
5.可视化我将依靠可视化来了解机器学习模型在一段时间内的性能:
从绘制精美的图表导入pyplotpyplot。情节(历史。history[‘ loss ‘],label=’ train ‘)pyplot。情节(历史。历史[‘ val _ loss ‘],label=’ test ‘)pyplot。图例()pyplot。显示()6。预测在这一步中,我们将加载最佳的权重,并定义识别音频和将其转换为文本的函数:
从keras.models导入load _ model model=load _ model(‘ speec text _ model。HD F5’)def s2t _ predict(audio,shape _ num=8000): prob=model。预测(音频。shape _ num,1)) index=np.argmax(prob[0])返回类[索引]对验证数据进行预测:
导入随机索引=随机。randint(0,len(x _ valid)-1)samples=x _ valid[index].拉威尔()打印(‘音频: ‘,类[NP。arg max(y _ valid[index])IPD .音频(样本,速率=8000)这是一个提示用户录制语音命令的脚本。可以录制自己的语音命令,并在机器学习模型上测试:
导入声音设备为s导入声音文件为SF samplerate=16000持续时间=1 #秒filename=’ yes。wav ‘ print(‘ start ‘)mydata=SD。rec(int(采样速率*持续时间),samplerate=samplerate,channels=1,blocking=True)print(‘ end ‘)SD。等待()SF。写(文件名我的数据,采样率)最后,我们创建一个脚本来读取保存的语音命令并将其转换为文本:
#读取语音命令test,test_rate=librosa.load(‘ ./test/left.wav ‘,Sr=16000)test _ sample=librosa。重采样(测试,测试速率,4351)打印(测试样本。形状)IPD .音频(测试样本,速率=8000)#将语音命令转换为文本2t_predict(测试_样本)最后语音识别技术已经成为我们日常生活的一部分,但目前仍局限于相对简单的命令。随着技术的进步,研究人员将能够创造出更多能够理解会话语音的智能系统。

其他教程

二年级语文快乐闯关(二年级语文闯关测试卷答案)

2022-9-10 4:27:00

其他教程

剪辑花屏素材(剪辑花屏图片)

2022-9-10 4:29:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索