对seq2seq的一些个人理解
来源:互联网 发布:网站怎么弄三级域名 编辑:程序博客网 时间:2024/05/18 02:17
对seq2seq的一些个人理解
因为做毕设用到seq2seq框架,网上关于seq2seq的资料很多,但关于seq2seq的代码则比较少,阅读tensorflow的源码则需要跳来跳去比较麻烦(其实就是博主懒)。踩了很多坑后,形成了一些个人的理解,在这里记录下,如果有人恰好路过,欢迎指出错误~
seq2seq图解如下:
上图中,C是encoder输出的最终状态,作为decoder的初始状态;W是encoder的最终输出,作为decoder的初始输入。
具体到tensorflow代码中(tensorflow r1.1.0cpu版本),查阅tf.contrib.rnn.BasicLSTMCell的源码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
令调用LSTM的命令为:
- 1
可知,state其实是包含了output在内的。state[0]才是真正的state,即图中的C;state[1]是output,即图中的W。这样一来,最后输出的output其实就显得鸡肋了。(如果要在encode和decode之间搞事情的话,这点就比较重要了。博主就是踩了这个坑。。。当然如果不在这里搞事情的话就可以完美绕过这个坑)
知道这点后,那么接下来的就好理解多了。博主之前曾有过一段时间的疑惑,那就是seq2seq的decode_input到底是什么?如果跟target只是移了一个位,其他完全不变的话,那要encoder干什么?知道了上面的背景后,我们不难知道,教程中decode_input跟target的移位只是加速训练过程。而在具体应用中,decode_input可以是encode的最后一个输出,也可以自己设定一个全零的数组。个人觉得设定全零的数组比较好,因为初始状态就已经包含了encode的最后一个输出了,而且全零数组可以当作是一个开始的标识(至于seq2seq具体的训练过程可视化,可以阅读2017年ACL的一篇文章Visualizing and Understanding Neural Machine Translation http://nlp.csai.tsinghua.edu.cn/~ly/papers/acl2017_dyz.pdf)
最后,还说几点比较零散的:
1、对于短句(<30词),可以不进行输入翻转,模型收敛地稍微慢一点而已;对于长句则最好进行翻转
2、多阅读教程,多实践。上手操作永远是学习的最佳途径
- 对seq2seq的一些个人理解
- 对seq2seq的一些个人理解
- 关于RNN(Seq2Seq)的一点个人理解与感悟
- 关于RNN(Seq2Seq)的一点个人理解与感悟
- 对Spring的一些个人理解
- 个人对OTT的一些理解
- 对模板缓存的一些个人理解
- 个人对man命令的一些理解
- 个人对Fragment的一些理解
- 个人对Redis的一些简单理解
- 对ac自动机的一些个人理解
- 个人对闭包的一些理解
- 个人对orm一些理解
- 个人对JavaScript闭包的一些理解
- 个人对Spring @Scope("prototype")的一些理解
- 对runtime和runloop的一些个人理解
- seq2seq里的 attention机制 的 原理 及 代码 及 个人理解
- 一些个人的对帮助自己更好理解“对象”的一些笔记
- mysql无法启动的问题
- JRE与JVM、JDK的区别
- hdu5067 Harry And Dig Machine(裸TSP问题 状压dp )
- easyui入门
- LINUX|Centos|TomCat 安装教程
- 对seq2seq的一些个人理解
- Application Scenarios of Edge Computing——边缘计算的应用场景
- 在vps服务器上做端口映射访问内网
- 千里之行,始于足下
- 整理了一些session与cookie的区别与联系
- C++中cin和cout中不会被注意的细节(字符串的处理)
- Android Studio安装总结
- 监控软件
- 51单片机驱动数码管(LED)时的注意事项