我準備了一個機器學習算法的TensorFlow實現:這種實現速度非常慢。不幸的是,我無法看到我犯了什麼錯誤,所以來到這裏問。基本操作的性能
假設我有很多參數的值取決於單個變量,例如曆元。
例如,我有這樣的參數:
sSigma = tf.maximum(
tf.multiply(sSigma0, tf.exp(-tf.divide(epoch,sSigmaTau))),
sSigmaMin, name='s_sigma')
值sSigma
用於每個曆元的每一個輸入一個示例,並且計算爲可變epoch
的函數(sSigma0, sSigmaTau, sSigmaMin
是tf.constant
)。
我想問:
是每次使用時進行評估?在變量
epoch
更改其值然後緩存之後,是否僅評估一次?我應該如何使用這種類型的參數?
- 它是如何實現的,現在
- 使用的
tf.Variable
- 一個
tf.placeholder
epoch
,而不是使用它作爲一個變量,在每一個時代的開始設置其與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())
提供了一個鏈接到你的代碼的精簡版本,突出顯示了問題。你問了很多問題,請考慮將一些問題轉移到另一個帖子 – Wontonimo
在你的例子中,'maxInA'將在最後一次'mainOp.eval()'調用期間被精確評估一次。 –