关于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 相关文章推荐
50行Python代码实现人脸检测功能
Jan 23 Python
python模块导入的细节详解
Dec 10 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
对Python中的条件判断、循环以及循环的终止方法详解
Feb 08 Python
实例详解Python模块decimal
Jun 26 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
Python sqlite3查询操作过程解析
Feb 20 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
django有哪些好处和优点
Sep 01 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
python线程优先级队列知识点总结
Feb 28 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 Cookie的使用教程详解
2013/06/03 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
学习YUI.Ext 第三天
2007/03/10 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
Python import与from import使用及区别介绍
2018/09/06 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python assert的用处示例详解
2019/04/01 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
大学生职业规划书的范本
2014/02/18 职场文书
高中学校对照检查材料
2014/08/31 职场文书
个人维稳承诺书
2015/05/04 职场文书
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫
vue封装数字翻牌器
2022/04/20 Vue.js