关于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 相关文章推荐
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
Django多数据库的实现过程详解
Aug 01 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
python3爬取torrent种子链接实例
Jan 16 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
Numpy 多维数据数组的实现
Jun 18 Python
Python 实现Mac 屏幕截图详解
Oct 05 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
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
关于laravel 子查询 & join的使用
2019/10/16 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
python随机取list中的元素方法
2018/04/08 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
Python之指数与E记法的区别详解
2019/11/21 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
酒店经理职责
2014/01/30 职场文书
保护动物倡议书
2014/04/15 职场文书
促销活动总结报告
2014/04/26 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
教师见习报告范文
2014/11/03 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
闪闪的红星观后感
2015/06/08 职场文书
幼儿园六一主持词
2015/06/30 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA