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

  • 相关阅读:
    Ajax的个人总结
    JSON和计算机网络的个人总结
    Bootstrap内辅助类,响应式工具,组件的个人总结
    Bootstrap内栅格布局,表格,按钮,图片的个人总结
    [BUG] Linux font family error #153
    WPF在WindowStyle=None时去掉顶部白条
    WPF 之 左键弹出操作菜单,并禁用右键菜单
    WPF 气泡提示框的简单实现
    WPF TextBox 如何简单粗暴的实现水印效果?
    c#笔记--WPF文本框和密码框添加水印效果(背景文字提示)
  • 原文地址:https://www.cnblogs.com/rocketfan/p/6349025.html
Copyright © 2011-2022 走看看