zoukankan      html  css  js  c++  java
  • Dynamic seq2seq in tensorflow

    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

  • 相关阅读:
    LeetCode 70
    LeetCode 81
    LeetCode 33
    LeetCode 78
    LeetCode 50
    LeetCode 34
    关于机器学习的学习笔记
    图的 DFS 与 BFS 复杂度分析
    Sqlalchemy的学习使用和常见问题
    mysql的使用和远程连接
  • 原文地址:https://www.cnblogs.com/rocketfan/p/6349025.html
Copyright © 2011-2022 走看看