카테고리 없음

Torch 모델 성능 재현

Kimhj 2023. 8. 25. 11:02
  • 항상 찾아보는 코드...  블로그에 적어놓고 봐야할 것 같아서 작성해놓음.
  • 모델 구조 바꾸고 파라미터 변경하면서 실험을 할 때, 동일한 시드로 고정해놓고 해야 성능이 개선되는지 아닌지를 확인할 수 있음.
  • 아래 코드 사용하면 Weight 도 고정되어 나오므로, 모델 코드를 동일하게 여러번 돌려도 성능이 동일하게 나온다.

 

# Utils
import os, ast, wfdb, warnings, random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from argparse import Namespace
warnings.filterwarnings('ignore')
%matplotlib inline
%config InlineBackend.figure_format='retina'

# Torch
import torch, random
import torch.backends.cudnn as cudnn
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torch.utils.data import TensorDataset, DataLoader, WeightedRandomSampler
from torch.optim.lr_scheduler import StepLR, ReduceLROnPlateau

SEED = 0
os.environ['SEED'] = str(SEED)
os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID'
np.random.seed(SEED)
random.seed(SEED)
torch.manual_seed(SEED)
torch.cuda.manual_seed(SEED)
torch.cuda.manual_seed_all(SEED)
torch.backends.cudnn.deterministic = True
np.random.seed(SEED)
cudnn.benchmark = False
cudnn.deterministic = True
random.seed(SEED)

 

 

  • Multi-GPU 사용 시, 아래 코드를 적용하기도 한다. (링크 참고)

 

def seed_worker(worker_id):
    worker_seed = torch.initial_seed() % 2**32
    numpy.random.seed(worker_seed)
    random.seed(worker_seed)

g = torch.Generator()
g.manual_seed(0)

DataLoader(
    train_dataset,
    batch_size=batch_size,
    num_workers=num_workers,
    worker_init_fn=seed_worker,
    generator=g,
)

 

https://dbwp031.tistory.com/35