【问题标题】:Tensorflow: Identifying the final state in MultiRNNTensorflow:识别 MultiRNN 中的最终状态
【发布时间】:2018-08-10 11:36:03
【问题描述】:

我是 TF 新手,我正在尝试在 NN 中实现多个 GRU 单元。但是,我无法识别 MultiRNN 单元的最终状态。

例如,当我使用以下代码时:

num_units = [128, 128]
tf.reset_default_graph()
x = tf.placeholder(tf.int32, [None, 134])
y = tf.placeholder(tf.int32, [None]) 
embedding_matrix = tf.Variable(tf.random_uniform([153, 128], -1.0, 1.0))
embeddings = tf.nn.embedding_lookup(embedding_matrix, x) 
cells = [tf.contrib.rnn.GRUCell(num_units=n) for n in num_units]
cell_type = tf.contrib.rnn.MultiRNNCell(cells=cells, state_is_tuple=True)
cell_type = tf.contrib.rnn.DropoutWrapper(cell=cell_type, output_keep_prob=0.75)
_, (encoding, _) = tf.nn.dynamic_rnn(cell_type, embeddings, dtype=tf.float32)

最后一行代码的输出是:

(<tf.Tensor 'rnn/transpose_1:0' shape=(?, 134, 128) dtype=float32>, (<tf.Tensor 'rnn/while/Exit_3:0' shape=(?, 128) dtype=float32>, <tf.Tensor 'rnn/while/Exit_4:0' shape=(?, 128) dtype=float32>))

我认为格式是:

输出格式:(a,[b, c])

文档说输出格式为(输出,状态=[batch_size,cell.state_size])。但是,我无法确定其中哪一个是该存储单元的最终状态。我觉得应该是b。

另外,当我使用 4 个 GRU 单元运行上面的相同代码时:

num_units = [128, 128, 128, 128]

输出更加混乱:

输出格式:(a,[b, c, d, e])

我很困惑以上哪一个是最终的记忆状态,然后我可以进一步处理以进行损失计算和预测。

【问题讨论】:

    标签: python tensorflow rnn


    【解决方案1】:

    好的。我从here 找到了答案,它是 MultiRNN 堆栈中最后一个单元的状态。以下代码将根据已输入 num_units 的维度轻松提取适当的代码:

    num_units = [128, 128, 128, 128]
    rnn_output, final_states = tf.nn.dynamic_rnn(cell_type, embeddings, dtype=tf.float32)
    encoding = final_states[len(num_units)-1] # For GRU & RNN
    encoding = final_states[len(num_units)-1][0] # For LSTM
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2014-09-07
      • 2016-10-18
      • 2014-03-11
      相关资源
      最近更新 更多