- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在阅读 Hands on ML 的第二部分并且正在寻找关于何时使用“输出”以及何时在 RNN 的损失计算中使用“状态”的一些清晰度。
在书中(对于那些拥有该书的人,第 396 页),作者说,“请注意,全连接层连接到 states
张量,它仅包含 RNN 的最终状态,”引用到展开超过 28 个步骤的序列分类器。自 states
变量将有 len(states) == <number_of_hidden_layers>
,在构建深度 RNN 时,我一直使用 states[-1] 来仅连接到最后一层的最终状态。例如:
# hidden_layer_architecture = list of ints defining n_neurons in each layer
# example: hidden_layer_architecture = [100 for _ in range(5)]
layers = []
for layer_id, n_neurons in enumerate(hidden_layer_architecture):
hidden_layer = tf.contrib.rnn.BasicRNNCell(n_neurons,
activation=tf.nn.tanh,
name=f'hidden_layer_{layer_id}')
layers.append(hidden_layer)
recurrent_hidden_layers = tf.contrib.rnn.MultiRNNCell(layers)
outputs, states = tf.nn.dynamic_rnn(recurrent_hidden_layers,
X_, dtype=tf.float32)
logits = tf.layers.dense(states[-1], n_outputs, name='outputs')
鉴于作者之前的陈述,这按预期工作。但是,我不明白什么时候会使用 outputs
变量(tf.nn.dynamic_rnn()
的第一个输出)
我看过this question ,它很好地回答了细节问题,并提到,“如果您只对单元格的最后一个输出感兴趣,您可以只对时间维度进行切片以仅选择最后一个元素(例如 outputs[:, -1, :]
)。 “我推断这意味着类似于 states[-1] == outputs[:, -1, :]
的意思,这在测试时是错误的。为什么不是这样呢?如果输出是单元格在每个时间步长的输出,为什么不是这样呢?一般来说...
什么时候使用 outputs
来自 tf.nn.dynamic_rnn()
的变量在损失函数中,什么时候使用 states
多变的?这如何改变网络的抽象架构?
任何清晰度将不胜感激。
最佳答案
这基本上把它分解了:
outputs
:RNN 顶层输出的完整序列。这意味着,如果您使用 MultiRNNCell
,这将只是 top 单元格;这里没有来自下层牢房的任何东西。
一般来说,使用自定义的 RNNCell
实现,这几乎可以是任何东西,但是几乎所有标准单元都在这里返回 states 的序列,但是你也可以写一个自定义单元格,在将其作为输出返回之前对状态序列执行某些操作(例如线性变换)。
state
(注意这是文档中的称呼,不是states
)是last<的完整状态/em> 时间步长。一个重要的区别是,在 MultiRNNCell
的情况下,这将包含序列中所有 单元格的最终状态,而不仅仅是顶部的单元格!此外,此输出的精确格式/类型在很大程度上取决于所使用的 RNNCell
(例如,它可能是一个张量,或一个张量元组......)。
因此,如果您只关心 MultiRNNCell
中最后一个时间步的最顶层状态,您确实有两个应该相同的选项,具体取决于个人喜好/"清晰度”:
outputs[:, -1, :]
(假设批处理主要格式)仅从顶级状态序列中提取最后一个时间步长。state[-1]
仅从所有层的最终状态元组中提取顶级状态。在其他情况下您可能没有此选择:
outputs
。MultiRNNCell
中较低层的最终状态,您需要使用 state
。至于相等性检查失败的原因:如果您实际使用了 ==
,我相信这会检查明显不同的张量 对象 是否相等。您可以改为尝试检查两个对象的值,以了解一些简单的玩具场景(微小的状态大小/序列长度)——它们应该相同。
关于python - tf.nn.dynamic_rnn() "outputs"与 "state"的概念理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57270125/
我试图在长字符序列中标记字母。数据的固有结构要求我使用双向方法。 此外基于on this idea我需要在每个时间步访问隐藏状态,而不仅仅是最后一个。 为了尝试这个想法,我使用了固定长度的方法。我目前
我目前正在使用 tf.Dynamic RNN 构建文本分类模型。我的输入长度不同,因此我将输入填充为相同(最大)长度。 我在 tf.nn.dynamic_rnn 中使用了 sequence_lengt
似乎 tf.nn.dynamic_rnn 已被弃用: Warning: THIS FUNCTION IS DEPRECATED. It will be removed in a future vers
我的问题是关于 TensorFlow 方法 tf.nn.dynamic_rnn。它返回每个时间步的输出和最终状态。 我想知道返回的最终状态是最大序列长度的细胞状态,还是由 sequence_lengt
我想加速我的 LSTM 网络,但是当我将它用于 OCR(其中序列具有可变长度)时,我不能使用普通的 LSTM 实现。这就是我使用“tf.nn.dynamic_rnn”的原因。 基于 tensorflo
我正在尝试构建 CNN + RNN 模型,但收到以下错误。任何帮助将不胜感激。 fc2 has shape (?,4096) cell = tf.contrib.rnn.BasicLSTMCell(s
在tensorflow中,tf.nn.static_rnn和tf.nn.dynamic_rnn有什么区别,什么时候用? 两者都采用一个 sequence_length 参数,使计算适应输入的实际长度;
对于单个的 RNNCell , 使用色的 call 函数进行运算时 ,只是在序列时间上前进了一步 。 如使用 x1、 ho 得到此h1, 通过 x2 、 h1 得到 h2 等
我无法理解 tf.nn.dynamic_rnn 的输出 tensorflow 函数。该文档仅说明输出的大小,但并未说明每行/列的含义。从文档: outputs: The RNN output Tens
tensorflow.nn.dynamic_rnn给定 cell 创建一个循环神经网络,它是 RNNCell 的一个实例,并返回一对包含: outputs:RNN 输出张量 state:最终状态 这是
我有一个形状为 [batch, None, dim] 的 3-D 张量,其中第二维(即时间步长)是未知的。我使用 dynamic_rnn 来处理此类输入,如以下代码片段所示: import numpy
我正在尝试使用 tf.nn.dynamic_rnn 在 TensorFlow 0.9.0 中使用词嵌入和递归神经网络编写语言模型。图操作,但我不明白input是怎么回事张量是结构化的。 假设我有一个包
我想保存我的 LSTM 的最终状态,以便在我恢复模型时包含它并可用于预测。如下所述,当我使用 tf.assign 时,Saver 只知道最终状态。但是,这会引发错误(也在下面解释)。 在训练期间,我总
我正在尝试使用低级 API tf.nn.raw_rnn 复制 tf.nn.dynamic_rnn 的行为。为此,我使用相同的数据 block 、设置随机种子并使用相同的 hparams 来创建单元格和
我想构建一个用于回归的玩具 LSTM 模型。 This不错的教程对于初学者来说已经太复杂了。 给定一个长度为 time_steps 的序列,预测下一个值。考虑 time_steps=3 和序列: ar
根据Tensorflow官网,(https://www.tensorflow.org/api_docs/python/tf/contrib/rnn/BasicLSTMCell#zero_state)z
我无法理解 tensorflow 的 dynamic_rnn 的输入参数.如果我能理解如何转换 static_rnn 会很有帮助输入 dynamic_rnn输入。 对于 static_rnn ,输入应
这里我问的是动态行为是如何工作的。这是 tensorflow documentation对于上面的dynamic_rnn函数。该函数创建的 RNN 输入 block 的最大长度是多少?它会根据最大的输
默认情况下,函数 dynamic_rnn 只输出每个时间点的隐藏状态(称为 m),可以通过以下方式获得: cell = tf.contrib.rnn.LSTMCell(100) rnn_outputs
上下文 我正在阅读 Hands on ML 的第二部分并且正在寻找关于何时使用“输出”以及何时在 RNN 的损失计算中使用“状态”的一些清晰度。 在书中(对于那些拥有该书的人,第 396 页),作者说
我是一名优秀的程序员,十分优秀!