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
感謝を。これは、テンソルフローのための単純なガンマ関数がないことを意味します。ループ乗算の代わりにlgammaのexpを使用する方が良いでしょうか? – AintheT
確かに、未処理のガンマ関数をtfで見つけることができませんでした。将来のバージョンで追加することはかなり可能です。 2つの数学演算での計算はループよりも確かに高速ですが、大きな入力の階乗を計算したくないと思います。とにかく、それはより短いです。 – Maxim