in shaDow/logging_base.py [0:0]
def log_key_step(self, mode, time=-1, status='running'):
assert mode in [TRAIN, VALID, TEST] and status in ['running', 'final']
acc_ret = {}
if status == 'running':
_info_epoch = self.info_epoch[mode]
acc_ret['epoch'] = _info_epoch.idx_epoch
acc_ret['loss'] = _info_epoch.loss[-1]
epstr = f"Ep {_info_epoch.idx_epoch:4d}" if mode == TRAIN else " " * 7
msg_print = [(f"{epstr} [{MODE2STR[mode].upper():>6s}]\t", None),
(f"loss = {_info_epoch.loss[-1]:.5f}\t", self.style_metric['loss'])]
for n in _info_epoch.names_acc_fields:
acc_ret[n] = getattr(_info_epoch, n)[-1]
msg_print.append((f"{n} = {acc_ret[n]:.5f}\t", self.style_metric['acc']))
if mode == TRAIN:
msg_file_header = f'{_info_epoch.idx_epoch:4d}, '
else: # reference training epochs
msg_file_header = f'{_info_epoch.idx_epoch:4d} ({self.info_epoch[TRAIN].idx_epoch:4d}), '
msg_file_ending = '\n'
elif status == 'final':
_info_epoch = self.info_epoch[mode]
acc_ret['epoch'] = self.info_epoch[VALID].epoch_best
acc_ret['loss'] = _info_epoch.loss[-1]
msg_print = [((f"FINAL {MODE2STR[mode].upper()} "
f"(Epoch {self.info_epoch[VALID].epoch_best:4d}): \n\t"), None)]
for n in _info_epoch.names_acc_fields:
acc_ret[n] = getattr(_info_epoch, n)[-1]
msg_print.append((f"{n.upper()} = {acc_ret[n]:.5f}\t", self.style_metric['acc']))
msg_file_header = ''
msg_file_ending = ', ' if mode != TEST else '\n'
else:
raise NotImplementedError
if time > 0:
msg_print.append((f"time = {time:.2f} s", None))
self.printf(msg_print, style=[self.style_mode[mode], self.style_status[status]])
msg_file = msg_file_header \
+ f"{_info_epoch.loss[-1]:.5f}, " \
+ ', '.join(f"{getattr(_info_epoch, n)[-1]:.5f}" for n in _info_epoch.names_acc_fields)\
+ msg_file_ending
if not self.no_log:
self.log2file(mode, "values", msg=msg_file, status=status)
self.acc_final[mode] = acc_ret
return acc_ret