我正嘗試在Tensor Flow中使用LSTM。我在網上找到了一個在線教程,其中包含一組序列,目標函數由LSTM的最後一個輸出和已知值組成。不過,我想讓我的目標函數使用每個輸出的信息。具體來說,我想有LSTM學習組序列(即學習所有的單詞在句子中的字母):Tensorflow:成本的張量列表
cell = rnn_cell.BasicLSTMCell(num_units)
inputs = [tf.placeholder(tf.float32,shape=[batch_size,input_size]) for _ in range(seq_len)]
result = [tf.placeholder(tf.float32, shape=[batch_size,input_size]) for _ in range(seq_len)]
W_o = tf.Variable(tf.random_normal([num_units,input_size], stddev=0.01))
b_o = tf.Variable(tf.random_normal([input_size], stddev=0.01))
outputs, states = rnn.rnn(cell, inputs, dtype=tf.float32)
losses = []
for i in xrange(len(outputs)):
final_transformed_val = tf.matmul(outputs[i],W_o) + b_o
losses.append(tf.nn.softmax(final_transformed_val))
cost = tf.reduce_mean(losses)
這樣做將導致錯誤:
TypeError: List of Tensors when single Tensor expected
如何我應該解決這個問題嗎? tf.reduce_mean()
是否接受張量值列表,還是有一些特殊張量對象需要它們?
明白了,我誤解了。我刪除了我的答案:)你可能想在你的文章中顯示教程中的代碼示例,因爲它可能會幫助新手(我也想了解它)。 – Will
我正在討論的代碼位於https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/models/rnn/ptb/ptb_word_lm.py#139,關於輸入的部分位於第90行,文件。該文件的第90行中的num_steps與OP代碼中的seq_len相同(粗略)。你會建議內聯整個__init__方法,還是隻提供鏈接到文件? –
啊,我明白了,是的,這是一個非常大的方法。我認爲這個文件的鏈接,有一些相關的文字和一些解釋,會使它變得最清楚。你的文章似乎是一個很好的起點,但是看到OP代碼部分不正確的部分的「正確示例」對我的想法會非常有幫助。 我有時使用的另一種策略是隻粘貼整個方法/類,但用'#...'替換不相關的行來縮短它。 – Will