Python/Tensorflow & Keras

Keras에서 재현가능한 결과를 얻기(Reproducibility)

frcn 2020. 3. 20. 02:02
반응형

keras를 이용해 LSTM 모델을 만들던 중에 문제가 하나 발생했다.

 

 

같은 코드로 실행을 했는데, 같은 결과값이 나오지 않는다.

 

 

시행할 때마다 다른 loss와 val_loss들이 나오기 때문에, 모델이 변경되었을 때 개선되었는지에 대한 판단이 어렵다.

 

 

원인은 크게 3가지이다.

 

1. GPU모델을 사용했다. -> CPU를 사용하면 됨

 

2. Multi-Thread를 사용했다. -> Single-Thread로 변경한다

 

3. Random Seed. -> Seed를 지정해준다.

 

 

각 원인에 대한 자세한 설명을 알고 싶다면, 다음 유튜브 영상을 참고하자.

 

https://www.youtube.com/watch?v=Ys8ofBeR2kA

 

 

 

 

나같은 경우에는 이유를 알아보니, 멀티 쓰레드를 사용한 것 + Random_seed의 문제였다.

 

 

즉, tensorflow와 keras에서 Model을 생성할 때 random_seed를 이용하기 때문에 매번 모델이 달라지는 것을 해결하자.

 

 

 

그렇다면 랜덤값을 일정하도록, seed를 지정해주면 문제가 해결된다.

 

멀티쓰레드도 사용하지 않도록 thread=1로 설정한다.

 

 

1. numpy에서의 seed값을 지정

 

2. random에서의 seed값을 지정

 

3. tensorflow에서의 seed값을 지정.

 

4. tensorflow에서 단일 쓰레드를 사용하도록 설정.

 

 

 

-------> 해결 완료.

 

##만약 위의 과정을 거쳐도 문제 해결이 되지 않는다면, 사용한 외부모듈에서 random_seed를 생성하여 사용하고 있을 수도 있다. 이를 찾아서 해결해보자.

 

 

###keras 문서에도 해결방안이 나와있다.

 

https://keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development

 

FAQ - Keras Documentation

Keras FAQ: Frequently Asked Keras Questions How should I cite Keras? Please cite Keras in your publications if it helps your research. Here is an example BibTeX entry: @misc{chollet2015keras, title={Keras}, author={Chollet, Fran\c{c}ois and others}, year={

keras.io

 

반응형