当前位置: 首页 > 面试题库 >

TensorFlow dynamic_rnn状态

傅花蜂
2023-03-14
问题内容

我的问题是关于TensorFlow方法tf.nn.dynamic_rnn。它返回每个时间步长和最终状态的输出。

我想知道返回的最终状态是最大序列长度的单元格状态还是由sequence_length参数单独确定。

为了更好地理解示例,我有3个具有长度的序列,[10,20,30]并返回最终状态[3,512](如果单元格的隐藏状态的长度为512)。

这三个序列的三个返回的隐藏状态是在时间步30处的单元格状态还是我在时间步处恢复了状态[10,20,30]


问题答案:

tf.nn.dynamic_rnn返回两个张量:outputsstates

outputs保存所有细胞在批处理的所有序列的输出。因此,如果特定序列更短并用零填充,outputs则最后一个像元的将为零。

states保持最后的细胞状态,或者等价每个序列的最后一个非零输出(如果您正在使用BasicRNNCell)。

这是一个例子:

import numpy as np
import tensorflow as tf

n_steps = 2
n_inputs = 3
n_neurons = 5

X = tf.placeholder(dtype=tf.float32, shape=[None, n_steps, n_inputs])
seq_length = tf.placeholder(tf.int32, [None])

basic_cell = tf.nn.rnn_cell.BasicRNNCell(num_units=n_neurons)
outputs, states = tf.nn.dynamic_rnn(basic_cell, X, sequence_length=seq_length, dtype=tf.float32)

X_batch = np.array([
  # t = 0      t = 1
  [[0, 1, 2], [9, 8, 7]], # instance 0
  [[3, 4, 5], [0, 0, 0]], # instance 1
])
seq_length_batch = np.array([2, 1])

with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  outputs_val, states_val = sess.run([outputs, states], 
                                     feed_dict={X: X_batch, seq_length: seq_length_batch})

  print('outputs:')
  print(outputs_val)
  print('\nstates:')
  print(states_val)

打印类似:

outputs:
[[[-0.85381496 -0.19517037  0.36011398 -0.18617202  0.39162001]
  [-0.99998015 -0.99461144 -0.82241321  0.93778896  0.90737367]]

 [[-0.99849552 -0.88643843  0.20635395  0.157896    0.76042926]
  [ 0.          0.          0.          0.          0.        ]]]  # because len=1

states:
[[-0.99998015 -0.99461144 -0.82241321  0.93778896  0.90737367]
 [-0.99849552 -0.88643843  0.20635395  0.157896    0.76042926]]

请注意,states保持与中的向量相同output,它们是每个批处理实例的最后一个非零输出。



 类似资料:
  • 查看工作树的状态。 用法 git status 形态 On branch master nothing to commit, working tree clean On branch master,告诉你当前所在的分支叫 master。nothing to commit,没什么可以提交的东西,working tree clean,因为工作树是干净的。意思就是你的项目还没做什么修改,比如修改了文

  • 注:在 Status.Code 中通过枚举的方式定义状态码,这些状态码的定义非常的有参考和借鉴价值,因此详细翻译了一遍。 定义和注释 OK(0):成功 操作成功完成 CANCELLED(1):被取消 操作被取消(通常是被调用者取消) UNKNOWN(2):未知 未知错误。这个错误可能被返回的一个例子是,如果从其他地址空间接收到的状态值属于在当前地址空间不知道的错误空间(注:看不懂。。。)。此外,A

  • 帮助用户快速部署有状态的应用。 有状态应用即Statefulset。Statefulset的详细介绍内容,请参考kubernets官方文档-Statefulsets。 Pod是Kubernetes的最小编排单位,有状态statefulset主要用于部署实例之间有不对等关系,以及实例对外部数据有依赖关系的有状态应用。基于statefulset部署的应用有以下特点: 基于statefulset部署的p

  • 帮助用户快速部署无状态的应用。 无状态应用即Deployment,Deployment的详细介绍内容,请参考kubernets官方文档-Deployments。 Pod是Kubernetes的最小编排单位,无状态deployment应用即通过声明pod模板等信息编排部署无状态应用,适用于pod完全一样、没有顺序、无所谓运行在哪台主机的应用。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中

  • 这次使用两种数据来控制一个定制组件: props 和 state。props 是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变。对于需要改变的数据(即变量)需要引入 state。 一般来说,需要在 constructor 中初始化 state。然后在需要修改时调用 setState 方法。 下例是制作一段不断闪烁的文字实例代码,其做法就是定时改变 <Text> 中的文字为空字符

  • Vim允许自定义每个窗口底部的状态条显示的文字,你可以通过设置statusline选项来进行自定义。执行下面的命令: :::vim :set statusline=%f 你可以在状态条上看到当前所编辑文件的路径(相对于当前路径)。再执行这个命令: :::vim :set statusline=%f\ -\ FileType:\ %y 现在你可以在状态条中看到类似foo.markdown - F

  • 问题内容: 我想为我的用户提供一种有关进度状态的信息。我发现了几个组件,例如: Richfaces状态或IceFaces连接状态 因此,我想在页面上添加类似的内容,尤其是对于ajax请求。最简单的实现方法是什么?我不想使用这些组件之一,而是想编写自己的组件,但我无法想象它需要多少努力:-) 我很感谢你的想法… 问题答案: 标准的JSF实现没有为此提供现成的组件。但是,JSF 2.0规范 在第13.

  • 在广播模式的文档中,提到没有RocksDB状态后端: 如果应用程序使用rocksdb作为状态后端,这将如何影响保存点行为?这是否意味着状态在保存点期间不存储,因此不会恢复?