Python RNNLM使用theano

Python RNNLM使用theano,python,nlp,theano,recurrent-neural-network,language-model,Python,Nlp,Theano,Recurrent Neural Network,Language Model,我在theano用户列表上问了同样的问题,但没有得到回复,只是想知道这里是否有人可以帮助我 我正试图在这篇好文章的基础上重新实现的RNNLM。 我尝试了一个玩具测试用例,其中训练数据是PTB训练数据的前100句(下载自),同样的数据也用于评估 基线: 我使用rnnlm-0.4b对LM进行了25次迭代,从 测试日志概率:-4107.323481 净购买力:85.496622 用于生成基线的命令行包括: $ rnnlm -train ../ptb/ptb.train.txt.toy -valid .

我在theano用户列表上问了同样的问题,但没有得到回复,只是想知道这里是否有人可以帮助我

我正试图在这篇好文章的基础上重新实现的RNNLM。 我尝试了一个玩具测试用例,其中训练数据是PTB训练数据的前100句(下载自),同样的数据也用于评估

基线:

我使用rnnlm-0.4b对LM进行了25次迭代,从 测试日志概率:-4107.323481 净购买力:85.496622

用于生成基线的命令行包括:

$ rnnlm -train ../ptb/ptb.train.txt.toy -valid ../ptb/ptb.train.txt.toy -rnnlm rnn.model.toy -hidden 10 -class 1 -max-iter 25 -independent -beta 0 -direct-order 0
$ rnnlm -rnnlm rnn.model.toy -test ../ptb/ptb.train.txt.toy -independent
使用我的实现,经过25次迭代后,PPL存在很大差异:

历元=24:对数概率=-5374.255371 ppl=337.187731

我还在学习Theano,我的实现中是否遗漏了什么

谢谢

我的实施可在以下网址找到:


我正在研究同一个问题。我不确定我是否发现了所有的问题,但是如果你打印出V权重,你会发现它们比其他的要大得多。我除以词汇量,而不是隐藏权重的数量。这是有帮助的,但网络仍然没有一路收敛

您需要打印所有权重的值,这段代码将帮助您开始

我尝试添加L1和L2正则化,但没有效果

V = np.random.uniform(-np.sqrt(1./n_unique_words), np.sqrt(1./n_unique_words), (n_unique_words, n_hidden))

def sum_weights(self):
    v = self.V.sum()
    return v.eval()

def abs_sum_weights(self):
    v = (np.abs(self.V)).sum()
    return v.eval()

这项工作仍在进行中。我想你只需要我给你的片段。如果你做了,剩下的就在这里。如果您回顾一些更新,您会发现L1/L2代码。

我认为这可能是您初始化参数的方式。在RNNLM实现中
RNNLM.cpp
第33行之后列出了参数值。第112行,隐藏层的默认大小为30,而您已将其初始化为10。你能对你的代码多加评论吗?我们能帮助你更好地调试这个问题吗?有一些奇怪的符号,比如
bptt_truncate
,它不是那么传统。通常,bptt属性是“将错误传播回时间的步数”(我称之为
bptt_步骤
)或
bptt_块
,它“指定错误在块模式下通过时间反向传播的时间步数”。还有其他一些你没有注意到的东西,比如L2正则化参数。RNNLM也有一些复杂的事情,如“设置最大绝对梯度值”和“设置最小相对熵以提高训练收敛性”
V = np.random.uniform(-np.sqrt(1./n_unique_words), np.sqrt(1./n_unique_words), (n_unique_words, n_hidden))

def sum_weights(self):
    v = self.V.sum()
    return v.eval()

def abs_sum_weights(self):
    v = (np.abs(self.V)).sum()
    return v.eval()