这次来训练一个基于CNN的语音识别模型。训练完成后,我们将尝试将此模型用于Hotword detection。

人类是怎样听懂一句话的呢?以汉语为例,当听到“wo shi”的录音时,我们会想,有哪两个字是读作“wo shi”的,有人想到的是“我是”,也有人觉得是“我市”。
我们可以通过”wo shi”的频率的特征,匹配到一些结果,我们这次要训练的模型,也是基于频率特征的CNN模型。单纯的基于频率特征的识别有很大的局限性,比如前面提到的例子,光是听到“wo shi”可能会导致产生歧义,但是如果能有上下文,我们就可以大大提高“识别”的成功率。因此,类似Google Assistant那样的识别,不光是考虑到字词的发音,还联系了语义,就算有一两个字发音不清,我们还是能得到正确的信息。
但是基于频率特征的模型用作Hotword detection还是比较合适的,因为Horword通常是一两个特定的词,不需要联系语境进行语义分析。

准备训练数据集

开源的语言数据集比较少,这里我们使用TensorFlow和AIY团队推出的一个数据集,包含30个基本的英文单词的大量录音:
下载地址
这个数据集只有1G多,非常小的语音数据集,不过用来实验是完全够的。

运行docker并挂载工作目录

新建一个speech_train文件夹,并在其中创建子文件夹dataset,logs,train,它们将用于存放数据集,log和训练文件。解压数据集到dataset,然后运行docker:

1
2
docker run -it -v $(pwd)/speech_train:/speech_train 
gcr.io/tensorflow/tensorflow:latest-devel

使用默认的conv模型开始训练

1
2
3
4
5
6
cd /tensorflow/
python tensorflow/examples/speech_commands/train.py
--data_dir=/speech_train/dataset/
--summaries_dir=/speech_train/logs/
--train_dir=/speech_train/train/
--wanted_words=one,two,three,four,five,marvin

在这里我们指定希望识别的label: one,two,three,four,five,marvin。数据集的其他部分将被归为unknown

使用TensorBoard使训练可视化

我们可以通过分析生成的log使训练过程可视化:

1
大专栏  使用TensorFlow训练自己的语音识别AI class="line">tensorboard --logdir /speech_train/logs

运行指令后,可以通过浏览器访问本地的6006端口进入TensorBoard。下图是使用conv模型完成18000 steps 训练的过程图:

训练花了差不多15个小时。

生成pb文件

训练完成后,我们需要将其转化为pb文件:

1
2
3
4
python tensorflow/examples/speech_commands/freeze.py 
--start_checkpoint=/speech_train/train/conv.ckpt-18000
--output_file=/speech_train/conv.pb
--wanted_words=one,two,three,four,five,marvin

完成后,我们将得到一个名为conv.pb的文件,配合包含可识别label的txt文件就可以直接使用了。

测试

使用测试脚本进行测试:

1
2
3
4
python tensorflow/examples/speech_commands/label_wav.py 
--graph=/speech_train/conv.pb
--labels=/speech_train/conv_labels.txt
--wav=/speech_train/dataset/marvin/0b40aa8e_nohash_0.wav

训练的模型应能正确识别出marvin。

使用准确度较低但是预测更快的low_latency_conv模型

我们可以使用另外一种准确度较低但是预测更快的low_latency_conv模型进行训练:

1
2
3
4
5
6
7
8
python tensorflow/examples/speech_commands/train.py 
--data_dir=/speech_train/dataset/
--summaries_dir=/speech_train/logs/
--train_dir=/speech_train/train/
--model_architecture=low_latency_conv
--how_many_training_steps=20000,6000
--learning_rate=0.01,0.001
--wanted_words=one,two,three,four,marvin,wow

当使用该模型时,可以适当增加training steps和learning rate。在这种情况下,训练的时间大大缩短了:

只花了不到3小时.

其他

也可以使用gpu版本的tensorflow进行训练,速度可以提升不少哦。

