MJ's Blog
Reproduction 을 위한 Seed 고정 본문
Tensorflow와 Keras에서 모델을 생성할때, 기본적으로 난수(random_seed)를 기반으로 계산이 이루어 진다.
그러므로 같은 코드라도 재 실행을 하면 결과값이 다르게 나올 수 밖에 없는데, 이렇게 되면 모델이 변경되었을 때 얼마나 개선되었는지에 대한 판단이 어려울 수 밖에 없다.
위 예시처럼 학습된 모델의 결과를 동일하게 Reproduction 하는 것은 여러가지 상황에서 필요한데,
ex) 수상자가 되어 코드의 정합성을 검증 받게 될 경우
ex) 경진대회 참가 도중 팀을 이루어 결과를 공유해야 되는 경우
ex) 논문을 작성하여 그 결과를 Reproduction 해야하는 경우
등이 있다.
이러한 문제는 기본적으로 'Seed를 고정'시킴으로 해결할 수 있다.
Seed 고정은 아래와 같이 구현할 수 있다 :
import numpy as np
import tensorflow as tf
import random
seed_num = 100
np.random.seed(seed_num)
//numpy에서 seed값을 고정
random.seed(seed_num)
//random에서 seed값을 고정
tf.set_random_seed(seed_num)
//tensorflow에서 seed 값을 고정
Seed의 고정은 총 3차례 이루어져야 한다.
- numpy에서 seed 값을 고정
- random에서의 seed값을 지정
- tensorflow에서의 seed값을 지정
추가적으로 Seed를 고정했음에도 해결이 안되는 경우, 아래 2가지 원인과 그에 따른 해결방법을 추가적으로 시도해볼 수 있다.
1) GPU모델을 사용한 경우 → CPU를 사용해보기
2) Multi-Thread를 사용한 경우 → Single-Thread로 변경해보기 (thread =1 로 설정)
(Thread 변경은 아래와 같이 구현 가능)
session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)
K.set_session(sess)
'AI' 카테고리의 다른 글
ICML 2025 후기 (5) | 2025.07.19 |
---|---|
25' AI Agents Live + Labs (1) | 2025.07.08 |
[논문리뷰] UNDERSTANDING DEEP LEARNING REQUIRES RETHINKINGGENERALIZATION (0) | 2025.05.22 |
[논문리뷰] Pix2NeRF (0) | 2022.07.13 |
[논문리뷰] Image GANs meet differentiable rendering for inverse graphics and interpretable 3D neural rendering (0) | 2022.06.06 |