关于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如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
python自动裁剪图像代码分享
Nov 25 Python
Python数字图像处理之霍夫线变换实现详解
Jan 12 Python
python远程连接服务器MySQL数据库
Jul 02 Python
Python 的AES加密与解密实现
Jul 09 Python
Django 请求Request的具体使用方法
Nov 11 Python
Pytorch之view及view_as使用详解
Dec 31 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 Python
 python中的元类metaclass详情
May 30 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
收音机的保养
2021/03/01 无线电
如何隐藏你的.php文件
2007/01/04 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
PHP对象实例化单例方法
2017/01/19 PHP
PDO::rollBack讲解
2019/01/29 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
python读取word文档的方法
2015/05/09 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python判断两个对象相等的原理
2017/12/12 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
python3判断url链接是否为404的方法
2018/08/10 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
python交换两个变量的值方法
2019/01/12 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
模具毕业生推荐信
2014/02/15 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
员工离职感谢信
2015/01/22 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
python垃圾回收机制原理分析
2022/04/13 Python