关于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爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
python通过get,post方式发送http请求和接收http响应的方法
May 26 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
python机器学习之随机森林(七)
Mar 26 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
Python API len函数操作过程解析
Mar 05 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
python中uuid模块实例浅析
Dec 29 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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木马攻击防御之道
2008/03/24 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
js实现全选和全不选
2020/07/28 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
Python实现分割文件及合并文件的方法
2015/07/10 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
JSON Web Tokens的实现原理
2017/04/02 Python
Python将图片转换为字符画的方法
2020/06/16 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python制作图片缩略图
2019/04/30 Python
python区块及区块链的开发详解
2019/07/03 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
企划主管岗位职责
2013/12/12 职场文书
社团成立邀请函
2014/01/08 职场文书
微博营销计划书
2014/01/10 职场文书
校本研修个人总结
2015/02/28 职场文书
投标单位介绍信
2015/05/05 职场文书
唐山大地震观后感
2015/06/05 职场文书
单位工作证明范本
2015/06/15 职场文书
分享python函数常见关键字
2022/04/26 Python