tensor flow dynamic_rnn 与rnn有啥区别?
来源:互联网 发布:js创建一个对象的方法 编辑:程序博客网 时间:2024/06/05 19:53
最近看了一下rnn.py中的源码。由于水平有限,没有完全看懂,看到rnn函数和dynamic_rnn函数的时候,总感觉这两函数没啥区别,只是一个输入是 list of tensor,另一个是tensor。而且dynamic并没有想象的那么dynamic,只是将填充的部分输出为0。
在每一个train step,传入model的是一个batch的数据(这一个batch的数据forward得到predictions,计算loss,backpropagation更新参数),这一个batch内的数据一定是padding成相同长度的。那么,如果可以只在一个batch内部进行padding,例如一个batch中数据长度均在6-10这个范围内,就可以让这个batch中所有数据pad到固定长度10,而整个dataset上的数据最大长度很可能是100,这样就不需要让这些数据也pad到100那么长,白白浪费空间。所以dynamic_rnn实现的功能就是可以让不同迭代传入的batch可以是长度不同数据,但同一次迭代一个batch内部的所有数据长度仍然是固定的。例如,第一时刻传入的数据shape=[batch_size, 10],第二时刻传入的数据shape=[batch_size, 12],第三时刻传入的数据shape=[batch_size, 8]等等。但是rnn不能这样,它要求每一时刻传入的batch数据的[batch_size, max_seq],在每次迭代过程中都保持不变。这样不就必须要求全部数据都要pad到统一的max_seq长度了吗?是的,但也有个折中办法。——将数据集的sequence length做个初步统计,看会落在哪几个区间段内。然后根据区间段将数据进行归类,也就是所谓的放在不同buckets中。最后用rnn为每一个buckets都创建一个sub graph。训练的时候,根据当前batch data所归属的bucket id,找到它对应的sub graph,进行参数更新(虽然是不同的sub graph,但参数是共享的。至少tensorflow中是这么实现的~\(≧▽≦)/~)具体可参看,另外,两者的输入形式确实不同,但你提到的“将填充的部分输出为0”,给rnn传入sequence_length这个参数后,也是可以的。
- tensor flow dynamic_rnn 与rnn有啥区别?
- tf.contrib.rnn.static_rnn与tf.nn.dynamic_rnn区别
- tensor flow 与dask
- tensor flow在mac下的编译与安装
- Tensor flow 简介
- tensor flow学习网站
- tensor flow学习笔记
- static_rnn 和dynamic_rnn的区别
- TensorFlow,Tensor,Flow(HR)
- Mac pro 安装 tensor flow
- 罗斯基白话:TensorFlow+实战系列(一)之详解Tensor与Flow
- mac上安装docker + tensor flow
- TensorFlow学习(基于书本Tensor Flow实战)
- Tensor Flow 小试牛刀(回归模型)
- tensorflow dynamic_rnn与static_rnn使用注意
- CNN、RNN、DNN的内部网络结构有什么区别?
- Stress与Strain+Tensor
- Tensor Flow shuffle_batch 的方式读csv文件的例子
- Highway 湘潭邀请赛(江苏省赛)----树的直径
- 枚举进程中的模块
- 10-排序6 Sort with Swap(0, i) (25分)
- 基于Spring注解实现工厂模式
- codevs1711/洛谷P1436棋盘分割(noi1999)
- tensor flow dynamic_rnn 与rnn有啥区别?
- 基于OpenCV的离散正弦变换
- XTU 1264 Partial Sum 2017年“嘉杰信息杯” 中国大学生程序设计竞赛全国邀请赛(湖南)
- HDU-5877-Weak Pair
- 机器学习-周志华-个人练习11.3
- Java健壮的单例模式
- Codeforces Round #362 (Div. 2) D Puzzles
- 我自己的个人博客
- PAT甲级1008