次のコードはtensorflowライブラリを使用し、numpyライブラリに比べて非常に遅く実行されます。私は、Python forループ内でテンソルフローライブラリを使用する関数を呼び出していることを認識しています(後でPythonマルチプロセッシングと並列化します)が、コードは非常に遅いです。テンソルフローはPythonのループ内で非常に遅く実行されます
誰かがこのコードをより速く実行させる方法を手伝ってもらえますか?ありがとう。
from math import *
import numpy as np
import sys
from multiprocessing import Pool
import tensorflow as tf
def Trajectory_Fun(tspan, a, b, session=None, server=None):
# Open tensorflow session
if session==None:
if server==None:
sess = tf.Session()
else:
sess = tf.Session(server.target)
else:
sess = session
B = np.zeros(np.size(tspan), dtype=np.float64)
B[0] = b
for i, t in enumerate(tspan):
r = np.random.rand(1)
if r>a:
c = sess.run(tf.trace(tf.random_normal((4, 4), r, 1.0)))
else:
c = 0.0 # sess.run(tf.trace(tf.random_normal((4, 4), 0.0, 1.0)))
B[i] = c
# Close tensorflow session
if session==None:
sess.close()
return B
def main(argv):
# Parameters
tspan = np.arange(0.0, 1000.0)
a = 0.1
b = 0.0
# Run test program
B = Trajectory_Fun(tspan, a, b, None, None)
print 'Done!'
if __name__ == "__main__":
main(sys.argv[1:])
遅いsession.run呼び出しの間にGraphオブジェクトを変更しています。最初の 'sess.run'の前にすべての操作を追加し、' tf.get_default_graph()。finalize() 'を呼び出すことができます –
@YaroslavBulatovあなたの素早い応答に感謝します。気づいたことがあるかもしれませんが、私は各時間ステップで変数cの値が必要です。上記のコードにあなたの提案を組み込む方法をもう少し明確にしてください。私はそれをお願い申し上げます。ありがとう。 – QED
ループ開始前に 'a = tf.random_normal((4,4)、0.0,1.0)'のようにしてから、 'sess.run(a)'を実行してください –