Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

MJ's Blog

Reproduction 을 위한 Seed 고정 본문

AI

Reproduction 을 위한 Seed 고정

minje_kim 2022. 5. 26. 17:24

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차례 이루어져야 한다.

  1. numpy에서 seed 값을 고정
  2. random에서의 seed값을 지정
  3. 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)