我很难理解神秘的RNN文档.任何有关以下的帮助将不胜感激.
tf.nn.dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None, dtype=None, parallel_iterations=None, swap_memory=False, time_major=False, scope=None)
Run Code Online (Sandbox Code Playgroud)
我很难理解这些参数如何与数学LSTM方程和RNN定义相关.单元格展开的大小在哪里?它是由输入的'max_time'维度定义的吗?batch_size只是分割长数据的便利还是与minibatch SGD有关?输出状态是否通过批次传递?
Flo*_*ker 17
tf.nn.dynamic_rnn 接收不相关序列的批次(具有小批量意义).
cell 是您要使用的实际单元格(LSTM,GRU,...)inputs有一个形状,batch_size x max_time x input_size其中max_time是最长序列中的步数(但所有序列可以是相同的长度)sequence_length是一个大小的向量,batch_size其中每个元素给出批处理中每个序列的长度(如果所有序列的大小相同,则将其保留为默认值.此参数是定义单元格展开大小的参数.处理隐藏状态的常用方法是在之前定义初始状态张量dynamic_rnn,例如:
hidden_state_in = cell.zero_state(batch_size, tf.float32)
output, hidden_state_out = tf.nn.dynamic_rnn(cell,
inputs,
initial_state=hidden_state_in,
...)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,无论是hidden_state_in与hidden_state_out具有相同的形状[batch_size, ...](实际形状取决于您所使用的细胞的类型,但重要的是,第一个维度是批量大小).
这样,dynamic_rnn每个序列都有一个初始隐藏状态.它将inputs自己从参数中的每个序列的时间步长传递到隐藏状态,hidden_state_out并将包含批处理中每个序列的最终输出状态.在同一批次的序列之间不传递隐藏状态,但仅在相同序列的时间步骤之间传递.
通常,在您进行培训时,每个批次都是无关的,因此您在执行操作时无需反馈隐藏状态session.run(output).
但是,如果您正在测试,并且您需要在每个时间步进行输出,(即您必须session.run()在每个时间步执行一次),您将需要使用以下内容评估和反馈输出隐藏状态:
output, hidden_state = sess.run([output, hidden_state_out],
feed_dict={hidden_state_in:hidden_state})
Run Code Online (Sandbox Code Playgroud)
否则tensorflow将cell.zero_state(batch_size, tf.float32)在每个时间步使用默认值,这相当于在每个时间步重新初始化隐藏状态.
| 归档时间: |
|
| 查看次数: |
3678 次 |
| 最近记录: |