Open yuyue9284 opened 6 years ago
我看了下代码,val和train是分开计算的,可以贴下你说的代码位置吗
您好,就是cost的定义部分是
cost = tf.contrib.seq2seq.sequence_loss(
training_logits,
targets,
masks)
然后在计算validatoin loss 部分还是调用的cost,虽然输入数据时用的是validation data,但是由于上面cost计算用的是training_logits,最后应该还是用的training decoder的输出,而不是用的predicting decoder。
# 计算validation loss
validation_loss = sess.run(
[cost],
{input_data: valid_sources_batch,
targets: valid_targets_batch,
lr: learning_rate,
target_sequence_length: valid_targets_lengths,
source_sequence_length: valid_sources_lengths})
Hi,当初我的考虑是这样的。因为train和val的数据都是有label的,所以在计算loss,我全部使用trainhelper,保证他们计算loss时分布一样。如果在val使用infer的话,loss要大的很多,而且数据分布也改变了。test阶段使用infer是因为我们没有了label。所以train和val我都用trainhelper是为了让他们loss具有可比性。
了解了,谢谢,这个系列太好了,对学习很有帮助👍!
basic seq2seq 模型训练部分validation loss计算的时候使用的是training decoder的输出。