私はpenn treebankで言語モデルトレーニングを実装しています。penn treebankのトレーニングLSTMのperplexityを計算する
私はタイムステップごとに損失を加えて、パープレキシティを計算しています。
これは、しばらくの間、訓練をしても何億もの錯覚を感じさせません。
損失自体は減少しますが、最大でも約20まで低下します。 (私は賢明なperplexityを得るために損失のために1桁の番号が必要です)。
これは、私の錯覚計算が誤っているかどうか疑問です。
各タイムステップの損失に基づいて、それをすべて加算するのではなく、平均化する必要がありますか?
マイ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, i, batch_size)
perp = perplexity(loss.d)
....