2017-11-06 12 views
1

나는 tensorflow에 익숙하지 않다. n을 계산하는 함수를 찾고있다. 나는 theano에서 가능한 감마 함수를 사용할 수 있지만 tensorflow에서는 작동하지 않는다는 것을 알았습니다.tensorflow에서 계승을 계산하는 방법은 무엇입니까?

factorial = theano.tensor.gamma(v) 

for 루프를 사용하여 n에서 1까지의 숫자를 곱합니다.하지만 더 쉽고 빠름을 가정합니다. 나는 감마 분포와 관련된 함수를 보았지만 계승을 계산하는 방법을 알 수 없었다. 사람이 어떤 문서를 가르쳐 주시면 고맙겠습니다. 여기

내가 지금 그것을 할 방법입니다

import tensorflow as tf 

factorial = tf.Variable(1, "factorial") 
recursion = tf.Variable(1, "recursion") 

# calculate factorial 
mult = tf.multiply(recursion, factorial) 
assign_fact = tf.assign(factorial, mult) 

init = tf.global_variables_initializer() 

with tf.Session() as sess: 
    sess.run(init) 
    for i in range(2,10): 
     counter = tf.assign(recursion, tf.constant(i)) 
     sess.run(counter) 
     sess.run(assign_fact) 

     print(i,"factorial is", sess.run(factorial)) 

    sess.close() 

출력

2 factorial is 2 
3 factorial is 6 
4 factorial is 24 
5 factorial is 120 
6 factorial is 720 
7 factorial is 5040 
8 factorial is 40320 
9 factorial is 362880 

답변

0

이 시도입니다 : tf.exp(tf.lgamma(x + 1)).

tf.lgamma 감마의 절대 값의 로그를 계산 (X) 소자 현명 지수 당신 원시 감마를 제공하므로 (X) 값 : 답변

>>> sess.run(tf.exp(tf.lgamma(5.0))) 
24.0 
+0

감사합니다. 그것은 tensorflow에 대한 간단한 감마 함수가 없다는 것을 의미합니까? 루프 곱셈 대신 lgamma의 exp를 사용하는 것이 더 낫습니까? – AintheT

+0

사실, tf에서 원시 감마 함수를 발견 할 수 없었습니다. 차후 버전에서 추가 될 가능성이 상당히 높습니다. 두 개의 수학 연산으로 계산하는 것은 루프보다 빠릅니다. 그러나 큰 입력에 대한 계승을 계산하고 싶지는 않습니다. 어쨌든, 그것은 더 짧습니다. – Maxim