in custom/sequence_penalty_loss.py [0:0]
def aggregate_logging_outputs(logging_outputs):
"""Aggregate logging outputs from data parallel training."""
loss_sum = sum(log.get('seq_loss', 0) for log in logging_outputs)
ntokens = sum(log.get('seq_ntokens', 0) for log in logging_outputs)
nsentences = sum(log.get('seq_nsentences', 0) for log in logging_outputs)
sample_size = sum(log.get('seq_sample_size', 0) for log in logging_outputs)
repeat_mask = sum(log.get('seq_repeat_mask', 0) for log in logging_outputs)
agg_output = {
'seq_loss': loss_sum / max(sample_size, 1.0) / math.log(2),
'seq_ntokens': ntokens,
'seq_nsentences': nsentences,
'seq_sample_size': sample_size,
'seq_repeat_mask': repeat_mask / sample_size if sample_size > 0 else 0
}
for n in range(1, 5):
key = 'pct_repeat_%dgrams' % n
ngram_repeats = sum(log.get(key, 0) for log in logging_outputs)
# Normalize by the number of sentences since this is the sum of per-sentence metrics.
agg_output['seq_' + key] = ngram_repeats /nsentences if nsentences > 0 else 0
if sample_size != ntokens:
agg_output['seq_nll_loss'] = loss_sum / max(ntokens, 1.0) / math.log(2)
return agg_output