本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

wzatv:从Encoder到Decoder实现Seq2Seq模型(算法+代码)(3)

时间:2017-07-10 07:34来源:天下彩论坛 作者:本港台直播 点击:
# 超参数# Number of Epochsepochs = 60# Batch Sizebatch_size = 128# RNN Sizernn_size = 50# Number of Layersnum_layers = 2# Embedding Sizeencoding_embedding_size = 15decoding_embedding_size = 15# Lea

# 超参数# Number of Epochsepochs = 60# Batch Sizebatch_size = 128# RNN Sizernn_size = 50# Number of Layersnum_layers = 2# Embedding Sizeencoding_embedding_size = 15decoding_embedding_size = 15# Learning Ratelearning_rate = 0.001

定义loss function、optimizer以及gradient clipping

wzatv:从Encoder到Decoder实现Seq2Seq模型(算法+代码)

目前为止我们已经完成了整个模型的构建,但还没有构造batch函数,batch函数用来每次获取一个batch的训练样本对模型进行训练。

在这里,我们还需要定义另一个函数对batch中的序列进行补全操作。这是啥意思呢?我们来看个例子,假如我们定义了batch=2,里面的序列分别是

[['h', 'e', 'l', 'l', 'o'], ['w', 'h', 'a', 't']]

那么这两个序列的长度一个是5,一个是4,变长的序列对于RNN来说是没办法训练的,所以我们这个时候要对短序列进行补全,补全以后,两个序列会变成下面的样子:

[['h', 'e', 'l', 'l', 'o'], ['w', 'h', 'a', 't', '<PAD>']]

这样就保证了我们每个batch中的序列长度是固定的。

wzatv:从Encoder到Decoder实现Seq2Seq模型(算法+代码)

至此,我们完成了整个模型的构建与数据的处理。接下来我们对模型进行训练,我定义了batch_size=128,epochs=60。训练loss如下:

wzatv:从Encoder到Decoder实现Seq2Seq模型(算法+代码)

模型预测

我们通过实际的例子来进行验证。

输入“hello”:

wzatv:从Encoder到Decoder实现Seq2Seq模型(算法+代码)

输入“machine”:

wzatv:从Encoder到Decoder实现Seq2Seq模型(算法+代码)

输入“common”:

wzatv:从Encoder到Decoder实现Seq2Seq模型(算法+代码)

总结

至此,我们实现了一个基本的序列到序列模型,Encoder通过对输入序列的学习,将学习到的信息转化为一个状态向量传递给Decoder,Decoder再基于这个输入得到输出。除此之外,我们还知道要对batch中的单词进行补全保证一个batch内的样本具有相同的序列长度。

我们可以看到最终模型的训练loss相对已经比较低了,并且从例子看,其对短序列的输出还是比较准确的,但一旦我们的输入序列过长,比如15甚至20个字母的单词,其Decoder端的输出就非常的差。

关注者

110000+

我们每天都在进步

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容