使用TensorFlow训练自己的语音识别AI的更多相关文章

  1. 大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app

    大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWx ...

  2. 目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练

    将目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练. import xml.etree.ElementTree as ET import numpy as ...

  3. 自己搞了20万张图片100个分类,tensorflow训练23万次后。。。。。。

    自己搞了20万张图片100个分类,tensorflow训练23万次后...... 我自己把训练用的一张图片,弄乱之后做了一个预测 100个汉字,20多万张图片,tensorflow CNN训练23万次 ...

  4. tensorflow训练了10万次,运行完毕,对这个word2vec终于有点感觉了

    tensorflow训练了10万次,运行完毕,对这个word2vec终于有点感觉了 感觉它能找到词与词之间的关系,应该可以用来做推荐系统.自动摘要.相关搜索.联想什么的 tensorflow1.1.0 ...

  5. 2、TensorFlow训练MNIST

    装载自:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html TensorFlow训练MNIST 这个教程的目标读者是对机器学习和T ...

  6. tensorflow训练验证码识别模型

    tensorflow训练验证码识别模型的样本可以使用captcha生成,captcha在linux中的安装也很简单: pip install captcha 生成验证码: # -*- coding: ...

  7. TensorFlow训练MNIST报错ResourceExhaustedError

    title: TensorFlow训练MNIST报错ResourceExhaustedError date: 2018-04-01 12:35:44 categories: deep learning ...

  8. TensorFlow.训练_资料(有视频)

    ZC:自己训练 的文章 貌似 能度娘出来很多,得 自己弄过才知道哪些个是坑 哪些个好用...(在CSDN文章的右侧 也有列出很多相关的文章链接)(貌似 度娘的关键字是"TensorFlow ...

  9. 课程报名 | 基于模型训练平台快速打造 AI 能力

    我们常说的 AI 通用能力往往不针对具体的行业应用,而是主要解决日常或者泛化的问题,很多技术企业给出的方案是通用式的,比如通用文字识别,无论识别身份证.驾驶证.行驶证等,任何一张图片训练后的模型都会尽 ...

随机推荐

  1. QLIKVIEW-SALESORDER\DELIVERYNOTICE\OUTSTOCK\INVOICE

    //销售订单SALESORDER_TMP:NoConcatenateLOAD T_SAL_ORDER.LE_ID, [T_SAL_ORDER.LCY CODE], T_SAL_ORDER.SYSTEM ...

  2. maven中scope属性有哪些

    compile,缺省值,适用于所有阶段,会随着项目一起发布. provided,类似compile,期望JDK.容器或使用者会提供这个依赖.如servlet.jar. runtime,只在运行时使用, ...

  3. spring boot pom demo

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. 单调栈and单调队列(此文太多坑了,以后再填)

    单调栈 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递减. 性质: 单调栈里的元素具有单调性 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除 使用单调 ...

  5. KMP匹配(模板)

    先粘上我入门KMP时看的大佬的博客:orz orz 从头到尾彻底理解KMP 我觉得这篇已经讲的很详细了,希望大家能坚持看下去. 步骤 ①寻找前缀后缀最长公共元素长度对于P = p0 p1 ...pj- ...

  6. 吴裕雄--天生自然python学习笔记:python 文件批量查找

    在多个文本文件中查找 我们首先来学习文本文件的查找字符 . 我们通过 os.walk 扩大查找范围, 查找指定目录和子目录下的文件. 应用程序总览 读取 当 前目录及子目录下的所有 PY 和 txt ...

  7. pycharm2018后版本执行Flask app.run()深坑

    在2018年以前的版本,以上配置在app.run()里面的内置方法

  8. idea 创建项目没有web.xml文件,如何添加

    1.首先看下项目工程里面是否有WEB-INF文件夹,没有就创建一个 2.点击 file 选择 project structure 3.选择 facets,点击+号, 选择 web 4.弹出 弹框 选择 ...

  9. 96)PHP,文件上传(2)

    (1)那么既然看到文件即使上传成功,但是只是在脚本周期内有效,脚本只要结束(脚本结束其实很快的),文件就会自动消失,那么怎么才能永久存储文件呢: 函数: Move_uploaded_file(上传临时 ...

  10. django项目导航页_20191128

    django项目导航页_20191128 第一步:python-django电商项目-需求分析架构设计数据库设计_20191115 python-django-linux上mysql的安装和配置_20 ...