gpt4 book ai didi

python - TensorFlow dynamic_rnn 状态

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:13 25 4
gpt4 key购买 nike

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

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

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

三个序列返回的三个隐藏状态是单元格在时间步长 30 时的状态,还是我在时间步长 [10,20,30] 时返回的状态?

最佳答案

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

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 中相同的向量,它们是每个批处理实例的最后一个非零输出。

关于python - TensorFlow dynamic_rnn 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48238113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com