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 문서에도 해결방안이 나와있다.
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