로거
– 서버에서 프로그램을 돌릴 때 쉽게 많은 것을 저장하는 것이 좋습니다.
print를 단순화하는 대신,
로거를 활용하여 저장하는 것이 좋습니다.
– 만약 loggging 때 text 파일을 계속하고 싶다면, mode를 “w”가 아니라 “a”를 사용하면됩니다.
wandb처럼, 어떻게 보면 편리하게 활용할 수 있습니다.
이전에 tqdm을 사용했지만 지금은 로거를 사용하려고합니다.
import sys
class Logger(object):
def __init__(self, local_rank = 0, no_save = False):
self.terminal = sys.stdout
self.file = None
self.local_rank = local_rank
self.no_save = no_save
def open(self, fp, mode = None):
if mode is None:
mode = "w"
if self.local_rank == 0 and not self.no_save == 0:
self.file = open(fp, mode)
def write(self, msg, is_terminal = 1, is_file = 1):
if msg(-1) !
= "\n":
msg += "\n"
if self.local_rank == 0:
if "\r" in msg:
is_file = 0
if is_terminal == 1:
self.terminal.write(msg)
self.terminal.flush()
if is_file == 1 and not self.no_save:
self.file.write(msg)
self.file.flush()
def flush(self):
pass
AverageMeter
– 현재 값과 평균을 저장하는 데 자주 사용됩니다.
논문에서 자주 볼 수 있습니다.
.!
(필수!
)
class AverageMeter(object):
"""Computes and stores the average and current value"""
def __init__(self):
self.reset()
def reset(self):
self.val = 0
self.avg = 0
self.sum = 0
self.count = 0
def update(self, val, n=1):
self.val = val
self.sum += val * n
self.count += n
self.avg = self.sum / self.count
메모
https://www.dacon.io/competitions/official/235614/codeshare/1300