- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章关于tf.reverse_sequence()简述由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
tf.reverse_sequence()简述 。
在看bidirectional_dynamic_rnn()的源码的时候,看到了代码中有调用 reverse_sequence()这一方法,于是又回去看了下这个函数的用法,发现还是有点意思的。根据名字就可以能看得出,这个方法主要是用来翻转序列的,就像双线LSTM中在反向传播那里需要从下文往上文处理一样,需要对序列做一个镜像的翻转处理.
先来看一下这个方法的定义:
1
2
3
4
5
6
7
8
|
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的关系,在源码中做了如下操作:
1
2
|
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 这一对组合的取值为什么恰好是相反的了.
写一个简单的测试代码:
1
2
3
4
5
6
7
|
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
4
5
6
7
8
|
# 每一列上的元素种类没有发生变化,但是从每一行来看,行的顺序分别翻转了前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()简述就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/cerisier/article/details/80118611 。
最后此篇关于关于tf.reverse_sequence()简述的文章就讲到这里了,如果你想了解更多关于关于tf.reverse_sequence()简述的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
做数据分析、科学计算等离不开工具、语言的使用,目前最流行的数据语言,无非是MATLAB,R语言,Python这三种语言,但今天小编简单总结了python语言的一些特点及平常使用的工具等。 为
服务器和应用程序日志记录是开发人员、运维人员和安全团队了解应用程序在其生产环境中运行状态的重要工具。 日志记录使运维人员能够确定应用程序和所需组件是否运行平稳,并检测是否发生了异常情况,以便他们能
了解程序集如何在C#.NET中加载 我们一直在处理库和NuGet软件包。不管是好是坏,高级.NET开发人员都需要了解.NET运行时如何加载程序集。 这些库依赖于其他流行的库,并且有很多共享的
目录 Java注解(annotation)简单上手 1、什么是注解? 2、java内置注解 3、注解的基本运 总结 Java注解(a
系列最后一篇来说说Python中的类与对象,Python这门语言是无处不对象,如果你曾浅要了解过Python,你应该听过Python是一种面向对象编程的语言,所以你经常可能会看到面向“对象”编程这类
tf.reverse_sequence()简述 在看bidirectional_dynamic_rnn()的源码的时候,看到了代码中有调用 reverse_sequence()这一方法,于是又回去
目录 (一)hog特征提取 (二)dlib库 (三)卷积神经网络特征提取(cnn) 人脸图像特征提取方法
代码如下: <?php /* 边学边做的,为方便自己翻阅而发布,更为得到高人指点而发布,欢迎高手指点...... 【提示】本例通过
我是一名优秀的程序员,十分优秀!