关于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使用fileinput模块实现逐行读取文件的方法
Apr 29 Python
Python中的localtime()方法使用详解
May 22 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
python自动截取需要区域,进行图像识别的方法
May 17 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
python基础知识(一)变量与简单数据类型详解
Apr 17 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 Python
python数字转对应中文的方法总结
Aug 02 Python
Python list列表删除元素的4种方法
Nov 01 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人民币金额转大写实例代码
2015/10/02 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
php session_decode函数用法讲解
2019/05/26 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python中使用不同编码读写txt文件详解
2015/05/28 Python
python安装与使用redis的方法
2016/04/19 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
python实现列表的排序方法分享
2019/07/01 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
财务管理职业生涯规划范文
2013/12/27 职场文书
家长对孩子的评语
2014/04/18 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
政治表现评语
2014/05/04 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android
Redis基本数据类型List常用操作命令
2022/06/01 Redis