如何用tensorflow做语音识别开发一个简单的语音识别器

使用TensorFlow创建自己的手写识别引擎
本文为数盟原创译文,转载请注明出处为“数盟社区”。这篇文章介绍了使用TensorFlow创建自己的手写识别引擎的简单方法。在这里作为示例示出的项目。完整的源代码可以登录GitHub /niektemme/tensorflow-mnist-predict/介绍我正在进行一篇机器学习的文章的写作。现在写这个话题就难以忽视TensorFlow,一个由谷歌开源的深刻学习引擎。深度学习是机器学习的一个分支,它使用人脑的概念中的神经网络的形式去解决各种问题,例如图象和语音识别(图像1)。这是一个很难用“传统”计算机解决的问题:用一台计算机作为一个大的计算器。--Image 1: Deep Neural Network (source: Google)TensorFlow是由谷歌创建的这个事实给了它很大的牵引力,尤其在我使用的网站技术中。为了了解更多关于TensorFlow的内容,我参加了阿姆斯特丹当地的“咖啡与编码”聚会,他们主持了“亲身参与TensorFlow”的活动。在聚会中我们尝试从TensorFlow网站的教程来开展体验。该教程本身是明确的,写得很好。在我看来,似乎这些例子主要集中在构建和验证模型,但使用创建的模型并不是一个优先事项。一个例外是“图像识别”的例子。但是,更复杂的例子之一是,如果你不是一个机器学习专家那就会更难去使用。通过搜索互联网,可能甚至要从创建TensorFlow的同一公司中使用某种AI,我发现更多的人试图寻找如何将所创建的模型应用到解决实际问题中去。
Ctrl+D&将本页面保存为书签,全面了解最新资讯,方便快捷。极客学院团队出品 · 更新于
TensorFlow 官方文档中文版
你正在阅读的项目可能会比 Android 系统更加深远地影响着世界!
日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译。
机器学习作为人工智能的一种类型,可以让软件根据大量的数据来对未来的情况进行阐述或预判。如今,领先的科技巨头无不在机器学习下予以极大投入。Facebook、苹果、微软,甚至国内的百度。Google 自然也在其中。「TensorFlow」是 Google 多年以来内部的机器学习系统。如今,Google 正在将此系统成为开源系统,并将此系统的参数公布给业界工程师、学者和拥有大量编程能力的技术人员,这意味着什么呢?
打个不太恰当的比喻,如今 Google 对待 TensorFlow 系统,有点类似于该公司对待旗下移动操作系统 Android。如果更多的数据科学家开始使用 Google 的系统来从事机器学习方面的研究,那么这将有利于 Google 对日益发展的机器学习行业拥有更多的主导权。
为了让国内的技术人员在最短的时间内迅速掌握这一世界领先的 AI 系统,极客学院 Wiki 团队发起对 TensorFlow 官方文档的中文协同翻译,一周之内,全部翻译认领完成,一个月后,全部30章节翻译校对完成,上线极客学院Wiki平台并提供下载。
Google TensorFlow项目负责人Jeff Dean为该中文翻译项目回信称:&看到能够将TensorFlow翻译成中文我非常激动,我们将TensorFlow开源的主要原因之一是为了让全世界的人们能够从机器学习与人工智能中获益,类似这样的协作翻译能够让更多的人更容易地接触到TensorFlow项目,很期待接下来该项目在全球范围内的应用!&
Jeff回信原文:
再次衷心感谢每一位为该翻译项目做出贡献的同学,我们会持续关注TensorFlow、AI领域以及其它最新技术的发展、持续维护该协作翻译、持续提供更多更优质的内容,为广大IT学习者们服务!
英文官方网站:
官方GitHub仓库:
中文版 GitHub 仓库:
参与者(按认领章节排序)
, 谷歌发布全新人工智能系统TensorFlow并宣布开源, 极客学院Wiki启动协同翻译,创建 GitHub 仓库,制定协同规范
, 所有章节认领完毕,翻译完成18章,校对认领7章,Star数361,fork数100,协同翻译QQ群及技术交流群的TF爱好者将近300人,GitHub搜索TensorFlow排名第二
, Star数超过500
, 项目正式上线
在组织翻译的过程中,有些事情令人印象深刻,记录下来,希望以后来学习文档的同学能够明了到手中这份文档的由来:
参加翻译的有学生,也有老师;有专门研究AI/ML的,也有对此感兴趣的;有国内的,也有远在纽约的;有工程技术人员也有博士、专家
其中一位,同学,为了翻译一篇文档,在前一天没有睡觉的情况下坚持翻完,20个小时没有合眼
还有一位老师,刚从讲台上讲完课,就立即给我们的翻译提修改意见
很多同学自发的将搭建环境中遇到的问题总结到FAQ里帮助他人
为了一个翻译细节,经常是来回几次,和其他人讨论完善
这样的一个高技术领域的文档,我们在翻译的过程中,难免会有不完善的地方,希望请大家一起帮助我们持续改进文档的翻译质量,帮助更多的人,方法:
在GitHub上提Issue或Pull Request,地址为:
加入我们的QQ群提建议--协同翻译群:,技术交流群:
给我们写邮件:
提供图文教程托管服务
目前,离线版本(PDF、ePub)可正常下载、使用
Tex-PDF 修订版
目前正在编订中,欢迎加入进来一起修订。您可以在此查看目前最新状态。| 502: 无效网关
-- Event ID: 399dcd03e2cd4394
如果您是网站管理员,点击查看。如需网站监控,可以使用。
您的浏览器
百度云加速TensorFlow发布语音识别入门教程,附1GB数据集&代码
机械鸡的鸡友经常问:如何开始入门深度学习语音和其他音频识别,例如关键字检测或语音命令。
虽然有一些伟大的开源语音识别系统,如Kaldi可以使用神经网络作为一个组件,但它们的复杂性,使得它们难以被用来作简单任务的指南。
目前,找不到免费且公开的数据集及教程,让初学者入门(许多需要在神经网络模型可以构建之前进行预处理),或者非常适合简单的关键字检测。
为了解决这个问题,TensorFlow和AIY团队创建了语音命令数据集,并用于将训练*和推理示例代码在TensorFlow中运行。(/)
该数据集在AIY网站,由成千上万的用户,上传了包含30个词的65000条语音数据,每条数据长度为一秒。数据集可以为应用程序构建基本但有用的语音界面,其中包含“yes”、“no”,"up"和"left"等常用单词。
想要练手的鸡友,要下载预先构建的TensorFlow Android应用程序演示,并开启“TF语音”。你将被要求访问麦克风的权限,然后查看一个十个单词的列表,每个单词应该对应你说的话。
结果将取决于你的语音模式是否被数据集覆盖,因此可能不完美 - 商业语音识别系统比此教学示例复杂得多。但是,我们希望随着更多的变化被添加到数据集中,随着社区对TensorFlow的改进,我们将继续看到改进和扩展。
重要的是要知道,真正的语音和音频识别系统要复杂得多,但是像MNIST(入门级的CV数据集)一样,它应该会让你对所涉技术有一个基本的了解。
完成本教程后,你将可以尝试创建一个模型,将一秒钟的音频剪辑去噪,识别单词有“yes”,“no”,“up”,“down”,"left","right","on","off","stop",or "go"。
你也可以在Android应用程序中运行该模型。
你要确保已经安装了TensorFlow,由于该版本下载了超过1GB的训练数据,因此你需要电脑有足够的内存,另外网速要快,训练过程可能需要几个小时。
要开始训练过程,请访问TensorFlow源代码树并运行:
python tensorflow/examples/speech_commands/train.py
训练过程将从下载“ 语音命令”数据集开始,该数据集由65000个WAVE音频文件组成,其中有30个不同的单词。
这些数据是由Google收集的,并根据CCBY许可证发布。存档超过1GB,所以下载可能需要一段时间,但你应该能看到进度日志,一旦下载完成,你就不用再次执行此步骤了。
下载完成后,你将看到如下所示的日志记录信息:
I:44.30 train.py:176] Training from step: 1
I:47.30 train.py:217] Step #1: rate 0.001000, accuracy 7.0%, cross entropy 2.611571
这表明初始化过程已经完成,循环训练已经开始。你会看到它输出每个训练步骤的信息。
步骤分解:
Step #1表明我们正在循环训练的第一步。在这种情况下,总共将有18000个步骤,所以你可以查看步骤号码,了解其完成程度有多接近。
rate 0.001000是控制网络权重更新速度的学习率。早期的这个数字是相对较高的(0.001),但是对于后来的训练周期,它会减少10倍到0.0001。
accuracy 7.0%在这个训练步骤中正确地预测了有多少classes。value函数往往波动很大,但随着训练的进行,平均值会增加。该模型输出一个数字数组,每个标签一个,每个数字是该类输入的预测可能性。
通过选择具有最高分数的条目来选择预测的标签,分数总是在零和一之间。
cross entropy 2.611571是我们用来指导培训过程的损失功能的结果。这是通过比较当前训练运动与正确标签的分数向量获得的分数,这在训练期间应该向下倾斜。
经过一百步,你应该看到这样的一行:
I:41.30 train.py:252] Saving to "/tmp/speech_commands_train/conv.ckpt-100"
这是将当前训练的权重保存到checkpoint文件中。如果你的训练脚本中断,可以查找最后保存的checkpoint,然后:
--start_checkpoint=/tmp/speech_commands_train/conv.ckpt-100使用命令行参数重新
启动脚本, 从那里开始。
混淆矩阵:
四百步后,将记录以下信息:
I0730 16:57:38.07366755030train.py:243] ConfusionMatrix:
[[25800000000000]
[ 762694749115402011]
[ 10110780132201310104]
[ 131616364805101017]
[ 1511711455130922509]
[ 11697387112460010]
[ 8686841324199106]
[ 933211292613619009]
[ 8212949520672002]
[ 161397429420637903]
[ 156177150370632219]
[ 111615154208160020]]
第一部分是混淆矩阵。要了解这是什么意思,你首先需要知道正在使用的标签,在这种情况下,它们分别表示为静音、未知yes、no、up、down、left、right、on、off、stop、go。
第一行是所有的静音剪辑,第二个剪辑是未知的单词,第三个“yes”等。
该矩阵可以比单个准确率得分更有用,因为它可以很好地总结出网络发生的错误。在此示例中,你可以看到除了初始条目之外,第一行中的所有条目都为零。
因为第一行实际上都是静音的片段,所以这意味着它们都没有被错误的标注为文字,所以我们没有任何静音的否定。这表明网络已经越来越好地区分了静音与谈话。
一个完美的模型将产生一个混淆矩阵,其中所有的条目都是从对角线穿过中心的零点。一旦你确定了可以通过添加更多数据来解决问题,该模型的方差可以帮助你了解模型怎样最容易混淆。
混淆矩阵之后,你会看到如下一行:
I:38.30 train.py:245] Step 400: Validation accuracy = 26.3% (N=3093)
将数据集分为三类是很好的做法。最大的(大约是数据的80%)用于训练网络,一个较小的集(10% “validation”)被保留用于评估训练中的准确性,另一组10%,“testing”)用于在训练完成后评估准确度。
通过将数据集分类为训练集、验证集、测试集,你可以确保该模型适用于之前从未见过的数据。测试集是一个额外的保障措施,以确保不仅仅是以适用于训练和验证集拟合调整模型。
训练脚本将数据集自动分成这三个类别,上面的记录行显示了在验证集上运行时的模型准确率。理想情况下,这应该与训练准确性相当接近。如果训练准确性增加但验证不是这样,这表明过度拟合正在发生,你的模型只是学习关于训练剪辑的东西,而不是真正的训练模式。
Tensorboard
使用Tensorboard可以看出训练进展。默认情况下,脚本将事件保存到/ tmp / retrain_logs,可以通过运行以下命令来加载它们:
tensorboard --logdir /tmp/retrain_logs
然后在浏览器中导航到 http:// localhost:6006,将看到显示模型进度的图表。
经过几个小时的训练(取决于你的电脑快慢),脚本应该已经完成了所有18000个步骤。它将识别出最终的混淆矩阵,以及准确率分数,全部运行在测试集上。使用默认设置,准确率在85%到90%之间。
因为音频识别在移动设备上特别有用,接下来我们将其导出为,在移动平台上易于使用的格式。要执行此操作,请运行以下命令行:
python tensorflow/examples/speech_commands/freeze.py
--start_checkpoint=/tmp/speech_commands_train/conv.ckpt-18000
--output_file=/tmp/my_frozen_graph.pb
创建固定模型后,可以使用label_wav.py脚本进行测试,如下所示:
python tensorflow/examples/speech_commands/label_wav.py
--graph=/tmp/my_frozen_graph.pb
--labels=/tmp/speech_commands_train/conv_labels.txt
--wav=/tmp/speech_dataset/left/a5d485dc_nohash_0.wav
可以识别出三个标签:
left (score = 0.81477)
right (score = 0.14139)
_unknown_ (score = 0.03808)
跟多内容请查看论文:http://suo.im/3PW89b
▍在Android应用程序中运行模型
查看此模型在真实应用程序中如何工作的最简单的方法是,下载预构建的Android演示应用程序并将其安装在手机上(http://suo.im/4n1pym)。
你会看到“TF Speech”出现在应用程序列表中,打开它将显示我们刚刚训练过单词列表,从“yes”和“no”开始。
你还可以自己构建此应用程序,因为它是开源的, 并可作为github上TensorFlow存储库的一部分使用(http://suo.im/mfUa8)。默认情况下,它从tensorflow.org下载一个预先训练的模型,但你可以轻松地用自己训练的模型替换它。
如果你自己创建的话,你需要确保SpeechActivity Java源文件(http://suo.im/2fWbai)中的 SAMPLE_RATE,SAMPLE_DURATION符合你训练时的默认设置所做的任何更改。
你还会看到一个Java版本的RecognizeCommands模块(http://suo.im/31vKvx)。
这与本教程中的C ++版本非常相似。如果你调整了参数,还可以在SpeechActivity中进行更新,以获得与服务器测试相同的结果。
演示应用程序,根据你在固定模型复制到模型中的标签文本文件,自动更新其用户界面列表,可以轻松地尝试不同的模型,而无需进行任何代码更改。如果你更改路径,需要updaye LABEL_FILENAME,MODEL_FILENAME添加到文件。
官网教程:http://suo.im/1GLJZA
1GB数据集:http://suo.im/3igfek
Android App:http://suo.im/cNiAc
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点训练语音识别用的LSTM语言模型用theano还是tensorFlow,哪个好用?哪个性能好? - 知乎49被浏览3829分享邀请回答44 条评论分享收藏感谢收起3添加评论分享收藏感谢收起查看更多回答

我要回帖

更多关于 tensorflow 语音识别 的文章

 

随机推荐