关于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实现的一个自动售饮料程序代码分享
Aug 25 Python
简单的Python2.7编程初学经验总结
Apr 01 Python
python如何通过protobuf实现rpc
Mar 06 Python
python 排序算法总结及实例详解
Sep 28 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
如何使用Python实现自动化水军评论
Jun 26 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
python之随机数函数的实现示例
Dec 30 Python
pandas中DataFrame检测重复值的实现
May 26 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 similar_text 字符串的相似性比较函数
2010/05/26 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
Python enumerate遍历数组示例应用
2008/09/06 Python
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
python实现的重启关机程序实例
2014/08/21 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python函数超时自动退出的实操方法
2020/12/28 Python
应届生服装设计自我评价
2013/09/20 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
合作协议书范本
2014/04/17 职场文书
运动会加油口号
2014/06/07 职场文书
小学师德师风整改措施
2014/10/27 职场文书
2014年网管工作总结
2014/12/11 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
JavaScript 原型与原型链详情
2021/11/02 Javascript
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS