2017-05-10 90 views
0

我準備了一個機器學習算法的TensorFlow實現:這種實現速度非常慢。不幸的是,我無法看到我犯了什麼錯誤,所以來到這裏問。基本操作的性能

假設我有很多參數的值取決於單個變量,例如曆元。

例如,我有這樣的參數:

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

sSigma用於每個曆元的每一個輸入一個示例,並且計算爲可變epoch的函數(sSigma0, sSigmaTau, sSigmaMintf.constant)。

我想問:

  • 是每次使用時進行評估?在變量epoch更改其值然後緩存之後,是否僅評估一次?

  • 我應該如何使用這種類型的參數?

    • 它是如何實現的,現在
    • 使用的tf.Variable
    • 一個tf.placeholderepoch,而不是使用它作爲一個變量,在每一個時代的開始設置其與tf.assign價值?

的問題簡單代碼:多少次運算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

我不知道我是否正確理解你的問題,但這裏是我的鏡頭。

無論有多少其他變量取決於它,該變量的值都會被評估一次。例如,如果TF爲您創建了下面的圖:

enter image description here

變量2的值將被計算一次,然後用於cacluate 3,4和5。此外,3不會被4之前計算和6個。

欲瞭解更多詳情如何完成,請閱讀this paper

+0

我用一個最簡單的例子來更新這個問題。 –