关于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编程中对super函数的正确理解和用法解析
Jul 02 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
Python如何为图片添加水印
Nov 25 Python
python文件特定行插入和替换实例详解
Jul 12 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
用Python逐行分析文件方法
Jan 28 Python
python实现连连看辅助(图像识别)
Mar 25 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
详解python程序中的多任务
Sep 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
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
js tab效果的实现代码
2009/12/26 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
举例讲解Python中is和id的用法
2015/04/03 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
Python jieba库分词模式实例用法
2021/01/13 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
什么是封装
2013/03/26 面试题
大学生职业生涯设计书
2014/01/02 职场文书
七年级生物教学反思
2014/01/30 职场文书
建筑工地质量标语
2014/06/12 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
个人年终总结范文
2015/03/09 职场文书
总结会主持词
2015/07/02 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
初三英语教学反思
2016/02/15 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
PHP使用非对称加密算法RSA
2021/04/21 PHP
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL