티스토리 뷰

반응형

|tf.truncated_normal 와 tf.random_normal

 

텐서플로우에서 랜덤으로 수를 주는 방법은 여러가지가 있습니다.

tf.truncated_normal 와 tf.random_normal 는 매우 비슷하게 작동하지만 큰 차이가 있습니다.

어떠한 차이가 있는지는 직접 그래프를 보면서 알아보면 알기 쉽습니다.

 

우선 사전적 의미로 truncated를 찾아보게되면 '끝이 잘린'이라고 해석됩니다. 즉 특정값을 경계로 자르는 것입니다.

 

우선 이론적부터 살펴보면 두함수 모두 랜덤하게 값을 가져오는 방법입니다.

다만 두 방식의 가장 큰 차이는 tf.truncated_normal 은 너무 작거나 너무 큰 값이 아닌 값으로 랜덤한 값을 가져오는 것입니다.

이는 딥러닝이나 머신러닝 중 너무큰값이나 너무작은값이 들어오면 작동을 멈춰버리는것을 해결하기 위한 방법입니다.

아래는 실제로 어떻게 다른지 그래프로 비교하겠습니다.

 

 

|tf.truncated_normal 와 tf.random_normal 그래프 비교 

 

 

직접 비교하기 위한 코드입니다. 만약 matplotlib을 설치 안했다면

1
pip install matplotlib
cs

를 쳐서 설치한 다음 실행하면 됩니다.

위 그림에서 알 수 있듯이

tf.truncated_normal은 -2와 +2를 경계로 잘려있지만 tf.random_normal은 모든값이 다 나오는걸 확인할 수 있습니다.

여기서 표준편차를 구해서 표준편차 -2, 2를 경계로 잘라냅니다.

 

그이유는 위에서 말했듯이 차이가 너무 크거나 작은 값은 걸러내기 때문입니다.

 

 

|소스

 

Test.ipynb

위 파일은 해당 주피터노트북 소스파일입니다.

1
2
3
4
5
6
7
8
9
10
11
12
import tensorflow as tf
import matplotlib.pyplot as pltpip install matplotlib
 
= 100000
= tf.truncated_normal((n,))
= tf.random_normal((n,))
 
with tf.Session() as sess:
    a, b = sess.run([A, B])
 
plt.hist(a, 1000, (-4.54.5));
plt.hist(b, 1000, (-4.54.5));
cs

출처/참고

https://stackoverflow.com/questions/41704484/what-is-difference-between-tf-truncated-normal-and-tf-random-normal

https://matplotlib.org/1.2.1/examples/pylab_examples/histogram_demo.html


광고

 

반응형
댓글