关于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 相关文章推荐
在Linux中通过Python脚本访问mdb数据库的方法
May 06 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
Jul 15 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
Python yield 使用方法浅析
May 20 Python
解决DataFrame排序sort的问题
Jun 07 Python
Python中按值来获取指定的键
Mar 04 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
Django中提供的6种缓存方式详解
Aug 05 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
关于sys.stdout和print的区别详解
Dec 05 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
python 下载文件的几种方法汇总
Jan 06 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制作静态网站的模板框架
2006/10/09 PHP
第十一节--重载
2006/11/16 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
利用Python实现颜色色值转换的小工具
2016/10/27 Python
深入浅析python with语句简介
2018/04/11 Python
Django rest framework实现分页的示例
2018/05/24 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
pandas 层次化索引的实现方法
2019/07/06 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
培训主管岗位职责
2014/02/01 职场文书
大专毕业生求职信
2014/07/05 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
2015年招聘工作总结
2014/12/12 职场文书
2014年度工作总结报告
2014/12/15 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis