[PYTHON] 케라에서 재현 가능한 결과를 얻는 방법
PYTHON케라에서 재현 가능한 결과를 얻는 방법
Keras 프레임 워크 (https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py)에서 imdb_lstm.py 예제를 실행할 때마다 다른 결과 (테스트 정확도)를 얻습니다. 코드에는 keras 임포팅 전에 np.random.seed (1337)가 맨 위에 있습니다. 그것은 모든 실행에 대해 다른 숫자를 생성하지 못하게해야합니다. 내가 뭘 놓치고 있니?
업데이트 : repro하는 방법 :
업데이트 2 : MinGW / msys, 모듈 버전이있는 Windows 8.1에서 실행하고 있습니다. 테 노노 0.7.0 ~ 1.8.1 scipy 0.14.0c1
UPDATE3 : 문제를 조금 좁혔습니다. GPU (setano 플래그 장치 = gpu0으로 설정)로 예제를 실행하면 매번 다른 테스트 정확도가 나오지만 CPU에서 실행하면 모든 것이 예상대로 작동합니다. 내 그래픽 카드 : NVIDIA GeForce GT 635)
해결법
-
==============================
1.Theano의 문서에서는 무작위 변수를 파싱하는 어려움과 각 그래프 인스턴스에 고유 한 난수 생성기를 사용하는 이유에 대해 설명합니다.
Theano의 문서에서는 무작위 변수를 파싱하는 어려움과 각 그래프 인스턴스에 고유 한 난수 생성기를 사용하는 이유에 대해 설명합니다.
또한 모든 난수 생성기를 시드하는 방법에 대한 예제도 제공합니다.
>>> srng.seed(902340) # seeds rv_u and rv_n with different seeds each
-
==============================
2.마침내 코드로 재현 가능한 결과를 얻었습니다. 웹에서 본 답변의 조합입니다. 가장 먼저 @alex가 말한 것을 수행합니다.
마침내 코드로 재현 가능한 결과를 얻었습니다. 웹에서 본 답변의 조합입니다. 가장 먼저 @alex가 말한 것을 수행합니다.
다음과 같이 추가로 THEANO_FLAGS를 사용하여 Keras 코드를 호출하여 cuDNN과 관련하여 @ user2805751이 지적한 문제를 해결해야합니다.
마지막으로,이 주석에 따라 Theano 설치를 패치해야합니다. 기본적으로 다음과 같이 구성되어 있습니다.
동일한 시드에 대해 동일한 결과를 가져와야합니다.
속도가 느려질 수도 있습니다. 나는 약 10 %의 가동 시간 증가를 보았다.
-
==============================
3.Keras 문서 (https://keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development)에서 해당 답변을 찾을 수 있습니다.
Keras 문서 (https://keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development)에서 해당 답변을 찾을 수 있습니다.
요약하면, 한 컴퓨터 / 노트북의 CPU에서 파이썬 스크립트로 재현 가능한 결과를 얻으려면 반드시 다음을 수행해야합니다.
상단의 Keras 링크 다음에 사용하는 소스 코드는 다음과 같습니다.
# Seed value # Apparently you may use different seed values at each stage seed_value= 0 # 1. Set `PYTHONHASHSEED` environment variable at a fixed value import os os.environ['PYTHONHASHSEED']=str(seed_value) # 2. Set `python` built-in pseudo-random generator at a fixed value import random random.seed(seed_value) # 3. Set `numpy` pseudo-random generator at a fixed value import numpy as np np.random.seed(seed_value) # 4. Set `tensorflow` pseudo-random generator at a fixed value import tensorflow as tf tf.set_random_seed(seed_value) # 5. Configure a new global `tensorflow` session from keras import backend as K 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)
파이썬 스크립트에서 사용하는 numpy, scikit-learn 또는 tensorflow / keras 함수에서 seed 또는 random_state를 지정할 필요가 없다는 것은 말할 필요도 없습니다. 위의 소스 코드를 사용하여 전역 적으로 의사 - 랜덤 제너레이터를 고정 된 값으로 사용합니다.
-
==============================
4.이전 답변에 뭔가를 추가하고 싶습니다. 파이썬 3을 사용하고 모든 실행에 대해 재현 가능한 결과를 얻으려면 다음을 수행해야합니다.
이전 답변에 뭔가를 추가하고 싶습니다. 파이썬 3을 사용하고 모든 실행에 대해 재현 가능한 결과를 얻으려면 다음을 수행해야합니다.
-
==============================
5.이전 의견에 동의하지만 재현 가능한 결과에는 때로는 동일한 환경 (예 : 설치된 패키지, 기계 특성 등)이 필요합니다. 따라서 재현 가능한 결과를 얻으려면 환경을 다른 곳으로 복사하는 것이 좋습니다. 다음 기술 중 하나를 사용해보십시오.
이전 의견에 동의하지만 재현 가능한 결과에는 때로는 동일한 환경 (예 : 설치된 패키지, 기계 특성 등)이 필요합니다. 따라서 재현 가능한 결과를 얻으려면 환경을 다른 곳으로 복사하는 것이 좋습니다. 다음 기술 중 하나를 사용해보십시오.
-
==============================
6.Keras를 사용하는 신경망의 Sequential () 종류를 훈련하고 테스트했습니다. 나는 시끄러운 음성 데이터에서 비선형 회귀를 수행했다. 무작위 시드를 생성하기 위해 다음 코드를 사용했습니다.
Keras를 사용하는 신경망의 Sequential () 종류를 훈련하고 테스트했습니다. 나는 시끄러운 음성 데이터에서 비선형 회귀를 수행했다. 무작위 시드를 생성하기 위해 다음 코드를 사용했습니다.
import numpy as np seed = 7 np.random.seed(seed)
나는 같은 데이터에 대해 훈련하고 테스트 할 때마다 val_loss와 똑같은 결과를 얻는다.
from https://stackoverflow.com/questions/32419510/how-to-get-reproducible-results-in-keras by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 터미널에서 Python 스크립트를 실행하는 방법 (0) | 2018.11.11 |
---|---|
[PYTHON] JS 지원이있는 Python 브라우저 에뮬레이터 [닫힘] (0) | 2018.11.11 |
[PYTHON] Pandas : Excel의 병합 된 헤더 열을 구문 분석합니다. (0) | 2018.11.10 |
[PYTHON] tensorflow : .eval ()은 끝나지 않습니다. (0) | 2018.11.10 |
[PYTHON] 파이썬 Win32 시뮬레이션 클릭 (0) | 2018.11.10 |