KalelPark's LAB

[CODE] How to making useful logger? 본문

Data Science/CODE

[CODE] How to making useful logger?

kalelpark 2023. 3. 15. 00:36

Logger

     - 서버에서 프로그램을 돌릴 때, 알아보기 쉽게 많은 것을 저장해두는 것이 좋습니다. print를 단순하기 사용하기 보다는,

        logger를 활용해서 저장해두는 것이 좋습니다.

 

     - 만약 loggging 시, text 파일을 이어쓰고자 한다면, mode를 "w"가 아닌 "a"를 사용하면 됩니다.

        wandb와 같이 어떻게 보면 유용하게 활용할 수 있습니다. 저는 이전에 tqdm을 사용하는데, 이제는 logger를 사용하려고 합니다.

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

      - 현재 Value와 average를 저장하기 위해 자주 사용합니다. 논문에서 자주 보입니다..! (필수!)

 

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

Comments