Tensorflow 训练时电脑运行越来越慢慢,重启后又变好是什么原因

TensorFlow练习1: 对评论进行分类 – WTF Daily Blog
你用过哪些上古编程语言?
Poll Options are limited because JavaScript is disabled in your browser.
微信: print_panda
微博: 斗大的熊猫& 教程 | 如何使用TensorFlow构建、训练和改进循环神经网络
教程 | 如何使用TensorFlow构建、训练和改进循环神经网络
机器之心编译
参与:李泽南、吴攀
来自 Silicon Valley Data Science 公司的研究人员为我们展示了循环神经网络(RNN)探索时间序列和开发语音识别模型的能力。目前有很多人工智能应用都依赖于循环深度神经网络,在谷歌(语音搜索)、百度(DeepSpeech)和亚马逊的产品中都能看到RNN的身影。
然而,当我们开始着手构建自己的 RNN 模型时,我们发现在使用神经网络处理语音识别这样的任务上,几乎没有简单直接的先例可以遵循。一些可以找到的例子功能非常强大,但非常复杂,如 Mozilla 的 DeepSpeech(基于百度的研究,使用 TensorFlow);抑或极其简单抽象,无法应用于实际数据。
本文将提供一个有关如何使用 RNN 训练语音识别系统的简短教程,其中包括代码片段。本教程的灵感来自于各类开源项目。
1906 年爱迪生留声机广告的语音识别事例,其中包括声音幅度的运行轨迹,提取的频谱图和预测文本
首先,在开始阅读本文以前,如果你对 RNN 还不了解,可以阅读 Christopher Olah 的 RNN 长短期记忆网络综述:
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
语音识别:声音和转录
直到 2010 年时,最优秀的语音识别模型仍是基于语音学(Phonetics)的方法,它们通常包含拼写、声学和语言模型等单独组件。不论是过去还是现在,语音识别技术都依赖于使用傅里叶变换将声波分解为频率和幅度,产生如下所示的频谱图:
在训练语音模型时,使用隐马尔科夫模型(Hidden Markov Models,HMM)需要语音+文本数据,同时还需要单词与音素的词典。HMM 用于顺序数据的生成概率模型,通常使用莱文斯坦距离来评估(Levenshtein 距离,是编辑距离的一种。指两个字串之间,由一个转成另一个所需的最少编辑操作次数。可以进行的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符)。
这些模型可以被简化或通过音素关联数据的训练变得更准确,但那是一些乏味的手工任务。因为这个原因,音素级别的语音转录在大数据集的条件下相比单词级别的转录更难以实现。有关语音识别工具和模型的更多内容可以参考这篇博客:
/open-source-toolkits-speech-recognition/
连接时间分类(CTC)损失函数
幸运的是,当使用神经网络进行语音识别时,通过能进行字级转录的连接时间分类(Connectionist Temporal Classification,CTC)目标函数,我们可以丢弃音素的概念。简单地说,CTC 能够计算多个序列的概率,而序列是语音样本中所有可能的字符级转录的集合。神经网络使用目标函数来最大化字符序列的概率(即选择最可能的转录),随后把预测结果与实际进行比较,计算预测结果的误差,以在训练中不断更新网络权重。
值得注意的是,CTC 损失函数中的字符级错误与通常被用于常规语音识别模型的莱文斯坦错词距离。对于字符生成 RNN 来说,字符和单词错误距离在表音文字(phonetic language)中是相同的(如世界语、克罗地亚语),这些语言的不同发音对应不同字符。与之相反的是,字符与单词错误距离在其他拼音文字中(如英语)有着显著不同。
如果你希望了解 CTC 的更多内容和百度对它最新的研究,以下是一些链接:
http://suo.im/tkh2e
http://suo.im/3WuVwV
https://arxiv.org//
为了优化算法,构建传统/深度语音识别模型,SVDS 的团队开发了语音识别平台:
数据的重要性
毫无疑问,训练一个将语音转录为文字的系统需要数字语音文件和这些录音的转录文本。因为模型终将被用于解释新的语音,所以越多的训练意味着越好的表现。SVDS 的研究人员使用了大量带有转录的英文语音对模型进行训练;其中的一些数据包含 LibriSpeech(1000 小时)、TED-LIUM(118 小时)和 VoxForge(130 小时)。下图展示了这些数据集的信息,包括时长,采样率和注释。
LibriSpeech:http://www.openslr.org/12/
TED-LIUM:http://www.openslr.org/7/
VoxForge:http://www.voxforge.org/
为了让模型更易获取数据,我们将所有数据存储为同一格式。每条数据由一个.wav 文件和一个.txt 文件组成。例如:Librispeech 的『211-9』 在 Github 中对应着 211-9.wav 与 211-9.txt。这些数据的文件使用数据集对象类被加载到 TensorFlow 图中,这样可以让 TensorFlow 在加载、预处理和载入单批数据时效率更高,节省 CPU 和 GPU 内存负载。数据集对象中数据字段的示例如下所示:
, txt_files, thread_count, batch_size, numcep, numcontext):
from_directory(
, dirpath, start_idx
txt_filenames(dirpath, start_idx
start_idx, limit
limit, sort
next_batch(
, batch_size
(_start_idx, end_idx)
[_txt_files[i]
[x.replace(
txt_files]
audio and text into memory
(audio, text)
get_audio_and_transcript(
&&&&&&&&&&&&
txt_files,
&&&&&&&&&&&&
wav_files,
&&&&&&&&&&&&
&&&&&&&&&&&&
_numcontext)
为了让机器识别音据,数据必须先从时域转换为频域。有几种用于创建音频数据机器学习特征的方法,包括任意频率的 binning(如 100Hz),或人耳能够感知的频率的 binning。这种典型的语音数据转换需要计算 13 位或 26 位不同倒谱特征的梅尔倒频谱系数(MFCC)。在转换之后,数据被存储为时间(列)和频率系数(行)的矩阵。
因为自然语言的语音不是独立的,它们与字母也不是一一对应的关系,我们可以通过训练神经网络在声音数据上的重叠窗口(前后 10 毫秒)来捕捉协同发音的效果(一个音节的发音影响了另一个)。以下代码展示了如何获取 MFCC 特征,以及如何创建一个音频数据的窗口。
# Load wav files
wav.read(audio_filename)
# Get mfcc coefficients
orig_inputs
mfcc(audio, samplerate
fs, numcep
# For each time slice of the training set, we need to copy the context this makes
train_inputs
np.array([], np.float32)
train_inputs.resize((orig_inputs.shape[
numcontext))
time_slice
(train_inputs.shape[
# Pick up to numcontext time slices in the past,
# And complete with empty mfcc features
need_empty_past
, ((time_slices[
numcontext)
time_slice))
empty_source_past
(empty_mfcc
empty_slots
(need_empty_past))
data_source_past
orig_inputs[
, time_slice
numcontext):time_slice]
(empty_source_past)
(data_source_past)
numcontext)
对于这个 RNN 例子来说,我们在每个窗口使用前后各 9 个时间点——共 19 个时间点。有 26 个倒谱系数,在 25 毫秒的时间里共 494 个数据点。根据数据采样率,我们建议在 16,000 Hz 上有 26 个倒谱特征,在 8,000 Hz 上有 13 个倒谱特征。以下是一个 8,000 Hz 数据的加载窗口:
如果你希望了解更多有关转换数字音频用于 RNN 语音识别的方法,可以看看 Adam Geitgey 的介绍:http://suo.im/Wkp8B
对语音的序列本质建模
长短期记忆(LSTM)是循环神经网络(RNN)的一种,它适用于对依赖长期顺序的数据进行建模。它对于的建模非常重要,因为这种方法可以在当前时间点保持过去信息的记忆,从而改善输出结果,所以,这种特性对于语音识别非常有用。如果你想了解在 TensorFlow 中如何实例化 LSTM 单元,以下是受 DeepSpeech 启发的双向循环神经网络(BiRNN)的 LSTM 层示例代码:
with tf.name_scope(
# Forward direction cell:
lstm_fw_cell
tf.contrib.rnn.BasicLSTMCell(n_cell_dim, forget_bias
, state_is_tuple
# Backward direction cell:
lstm_bw_cell
tf.contrib.rnn.BasicLSTMCell(n_cell_dim, forget_bias
, state_is_tuple
# Now we feed `layer_3` into the LSTM BRNN cell and obtain the LSTM BRNN output.
outputs, output_states
tf.nn.bidirectional_dynamic_rnn(
lstm_fw_cell,
lstm_bw_cell,
# Input is the previous Fully Connected Layer before the LSTM
tf.float32,
time_major
sequence_length
seq_length)
tf.summary.histogram(
"activations"
, outputs)
关于 LSTM 网络的更多细节,可以参阅 RNN 与 LSTM 单元运行细节的概述:
http://karpathy.github.io//rnn-effectiveness/
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
此外,还有一些工作探究了 RNN 以外的其他语音识别方式,如比 RNN 计算效率更高的卷积层:https://arxiv.org/abs/
训练和监测网络
因为示例中的网络是使用 TensorFlow 训练的,我们可以使用 TensorBoard 的可视化计算图监视训练、验证和进行性能测试。在 2017 TensorFlow Dev Summit 上 Dandelion Mane 给出了一些有用的帮助:/watch?v=eBbEDRsCmv4
我们利用 tf.name_scope 添加节点和层名称,并将摘要写入文件,其结果是自动生成的、可理解的计算图,正如下面的双向神经网络(BiRNN)所示。数据从左下角到右上角在不同的操作之间传递。为了清楚起见,不同的节点可以用命名空间进行标记和着色。在这个例子中,蓝绿色 fc 框对应于完全连接的层,绿色 b 和 h 框分别对应于偏差和权重。
我们利用 TensorFlow 提供的 tf.train.AdamOptimizer 来控制学习速度。AdamOptimizer 通过使用动量(参数的移动平均数)来改善传统梯度下降,促进超参数动态调整。我们可以通过创建标签错误率的摘要标量来跟踪丢失和错误率:
# Create a placeholder for the summary statistics
with tf.name_scope(
"accuracy"
# Compute the edit (Levenshtein) distance of the top path
tf.edit_distance(tf.cast(
], tf.int32),
# Compute the label error rate (accuracy)
tf.reduce_mean(distance, name
'label_error_rate'
.ler_placeholder
tf.placeholder(dtype
tf.float32, shape
.train_ler_op
tf.summary.scalar(
"train_label_error_rate"
.ler_placeholder)
.dev_ler_op
tf.summary.scalar(
"validation_label_error_rate"
.ler_placeholder)
.test_ler_op
tf.summary.scalar(
"test_label_error_rate"
.ler_placeholder)
如何改进 RNN
现在我们构建了一个简单的 LSTM RNN 网络,下一个问题是:如何继续改进它?幸运的是,在开源社区里,很多大公司都开源了自己的最新语音识别模型。在 2016 年 9 月,微软的论文《The Microsoft 2016 Conversational Speech Recognition System》展示了在 NIST 200 Switchboard 数据中单系统残差网络错误率 6.9% 的新方式。他们在卷积+循环神经网络上使用了几种不同的声学和语言模型。微软的团队和其他研究人员在过去 4 年中做出的主要改进包括:
在基于字符的 RNN 上使用语言模型
使用卷积神经网络(CNN)从音频中获取特征
使用多个 RNN 模型组合
值得注意的是,在过去几十年里传统语音识别模型获得的研究成果,在目前的深度学习语音识别模型中仍然扮演着自己的角色。
修改自: A Historical Perspective of Speech Recognition, Xuedong Huang, James Baker, Raj dy Communications of the ACM, Vol. 57 No. 1, Pages 94-103, 2014
训练你的第一个 RNN 模型
在本教程的 Github 里,作者提供了一些介绍以帮助读者在 TensorFlow 中使用 RNN 和 CTC 损失函数训练端到端语音识别系统。大部分事例数据来自 LibriVox。数据被分别存放于以下文件夹中:
Train: train-clean-100-wav (5 examples)
Test: test-clean-wav (2 examples)
Dev: dev-clean-wav (2 examples)
当训练这些示例数据时,你会很快注意到训练数据的词错率(WER)会产生过拟合,而在测试和开发集中词错率则有 85% 左右。词错率不是 100% 的原因在于每个字母有 29 种可能性(a-z、逗号、空格和空白),神经网络很快就能学会:
某些字符(e,a,空格,r,s,t)比其他的更常见
辅音-元音-辅音是英文的构词特征
MFCC 输入声音信号振幅特征的增加只与字母 a-z 有关
使用 Github 中默认设置的训练结果如下:
如果你想训练一个更强大的模型,你可以添加额外的.wav 和.txt 文件到这些文件夹里,或创建一个新的文件夹,并更新 configs / neural_network.ini 的文件夹位置。注意:几百小时的音频也需要大量时间来进行训练,即使你有一块强大的 GPU。&
原文链接:/tensorflow-rnn-tutorial/
?------------------------------------------------
加入机器之心(全职记者/实习生):
投稿或寻求报道:
广告&商务合作:
姓名电话立即查询&首先这里有个比喻,成交量是发动机,K线是车,那么均线就是路面,成交量的大小,就是发动机的好坏,K线可以比喻成车的品牌,均线则可比喻成路面的宽广程度,那么三者之间有什么关系呢?也可以把成交量比喻成男性,K线比喻成女性,均线比喻成两者之间的关系。没什么不同的道理。其实市场哪有那么复杂,用人性生活的角度,去思考,你将豁然开朗。而造成失败的,无非是你的贪婪与恐惧和不知所措。一、短线买入:日线看,短期均线(...&驻马店养老保险“  社保卡是持卡人享受人力资源和社会保障权益的信息载体。你知道社保卡如何开始正常使用,如何修改密码,如何挂失吗?”社会保障卡如何开始正常使用?  社会保障卡需进行社会保障卡开卡和金融功能激活操作后才能开始正常使用。 开卡  持卡人领取社会保障卡后,需到人力资源社会保障部门办理社会保障应用开卡,才可以在人力资源和社会保障业务中使用。金融功能激活  持卡人领取社会保障卡后,需持本人有效...&“盘感”完全是操盘手自身在交易中的亲身体验,而无法从别人那里学来。盘感是交易经验和交易理念的综合积累,是亲身感受到的市场“综合信息”的沉淀。盘感只能在交易中体验,很难用语言表达,一定不要觉得盘感太虚幻而排斥盘感,其实所有人的交易都是依据各自个感受,不要把盘感与非理性划等号。良好的盘感是短线交易盈利的关键所在,盘感需要训练,通过训练大多数人会进步很快。每天进行盘感训练和强化,这事缩短期货成功时间的最...&第0章引言本文是注册币看,使用币看的场外交易来买和卖比特币的指南。币看是一款APP,提供比特币资讯、行情、监控挖矿、钱包和场外交易等功能。你只需要有一部手机,安卓或iOS都可以,就可以安装币看,并使用其场外交易功能。注意,APP的用户界面经常会变,所以本文截图有可能对不上最新的界面,但应该是大同小异。另外币看的场外交易也有网页版,网址是/exchange/#/t...&K线是走势图的重要组成部分,但是每根K线的组合又有不同的背景条件,如果单独抽离来看,似乎很难把握规律,当然,炒股是一个概率,每一组K线下必然对应着大概率的获利模型。从历史已经发生的K线图,去寻找一些大概率事件,往往可以在实操过程中帮到你。本周的测试就是挑选了10幅相类似的K线图,看你总体的盘感如何,并学会分析基本的K线知识。题目1:请问次个交易日的涨幅情况A:最大涨幅大于3%B:振幅在正负3%C:...&
版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐平台。《教程 | 如何使用TensorFlow构建、训练和改进循环神经网络》的版权归原作者「机器之心」所有,文章言论观点不代表慢钱头条的观点, 慢钱头条不承担任何法律责任。如需删除可联系QQ:
文章来源:
关注机器之心微信公众号
机器之心微信公众号:almosthuman2014
手机扫描上方二维码即可关注机器之心微信公众号
机器之心最新文章
精品公众号随机推荐
违规或不良信息
广告、钓鱼诈骗
内容不完整
金牌理财师将尽快与您联系
来电号码为:****训练前要用nvidia-smi来查看一下当前GPU的使用情况,不要一下子就放上去跑把大家一起挤挂了,这是负责任的行为。之前在公司就遇到过训练了好久,结果一个新来的就把服务器挤跪了。。。
如果机器上面的GPU之间不能够通信,那就先设定一块要用的GPU吧,在终端上面输入命令export CUDA_VISIBLE_DEVICES=0(数字是GPU的编号)。
用Tensorflow创建session的时候要注意设置内存使用情况,特别是内存资源不够而且要和别人共享一块GPU的时候(留一点给别人用):
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.9)
with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) as sess:
fraction设置使用内存的百分比。
如果要用with tf.device(‘/gpu:0’):,只能够在所有运算都能在GPU上进行才可以,否则就会报错。如果一定要这样,则要指定哪些操作可以使用GPU,或者设置从GPU可以转移到CPU上运算。
本文已收录于以下专栏:
相关文章推荐
今日尝试在win10上安装tensorflow,折腾了一会儿,遇到了一些典型问题,其实这些典型问题是没必要折腾这么久的。
注意一:当前tensorflow在windows只支持python3...
事项1:支持向量一个的原因?
如下的解答:
用opencv2.49的我是这么理解的:对于线性SVM,在opencv\sources\modules\ml\src\svm.cpp这个源码的optimiz...
OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV ...
本文转自:http://blog.csdn.net/xidianzhimeng/article/details/。
关于训练程序我封装了一份,大家可以参考一下
说明:本文是七月算法5月深度学习班第五次课听课笔记。黄色标注的部分为自己不太确定的部分。
mini-batch SGD
神经网络使用mini-batch SGD训练得到最优权重。训练过程...
      Harr分类器是一个很有用的工具,它主要是用来实现对刚性物体的检测的分类器的训练。Harr分类器使用了harr特征或更准确的描述是类Harr的小波特征,该特征由矩形图像区域的加...
转自 xidianzhimeng 的博客 http://blog.csdn.net/xidianzhimeng/article/details/#
    这段时间再看分类器,了解到o...
使用OpenCV进行分类训练的时候,注意(1)必须使用线性核函数,HOGDescriptor只支持线性核函数检测(2)保存文件的时候注意要将alpha*supportvector的负数形式
OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV ...
使用实验室的服务器网络训练时,发现我只使用单个GPU跑程序,但三块显卡的显存都被占用。查了官网说明,发现这是因为TensorFlow训练时默认占用所有GPU的显存导致的。于是记录一下解决方法。
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)tensorflow调用训练好的函数测试时报错? - 知乎4被浏览372分享邀请回答0添加评论分享收藏感谢收起0添加评论分享收藏感谢收起

我要回帖

更多关于 电脑运行越来越慢 的文章

 

随机推荐