sampled_softmax_loss不会在sequence_loss_by_example执行时减少

时间:2016-12-13 16:31:57

标签: machine-learning tensorflow

我正在训练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))

1 个答案:

答案 0 :(得分:0)

通过降低学习率来解决这种观察到的行为。在这一变化之后,培训损失和验证困惑(大部分)同时发生变化。