关于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查询Mysql时返回字典结构的代码
Jun 18 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
python连接mysql实例分享
Oct 09 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
python实现点击按钮修改数据的方法
Jul 17 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
python实现飞行棋游戏
Feb 05 Python
Python字符串格式化f-string多种功能实现
May 07 Python
理解Django 中Call Stack机制的小Demo
Sep 01 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
python 标准库原理与用法详解之os.path篇
Oct 24 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守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
php购物车实现代码
2011/10/10 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
简单实现python画圆功能
2018/01/25 Python
python中的闭包函数
2018/02/09 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
大学生实习自我鉴定
2013/12/11 职场文书
股东协议书
2014/04/14 职场文书
律师授权委托书范本
2014/10/07 职场文书
工程承包协议书
2014/10/20 职场文书
mysql查看表结构的三种方法总结
2022/07/07 MySQL