2017-11-06 6 views
1

私はtensorflowを初めて使ったので、n!を計算する関数を見つけようとしています。 ガンマ関数を使うことができますが、これはtheanoで可能でしたが、テンソルフローでは機能しませんでした。テンソルフローの階乗を計算するにはどうすればよいですか?

factorial = theano.tensor.gamma(v) 

私は、nから1までの数を乗算するforループを使用していますが、私は、より簡単な方法があると仮定します。私はガンマ分布に関連する関数を見ましたが、階乗をどのように計算するのか分かりませんでした。もし私がいくつかのドキュメントを教えてくれれば幸いです。ここで

私はそれを行う方法は、今

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

感謝を。これは、テンソルフローのための単純なガンマ関数がないことを意味します。ループ乗算の代わりにlgammaのexpを使用する方が良いでしょうか? – AintheT

+0

確かに、未処理のガンマ関数をtfで見つけることができませんでした。将来のバージョンで追加することはかなり可能です。 2つの数学演算での計算はループよりも確かに高速ですが、大きな入力の階乗を計算したくないと思います。とにかく、それはより短いです。 – Maxim

関連する問題