2017-05-10 15 views
0

マシン学習アルゴリズムのTensorFlow実装を準備しました。そのような実装は非常に遅いです。残念ながら、私はどこでミスをしたのか分からないので、ここで質問しました。基本操作のパフォーマンス

たとえば、エポックのような1つの変数に値が依存する非常に多くのパラメータがあるとします。例えば

、私は、このパラメータを有する:

sSigma = tf.maximum(
    tf.multiply(sSigma0, tf.exp(-tf.divide(epoch,sSigmaTau))), 
    sSigmaMin, name='s_sigma') 

sSigma各エポックのすべての入力例で使用され、変数epochsSigma0, sSigmaTau, sSigmaMintf.constantである)の関数として計算されます。私がお願いしたい

  • は、それが使用されるたびに評価されますか?変数epochが値を変更してからキャッシュされた後で1回だけ評価されますか?

  • このタイプのパラメータはどのように使用しますか?

    • それが実装されましたどのよう
    • 変数としてそれを使用し、各エポックの初めにtf.assignと、その値を設定する代わりにtf.Variable
    • tf.placeholderepochを使用しますか?

質問に対する簡単なコード:OP maxInAが何回実行されますか?

import tensorflow as tf 
import numpy as np 

with tf.device("gpu:0"): 
    sess = tf.InteractiveSession() 

    a = tf.Variable([ [2, 100, 4], [1, 200, 3]], dtype=tf.float64, name='matrix_a') 

    maxIdx = tf.arg_max(a, 0) 

    maxInA = tf.reduce_max(a) # <--- 

    op1 = 2 * maxInA 
    op2 = 3 * maxInA 

    mainOp = op1 + op2 

    sess.run(tf.global_variables_initializer()) 

    print('1) Index with max value - should be [0 1 0]') 
    print(maxIdx.eval()) 

    print('2) Using max twice - should be 1000') 
    print(mainOp.eval()) 
+0

は、問題を強調表示するコードを削除したバージョンへのリンクを提供します。あなたはたくさんの質問をしました。いくつか別の投稿に移動することを検討してください。 – Wontonimo

+0

あなたの例では、 'maxInA'は最後の' mainOp.eval() '呼び出しの間に一度だけ評価されます。 –

答えて

0

私はあなたの質問を正しく理解していませんが、ここに私のショットです。

他の変数がどれだけ依存していても、変数の値は1回評価されます。例えばTFはあなたのために以下のグラフを作成した場合:

enter image description here

を変数2の値を一度に計算し、次いでさらに3、4および5をcacluateするために使用される、3 4前に計算されず、 6があります。

詳細については、this paperをお読みください。

+0

質問を最小限の例で更新します。 –

関連する問題