我正在训练LSTM并使用sampled_softmax_loss
计算每个纪元后的损失(这么多文件)。我还使用sequence_loss_by_example
同时计算了保持集上的困惑。
前几个时期的损失减少 - 从1-2急剧下降。然后它只是挂在相同的值(有时少一点;有时多一点)。 另一方面,困惑确实一直在减少。
为什么损失会停止下降而困惑继续下降?我希望他们两个都能持续减少。
代码看起来像这样:
total_steps = 0
total_cost = 0.
for batch in train_epoch:
total_steps += num_steps
loss = tf.nn.sampled_softmax_loss(...)
cost = tf.reduce_sum(loss) / batch_size
total_cost += cost
...
optimizer.apply_gradients(tf.gradients(cost, vars),...)
print("average loss = {}".format(total_cost / total_steps))
total_steps = 0
total_xentropy = 0.
for batch in valid_epoch:
total_steps += num_steps
loss = tf.nn.seq2seq.sequence_loss_by_example(...)
total_xentropy += tf.reduce_sum(loss) / batch_size
print("perplexity = {}".format(np.exp(total_xentropy / total_steps))
答案 0 :(得分:0)
通过降低学习率来解决这种观察到的行为。在这一变化之后,培训损失和验证困惑(大部分)同时发生变化。