关于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 深入理解yield
Sep 06 Python
详细解读Python的web.py框架下的application.py模块
May 02 Python
python实现线程池的方法
Jun 30 Python
Python多进程multiprocessing用法实例分析
Aug 18 Python
浅谈Python中的zip()与*zip()函数详解
Feb 24 Python
python 文件转成16进制数组的实例
Jul 09 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
如何用Python 加密文件
Sep 10 Python
python实现双向链表原理
May 25 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生成html分页列表的代码
2007/03/18 PHP
php将数据库导出成excel的方法
2010/05/07 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
PHP实现的简单日历类
2014/11/29 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
Python中subprocess模块用法实例详解
2015/05/20 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
DIY手工制作经营店创业计划书
2014/02/01 职场文书
四个太阳教学反思
2014/02/01 职场文书
函授药学自我鉴定
2014/02/07 职场文书
防灾减灾标语
2014/10/07 职场文书
python执行js代码的方法
2021/05/13 Python