이 블로그글은 2019년 조재영(Kevin Jo), 김승수(SeungSu Kim)님의 딥러닝 홀로서기 세미나를 수강하고 작성한 글임을 밝힙니다.
💡 도움이 되셨다면 ♡와 팔로우 부탁드려요! 미리 감사합니다.
seed = 123
np.random.seed(seed)
torch.manual_seed(seed)
# Arguments setup
args = parser.parse_args("")
##### SIZE #####
args.vocab_size = 41
args.in_dim = 59
args.out_dim = 256
args.molevc_dim = 512
##### MODEL #####
args.num_layers = 6
args.use_attn = True
args.n_attn_heads = 8
args.use_bn = True
args.sc_type = 'sc'
args.emb_train = True
args.train_loop = True
args.train_mr = True
args.train_tpsa = True
##### HYPERPARAMETERS #####
args.optim = 'ADAM'
args.lr = 0.001
args.l2_coef = 0.001
args.dp_rate = 0.1
##### EXP #####
args.epoch = 100
args.batch_size = 512
args.test_batch_size = 512
args.save_every = 100
args.validate_every = 100
args.log_every = 20
##### DEVICE #####
args.device = 'cuda' if torch.cuda.is_available() else 'cpu'
##### LOGGING #####
args.log_path = 'runs'
args.model_name = 'exp_test3'
→ 하이퍼파라미터는 무수히 많이 존재한다.
예시
모델을 결정하는 하이퍼파라미터
seed = 123
np.random.seed(seed)
torch.manual_seed(seed)
# Arguments setup
args = parser.parse_args("")
##### SIZE #####
args.vocab_size = 41
args.in_dim = 59
args.out_dim = 256
args.molevc_dim = 512
##### MODEL #####
args.num_layers = 6
args.use_attn = True
args.n_attn_heads = 8
args.use_bn = True
args.sc_type = 'sc'
args.emb_train = True
args.train_loop = True
args.train_mr = True
args.train_tpsa = True
seed
: 난수 생성의 초기값을 설정한다. 동일한 시드를 사용하면 매번 같은 난수를 생성할 수 있어, 재현성을 보장한다.args.num_layers
: 모델의 층 수를 설정한다.args.vocab_size
: 어휘의 크기를 설정한다. 모델이 다룰 수 있는 단어의 수를 나타낸다.args.in_dim
: 입력 차원을 설정한다. 모델에 입력되는 데이터의 차원 수를 정의한다.args.out_dim
: 출력 차원을 설정한다. 모델의 출력 결과 차원 수를 정의한다.args.num_layers
: 모델의 층 수를 설정한다.args.use_attn
: 주의(attention) 메커니즘 사용 여부를 설정한다.args.n_attn_heads
: 다중 주의 헤드의 수를 설정한다.args.use_bn
: 배치 정규화(batch normalization) 사용 여부를 설정한다.args.sc_type
: 특정 종류의 손실 함수 또는 모델 유형을 설정한다. 'sc'
는 특정 의미를 갖는 값으로 사용된다.args.emb_train
: 임베딩 학습 여부를 설정한다.args.train_loop
: 훈련 루프 실행 여부를 설정한다.args.train_mr
: 특정 모델 훈련 여부를 설정한다.args.train_tpsa
: 또 다른 특정 모델 훈련 여부를 설정한다.옵티마이저를 결정하는 하이퍼파라미터
##### HYPERPARAMETERS #####
args.optim = 'ADAM'
args.lr = 0.001
args.l2_coef = 0.001
args.dp_rate = 0.1
args.optim
: 사용될 최적화 알고리즘을 설정한다.args.lr
: 학습률(learning rate)을 설정한다. 모델의 가중치를 업데이트할 때 얼마나 큰 폭으로 조정할지를 결정한다.args.l2_coef
: L2 정규화 계수를 설정한다. 모델의 복잡도를 줄이기 위해 가중치에 대한 패널티를 부여하는 데 사용된다.args.dp_rate
: 드롭아웃 비율(dropout rate)을 설정한다. 신경망의 과적합을 방지하기 위해 각 층에서 임의로 노드를 제외하는 비율이다.학습과 평가를 담당하는 하이퍼파라미터
##### EXP #####
args.epoch = 100
args.batch_size = 512
args.test_batch_size = 512
args.save_every = 100
args.validate_every = 100
args.log_every = 20
args.epoch
: 전체 데이터셋을 몇 번 학습할지를 설정한다. 100
이면 전체 데이터를 100번 반복해 훈련한다.args.batch_size
: 훈련 시 한 번에 처리할 데이터 샘플 수를 설정한다. 512
이면 512개씩 데이터를 처리한다.args.test_batch_size
: 테스트 시 한 번에 처리할 데이터 샘플 수를 설정한다.args.save_every
: 모델을 몇 에포크마다 저장할지를 설정한다. 100
이면 100 에포크마다 모델을 저장한다.args.log_every
: 로그를 몇 스텝마다 기록할지를 설정한다.디바이스를 결정하는 하이퍼파라미터
##### DEVICE #####
args.device = 'cuda' if torch.cuda.is_available() else 'cpu'
args.device
: 모델이 실행될 디바이스를 설정한다. GPU를 사용할 수 있으면 'cuda'
로 설정하고, 그렇지 않으면 'cpu'
로 설정한다.실험 결과 관리를 위한 파라미터
##### LOGGING #####
args.log_path = 'runs'
args.model_name = 'exp_test3'
args.log_path
: 훈련 과정의 로그를 저장할 경로를 설정한다.args.model_name
: 저장할 모델의 이름을 설정한다. 나중에 이 이름으로 모델 파일을 저장하거나 불러올 수 있다.argparse
는 명령줄 인자를 쉽게 처리할 수 있도록 돕는 파이썬 라이브러리다. 사용자는 다양한 옵션과 인자를 정의할 수 있으며, 이를 통해 프로그램 실행 시 입력된 값을 쉽게 가져와 사용할 수 있다.argparse
를 사용하면 코드를 보다 직관적이고 사용자 친화적으로 만들 수 있다.argparse
의 경우 딕셔너리 같은 객체로 사용가능하다.→ 딕셔너리로 사용하는 것 보다 argparse
를 사용하면 .
으로 멤버변수에 접근 가능하다.
import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args("")
print(args)
args.batch_size = 100
print(args)
print(args.batch_size)
args.in_dim = 256
print(args)
print(args.in_dim)
print(args)
args.in_dim = 128
print(args.in_dim)
출력결과:
Namespace()
Namespace(batch_size=100)
100
Namespace(batch_size=100, in_dim=256)
256
Namespace(batch_size=100, in_dim=256)
128
이후에
experiment
라는 함수를 정의하여args
를 인자로 전달하면, 이 함수 내에서 모델 학습의 모든 과정을args
변수에서 가져온 값으로 실행할 수 있다.
💡
vars()
함수는 객체의__dict__
속성을 반환하여 해당 객체의 멤버 변수와 그 값을 딕셔너리 형태로 반환한다.d = vars(args) print(d) print(type(d))
실행결과:
{'batch_size': 100, 'in_dim': 128} <class 'dict'>