博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dynamic seq2seq in tensorflow
阅读量:6297 次
发布时间:2019-06-22

本文共 1343 字,大约阅读时间需要 4 分钟。

v1.0 tensorflow渐渐废弃了老的非dynamicseq2seq接口,已经放到 tf.contrib.legacy_seq2seq目录下面。

tf.contrib.seq2seq下面的实现都是dynamic seq2seq接口。

按照googlerd说法下个月将会给出更加完善的接口和实现。

当前版本也可以使用这里尝试分析一下现有dynamic seq2seq的代码。

   

首先核心函数是seq2seq.py下面的 dynamic_rnn_decoder

   

这里首先看下dynamic的概念,即不需要确定的输入长度,以及batch 大小, 都可以动态。

但是注意首先每个batch对应所有样本的输入长度还是需要一样的 作为dense数据 否则 不可处理

   

这也就是说如果你需要特别在意速度的话,即使使用dyanmic 也可能还需要使用bucket来聚集相似长度的

输入样本作为一个batch 加速训练。

不过一般意义上不用的话,代码比较简单,加上dyanmicseq2seq 性能也可以接受,同时好处是每个batch

的样本可以完全随机。

   

dynamic_rnn_decoder核心是内部调用raw_rnn来实现迭代过程,这里的dynamic最主要体现在输入的

decoder_fn函数上面。

   

这个函数允许计算提前终止(early stop) 也就是说 假如你做inference,不用dynamic seq2seq

你一般的做法是指定一个 最大decode长度 比如20, 那么对应所有样本其实都需要decode走完20

Step 哪怕所有的样本对应输出序列长度都不大于10

   

而有了dynamic decode 当一个batch 所有的样本decode到达 类似<END>结束符之后,整个decode过程就

结束了。

   

但是注意这里仍然是以batch为基础的,也就是说有一个样本比如decode 2次就到达结束符,但是由于

组内其它样本没有结束,仍然需要所有样本继续向后解析,也就是说batch size越大,结束的可能越晚。

   

dynamic_rnn_decodertraininference两种模式,不过如果不使用attention,个人感觉train的时候直接

dynamic_rnn接口就可以了。

   

最后按照刚刚master的代码,seq2seq提供了decoder.py以及sampling_decoder.py等相关的示例,

这个接口更加简洁清晰,也就是说不再用context_state来记录用户其余的状态,而是用户自定义

output的结构 将其它信息也直接写入output

mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

转载于:https://www.cnblogs.com/rocketfan/p/6349025.html

你可能感兴趣的文章
短址(short URL)
查看>>
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>