在双向RNN中获得极低的损耗?

时间:2016-11-26 10:13:20

标签: python tensorflow recurrent-neural-network bidirectional

我使用var sample="This is a test this is a test" const re = /\b[\w']+(?:\s+[\w']+){0,2}/g; const wordList = sample.match(re); console.log(wordList);BasicLSTMCell在TensorFlow中实现了双向RNN。在连接我收到的输出后,我使用rnn.bidirectional_rnn计算损失。我的应用程序是下一个字符预测器。

我得到极低 seq2seq.sequence_loss_by_example,(比单向RNN小50倍)。我怀疑我在cost步骤中犯了一个错误。

这是我的模特 -

seq2seq.sequence_loss_by_example

1 个答案:

答案 0 :(得分:1)

我认为您的代码中没有任何错误。

问题是在您的应用程序中使用Bi-RNN模型的目标函数(下一个字符预测器)。

单向RNN(例如ptb_word_lmchar-rnn-tensorflow),它实际上是用于预测的模型,例如,如果raw_text1,3,5,2,4,8,9,0,那么,您的inputstarget将是:

inputs:   1,3,5,2,4,8,9
target:   3,5,2,4,8,9,0

,预测为(1)->3(1,3)->5,...,(1,3,5,2,4,8,9)->0

但是在Bi-RNN中,第一个预测实际上不仅仅是(1)->3,因为代码中的output[0]通过使用raw_text来提供bw_cell的反向信息(也不是(1,3)->5,...,(1,3,5,2,4,8,9)->0)。一个类似的例子是:我告诉你,花是玫瑰,而不是我让你预测花是什么?我认为你可以很容易地给我正确的答案,这也是你在Bi-RNN模型中获得极低loss的原因。

事实上,我认为Bi-RNN(或Bi-LSTM)不适合应用下一个角色预测器。 Bi-RNN在工作时需要完整的序列,当你想预测下一个角色时,你会发现你不能轻易使用这个模型。