(CODE) How to making useful logger?

  • by


로거

– 서버에서 프로그램을 돌릴 때 쉽게 많은 것을 저장하는 것이 좋습니다.

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