- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
07文本翻译-模型训练技巧
(p45)我们本节来看实践任务三训练模型,这里训练模型我们分成3个步骤。数据整理、设置训练技巧以及训练。
首先我们进行数据整理。数据需要先进行导入、修剪,最后存储在Paris里,里面包含着中英文语句对。为了将数据输入神经网络中,需要将其转换为张量tensor,包括输入tensor和目标tensor。另外在创建的时候将EOS标志也添加到两个序列中,
(p46)具体的实现代码我们来看一下,那首先第一步啊就是indexesFromSentence那这个函数的作用呢,是将返回句子中每个词在字典中的索引。
那第二个是。tensorFromSentence。它的函数作用是将句子转化成张量
那第三个tensorsFromPair。这个是将句子对转化成输入张亮和目标张亮。
(p47)接下来第二步叫训练技巧。Encoder编码完成后,开始训练Decoder,那么Decoder每一步的输入应该是什么呢?这里有两种方法,一是用当前步的输出,也就是模型学习后的预测结果当作下一步的输入;二是将真实值用作下一步的输入,这种概念就是TeacherForcing。这两种方法都可以采取,但是第二种方法能够使模型更快收敛,当使用受过训练的网络时,容易出现不稳定性,没有较好的泛化能力。于是我们可以设置一个阈值,如果随机数小于阈值,则使用TeacharForcing,代码如下:
这里我们设置TeacherForcing的比率为0.5
(p48)那第三步呢,就是训练模型,为了让函数使用更加方便,我们将训练成一个train函数,后面迭代时逐一将向量传进去。
(p49)这里我们详细讲解一下这个train函数,这个函数需要输入8个参数,前两个是输入张亮和目标张亮啊,接下来2个是编码器、解码器encoderdecoder。还有这两个对应的优化器optimizer。最后一两个是传入的损失函数以及序列的最大长度值。
首先呢,第一步将encoder进行隐藏层初始化。
然后下一步做梯度清零,把encoderdecode的梯度都清零。
下一步,获取输入向量和目标向量的尺寸。
然后再下一步,进行输出初始化,一会儿再进行替换
最后将我们的这个loss也设置为零,
(p50)那么下一步呢,我们进行开始训练啊,循环输入的长度进行训练。
训练的时候,通过encoder进行编码,后面吧初始decoder的隐藏状态,设置为encoder的隐藏状态。最后两句,通过随机取数来决定是否采用这个TeacharForcing。这里通过random.random()随机取数,这个数的范围就是在0-1之间,然后我们之前设置的TeacharForcing的比率就是0.5,那么我们就会差不多有一半的数据进行TeacharForcing。
(p51)接下来这里,我们还是在上面的for循环中。这里我们按照上面是否采用TeacharForcing分开处理,如果不采用,那么就用预测出的结果作为Decoder下一个输入。
(p52)最后这里,还是在之前那个for循环中。这里我们进行反向传播,然后进行参数更新,decoder和encoder网络都进行参数更新,然后返回平均的loss值。
(p53)那么下面就是训练的一个步骤,我们定义了辅助函数timeSince用来计时,整个训练过程如下:1启动计时器;2初始化优化器和损失函数;3创建一组训练对;4代入train函数进行迭代训练。
这个过程也是比较复杂的,所以我们将整个训练过程包装成trainIters函数。在训练的过程中,我们还将打印出进度,例如的百分比、到目前为止的时间,估计的时间和平均损失等等信息。
(p54)好,这里我们来看一下,相关代码。这里两个函数功能较为简单,都是对时间进行处理的函数,asMinutes是将秒转化为分钟,timeSince则是用来记录训练时间用的。
(p55)这里呢是主要的训练函数,trainIters,这个函数比较长,当前页面主要做了4个步骤,1设置好时间,2这是设置好encoder和decode的optimizer也就是编码器和解码器各自的优化器,3设置好训练数据,4、定义好损失函数。
(p56)下面还是trainIters函数中,通过for循环来模型训练,每一次迭代需要做4步,1、这一块就是设置好一次训练的数据,2、完成一次训练,并且得到损失值,3、统计损失值。4、按照一定的间隔将训练的进度打印出来,这里我们将打印当前的损失值,以及训练的时间。
(p57)最后我们还需要定义一个函数,这个函数是用来绘制训练的可视化图形,比如损失值变化图,或者精度变化图。
最后我们就可以开始训练来,看下面三行代码,分别是,1、创建编码器模型,EncoderRNN类
您可能关注的文档
- 深度学习案例教程 教案全套 钱月钟 第1--9章 深度学习简介--语音识别.docx
- 深度学习案例教程 教案1.3 深度学习的发展.docx
- 深度学习案例教程 教案1.1 人工智能与机器学习.docx
- 深度学习案例教程 教案1.6 深度学习的应用领域-自然语言的处理.docx
- 深度学习案例教程 教案1.2 深度学习定义及分类.docx
- 深度学习案例教程 教案1.5 深度学习的应用领域-计算机视觉.docx
- 深度学习案例教程 教案1.4 深度学习的应用领域-语音识别.docx
- 深度学习案例教程 教案1.8 深度学习框架介绍.docx
- 深度学习案例教程 教案1.7 深度学习的特点.docx
- 深度学习案例教程 教案2.2PyTorch安装和Pycharm安装.docx
文档评论(0)