当前位置: 首页 > 编程笔记 >

关于tf.reverse_sequence()简述

陈季
2023-03-14
本文向大家介绍关于tf.reverse_sequence()简述,包括了关于tf.reverse_sequence()简述的使用技巧和注意事项,需要的朋友参考一下

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编程语言。正如Swaroop在本书中所说的那样,它很快就成为“我最喜欢的编程语言”。目前我的几乎所有编程工作都使用Python。从我的切身体会来说,Python最大的特点就是易懂、易用、高效率。我相信,如果你已经学完了本书,并且尝试着编写了一些程序后,你一定会有相同的感受。 Swaroop C. H.的这本书是我学习Python时的第一本教材。它简单明晰,可以在

  • 本文向大家介绍关于JSON与JSONP简单总结,包括了关于JSON与JSONP简单总结的使用技巧和注意事项,需要的朋友参考一下 一、什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3

  • DedeCMS 简介:   织梦内容管理系统(DedeCMS)是国内最流行的CMS解决方案之一,居于现时最流行的LAMP架构开发,具有很强的可扩展性,并且完全开放源代码。自从出生以来,DedeCMS就一直以简单易用,灵活扩展而闻名,目前已有超过三十万个站点正在使用本系统。居于3.5代架构的DedeCMS V5.3版本,在扩展性方便更加突出,具有如下的特点:   1、主信息使用微表进行索引,从而杜绝

  • 如果有人有使用Simple SAML(PHP)的经验https://github.com/onelogin/php-saml我将非常感谢您的帮助。 首先,我已经让它工作了。我的应用程序是服务提供商,它确实允许外部身份提供商进行身份验证。万岁! 然而,作为该过程的一部分,我提出了两个问题: 1) 我的SP生成元数据URL。如果客户机已经提供了其IDP的详细信息,那么该代码可以正常工作。我可以看到ph

  • 如下考虑Java类,其中是的字段,而是类中方法的局部变量。 声称:

  • 本文向大家介绍关于 标签的enctype属性你有哪些了解?相关面试题,主要包含被问及关于标签的enctype属性你有哪些了解?时的应答技巧和注意事项,需要的朋友参考一下 代表了form表单提交的数据发送到服务器如何进行编码, 默认是会对所有字符进行编码,空格转换+,特殊字符转换ASCLL muitipart/form-data 不对字符进行编码,传递文件时该值是必需的 text/plain 对空格

  • ChartBuilder的使命: 让更多的人通过可视化发现数据的价值,帮助非专业工程师通过图形化界面,轻松搭建专业水准的可视化场景。 ChartBuilder官方文档,在每次ChartBuilder升级时同步更新。

  • Yearning是一款可满足大部分公司SQL审核需求的web端可视化SQL审核平台。在实现常规的sql审核功能外还添加了诸如数据查询等一系列便捷的功能。 如有相关的功能建议 及 bug 欢迎issues及电邮 联系方式: 电邮:henry@yearning.io Yearning 使用交流QQ群 1群: 747364310(已满) 2群:363323798 Author: Henry.Yee 免责