我使用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
答案 0 :(得分:1)
我认为您的代码中没有任何错误。
问题是在您的应用程序中使用Bi-RNN模型的目标函数(下一个字符预测器)。
单向RNN(例如ptb_word_lm或char-rnn-tensorflow),它实际上是用于预测的模型,例如,如果raw_text
是1,3,5,2,4,8,9,0
,那么,您的inputs
和target
将是:
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在工作时需要完整的序列,当你想预测下一个角色时,你会发现你不能轻易使用这个模型。