我是tensorflow和rnn的新手,所以這裏是我對你的問題的思考。 假設你有一個由2000個單詞組成的語料庫(太小),第i個單元格的輸出是一個具有2000個元素的向量,每個元素對應一個概率,這個向量是第(i + 1)個單詞的預測概率分佈。 回到你的問題。
1.你只需要輸入[w1,w5,w2000,w750]到rnn,並且你得到四個向量,每個向量有2000個元素(語料庫中的單詞數量),然後你拿起最後一個輸出矢量,這就是第5個單詞的預測概率分佈,你也可以對這個矢量做一個argmax來找出第5個單詞最可能的單詞。
2.我不知道這個問題,即使我可以給任何給定的序列分配一個概率。
3.也考慮到你的輸入[w1,w5,w2000,w750],在計算rnn後,你有四個輸出向量表示爲[v1,v2,v3,v4],然後你只需要找到w5在v1中,w2000在v2中,w750在v3中,並乘以這些概率,這就是你輸入的概率。(因爲v4用來預測這個序列的下一個單詞,所以沒有使用v4,因爲它通常是不用的起始令牌)
編輯:
一旦你已經訓練你的模型,你應該得到一個嵌入矩陣embedding
,一個RNN細胞cell
和SOFTMAX權/偏見softmax_w
/softmanx_b
,您可以用這三樣東西
python def inference(inputs): """ inputs: a list containing a sequence word ids """ outputs = [] state = cell.zero_state(1,tf.float32) # 1 means only one sequence embed = tf.embedding_lookup(embedding,inputs) sequence_length = len(inputs) for i in range(sequence_length): cell_output,state = cell(embed[:,i,:],state) logits = tf.nn.xw_plus_b(cell_output,softmax_w,softmax_b) probability = tf.nn.softmax(logits) outputs.append(probability) return outputs
的最終輸出一個列表方含len(inputs)
矢量/張量生成的輸出,你可以用sess.run(tensor)
獲得在numpy.array
形式張量的值。 這是我寫的一個簡單的函數,應該給你一個關於如何在完成培訓時生成輸出的總體思路
我不知道如何提供輸入並獲取代碼中的輸出。 – Ash