我試圖在張量流中實現基於LSTM細胞的RNN。我在每一行中都有一個單詞序列,這些單詞組成了一個名爲labels(它是1或0)的特徵和一列作爲目標的列。我在解釋dynamic_RNN
的輸出時遇到困難。 dynamic_RNN
返回輸出和狀態。 我已經將我的數據分成了256個批次。我已將每行的填充/切片 的統一長度設置爲160.然後將它們嵌入(使用手套),以便每個單詞變成一百維矢量。在這之後,我的每個例子都變成了一個160×100的矩陣,並且每個RNN函數的批次變成一個形狀張量 - (256,160,100)。現在假定LSTM單元格的hidden_dimension設置爲300,每個示例(大小160 x 100)的隱藏狀態矢量的預期維度爲1 x 300.但是,當我檢查rnn_states.h
的形狀時,我得到以下 -解釋tensorflow輸出的困難dynamic_rnn
我期待的尺寸是256 x 300.我不知道如何繼續下去。
我在下面添加了一些代碼,我使用了它們的形狀。我有兩個張量 - train_context
和train_utterance
。我選擇每個樣本128個,之後嵌入並連接它們以形成256個輸入批次。你能告訴我我哪裏出錯了嗎?
train_context.get_shape()
# TensorShape([Dimension(128), Dimension(160)])
train_utterance.get_shape()
# TensorShape([Dimension(128), Dimension(160)])
context_embedded = tf.cast(tf.nn.embedding_lookup(embeddings_W,\
train_context, name="embed_context"), dtype = tf.float64)
utterance_embedded = tf.cast(tf.nn.embedding_lookup(embeddings_W,\
train_utterance, name="embed_utterance"), dtype = tf.float64)
context_embedded.get_shape()
# TensorShape([Dimension(128), Dimension(160), Dimension(100)])
utterance_embedded.get_shape()
# TensorShape([Dimension(128), Dimension(160), Dimension(100)])
inputs = tf.concat(0, [context_embedded, utterance_embedded])
inputs.get_shape()
# TensorShape([Dimension(256), Dimension(160), Dimension(100)])
cell = tf.nn.rnn_cell.LSTMCell(300, forget_bias=2.0, use_peepholes=True,\
state_is_tuple=True)
cell.state_size
# LSTMStateTuple(c=300, h=300)
rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell, inputs, dtype=tf.float64,\
parallel_iterations=64, time_major=False)
rnn_states.h.get_shape()
# TensorShape([Dimension(None), Dimension(300)])
我無法弄清楚,爲什麼尺寸無X 300。我期待它是提前256×300感謝。