这次来训练一个基于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. a标签的一些特殊使用

    <a href="tel:10086">10086</a> //点击后直接拨打10086  <a href="mailto:c1586@qq ...

  2. 6)PHP,预定义变量

    预定义变量也叫超全局变量: :预定义变量又叫超全局变量,包括: $_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_COOKIE, $_SESSION, . ...

  3. /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/bin/java: No such file or directory

    在linux使用两个tomcat的时候, 执行./shutdown.sh的时候, 遇到了这个问题 这个可怎么办呢 原来是我的java下面的文件目录是/java-1.8.0-openjdk-1.8.0. ...

  4. Hive(二)—— 架构设计

    Hive架构 Figure 1 also shows how a typical query flows through the system. 图一显示一个普通的查询是如何流经Hive系统的. Th ...

  5. 关于TensorFlow2的tf.function()和AutoGraph的一些问题解决

    在使用TensorFlow的AutoGraph的时候出现了一些问题,特此记录 AutoGraph did not convert this function. Try decorating it di ...

  6. IMX6开发板Qtopia2.2.0开发环境搭建以及编译镜像

    搭建 Qtopia2.2.0 开发环境,需要先搭建 Android 的编译环境,然后在 Android 编译环境的基础上,再搭建 Qtopia2.2.0 编译环境.以下内容基于迅为-iMX6开发板.Q ...

  7. SwaggerConfig

    package me.zhengjie.common.swagger2; import com.google.common.base.Predicates; import org.springfram ...

  8. PAT甲级——1061 Dating

    1061 Dating Sherlock Holmes received a note with some strange strings: Let's date! 3485djDkxh4hhGE 2 ...

  9. Wanna go back home

    题目描述 Snuke lives on an infinite two-dimensional plane. He is going on an N-day trip. At the beginnin ...

  10. 2018安卓巴士开发者大会打造Android技术盛宴

    2018安卓巴士开发者大会打造Android技术盛宴2018安卓巴士开发者大会将于8月25日在上海举行,作为中国最具前沿性.专业性的安卓技术会议,将邀请来自爱奇艺.阿里.饿了么等知名企业的一线工程师分 ...