关于tf.reverse_sequence()简述


Posted in Python onJanuary 20, 2020

tf.reverse_sequence()简述

在看bidirectional_dynamic_rnn()的源码的时候,看到了代码中有调用 reverse_sequence()这一方法,于是又回去看了下这个函数的用法,发现还是有点意思的。根据名字就可以能看得出,这个方法主要是用来翻转序列的,就像双线LSTM中在反向传播那里需要从下文往上文处理一样,需要对序列做一个镜像的翻转处理。

先来看一下这个方法的定义:

reverse_sequence(
  input,
  seq_lengths,
  seq_axis=None,
  batch_axis=None,
  name=None,
  seq_dim=None,
  batch_dim=None)

其中input是输入的需要翻转的目标张量,seq_lengths是一个张量;

其元素是input中每一处需要翻转时翻转的长度,在双向LSTM中这个值统一被设为输入语句的长度,代表着整句话都需要被翻转,而实际上张量中的元素值可以是不同的,下面的例子中就可以看出;

seq_axis和seq_dim的关系,在源码中做了如下操作:

seq_axis = deprecation.deprecated_argument_lookup("seq_axis", seq_axis,
                          "seq_dim", seq_dim)

返回中return gen_array_ops.reverse_sequence(..., seq_dim=seq_axis,...),同理,对于batch_axis和batch_dim也是相同的处理。意义上来说,按照官方给出的解释,“此操作首先沿着维度batch_axis对input进行分割,并且对于每个切片 i,将前 seq_lengths 元素沿维度 seq_axis 反转”。实际上通俗来理解,就是对于张量input中的第batch_axis维中的每一个子张量,在这个子张量的第seq_axis维上进行翻转,翻转的长度为 seq_lengths 张量中对应的数值。

举个例子,如果 batch_axis=0,seq_axis=1,则代表我希望每一行为单位分开处理,对于每一行中的每一列进行翻转。相反的,如果 batch_axis=1,seq_axis=0,则是以列为单位,对于每一列的张量,进行相应行的翻转。回头去看双向RNN的源码,就可以理解当time_major这一属性不同时,time_dim 和 batch_dim 这一对组合的取值为什么恰好是相反的了。

写一个简单的测试代码:

a = tf.constant([[1,2,3], [4,5,6], [7,8,9]])
l = tf.constant([1,2,3],tf.int64) # 每一次翻转长度分别为1,2,3.由于a是(3,3)维的,所以l中数值最大只能是3
x = tf.reverse_sequence(a,seq_lengths=l,seq_axis = 0,batch_axis= 1) # 以列为单位进行翻转,翻转的是每一行的元素
y = tf.reverse_sequence(a,seq_lengths=l,seq_axis = 1,batch_axis= 0) # 以行为单位进行翻转,翻转的是每一列的元素
with tf.Session() as sess:
  print(sess.run(x))
  print(sess.run(y))

结果如下:

# 每一列上的元素种类没有发生变化,但是从每一行来看,行的顺序分别翻转了前1,前2,前3个元素
[[1 5 9]
 [4 2 6]
 [7 8 3]]
# 每一行上的元素种类没有发生变化,但是从每一列来看,列的顺序分别翻转了前1,前2,前3个元素
[[1 2 3]
 [5 4 6]
 [9 8 7]]

以上这篇关于tf.reverse_sequence()简述就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用python实现的可以拷贝或剪切一个文件列表中的所有文件
Apr 30 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
关于Python作用域自学总结
Jun 10 Python
python 中如何获取列表的索引
Jul 02 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
python集合删除多种方法详解
Feb 10 Python
快速了解Python开发环境Spyder
Jun 29 Python
Python requests上传文件实现步骤
Sep 15 Python
Django中template for如何使用方法
Jan 31 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 #Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
Jan 20 #Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 #Python
python机器学习库xgboost的使用
Jan 20 #Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 #Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 #Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 #Python
You might like
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
JS控制表格隔行变色
2006/06/26 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
深入探讨前端框架react
2015/12/09 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
pytorch masked_fill报错的解决
2020/02/18 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
党员群众路线承诺书
2014/05/20 职场文书
2014国庆节标语口号
2014/09/19 职场文书
初三毕业评语
2014/12/26 职场文书
个人原因辞职信模板
2015/05/13 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书