我正在penn treebank上实施语言模型培训.
我为每个时间步增加了损失然后计算困惑.
即使经过一段时间的训练,这也让我感到非常困难,数千亿.
损失本身会减少,但最多只能减少到20左右.(我需要一位数的损失以获得合理的困惑).
这让我想知道我的困惑计算是否被误导了.
它应该基于每个时间步的损失,然后平均而不是将它们全部添加?
我的batch_size是20,num_steps是35.
def perplexity(loss):
perplexity = np.exp(loss)
return perplexity
...
loss = 0
x = nn.Variable((batch_size, num_steps))
t = nn.Variable((batch_size, num_steps))
e_list = [PF.embed(x_elm, num_words, state_size, name="embed") for x_elm in F.split(x, axis=1)]
t_list = F.split(t, axis=1)
for i, (e_t, t_t) in enumerate(zip(e_list, t_list)):
h1 = l1(F.dropout(e_t,0.5))
h2 = l2(F.dropout(h1,0.5))
y = PF.affine(F.dropout(h2,0.5), num_words, name="pred")
t_t = F.reshape(t_t,[batch_size,1])
loss += F.mean(F.softmax_cross_entropy(y, t_t))
for epoch in range(max_epoch):
....
for i in range(iter_per_epoch):
x.d, t.d = get_words(train_data, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习在python中使用NLTK包.特别是,我需要在NLTK中使用penn树库数据集.据我所知,如果我打电话,nltk.download('treebank')
我可以获得5%的数据集.但是,我在tar.gz文件中有一个完整的数据集,我想使用它.在 这里据说:
如果您可以访问Penn Treebank的完整安装,则可以将NLTK配置为加载它.下载ptb软件包,并在目录nltk_data/corpora/ptb中放置Treebank安装的BROWN和WSJ目录(符号链接也可以).然后使用ptb模块而不是treebank:
所以,我从终端打开了python,导入了nltk并输入了nltk.download('ptb')
.使用此命令,在我的~/nltk_data
目录下创建了"ptb" 目录.最后,现在我有了~/nltk_data/ptb
目录.在里面,正如我上面给出的链接所示,我已经放了我的数据集文件夹.所以这是我的最终目录层次结构.
$: pwd
$: ~/nltk_data/corpora/ptb/WSJ
$: ls
$:00 02 04 06 08 10 12 14 16 18 20 22 24
01 03 05 07 09 11 13 15 17 19 21 23 merge.log
Run Code Online (Sandbox Code Playgroud)
在00到24之间的所有文件夹中,有许多 .mrg
文件,例如wsj_0001.mrg , wsj_0002.mrg
等等.
现在,让我们回答我的问题.再次,根据这里:
如果我写下列内容,我应该能够获取文件ID:
>>> from nltk.corpus import ptb
>>> print(ptb.fileids()) # doctest: +SKIP
['BROWN/CF/CF01.MRG', 'BROWN/CF/CF02.MRG', 'BROWN/CF/CF03.MRG', 'BROWN/CF/CF04.MRG', ...]
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我输入时print(ptb.fileids())
我得到了空数组.
>>> print(ptb.fileids()) …
Run Code Online (Sandbox Code Playgroud)