我准备了机器学习算法的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.placeholder
epoch
代替tf.Variable
tf.assign
设置其值?问题的简单代码: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 :(得分:0)
我不确定我是否理解你的问题,但这是我的镜头。
无论有多少其他变量依赖它,变量的值都会被计算一次。例如,如果TF为您创建了以下图表:
变量2的值将被计算一次,然后用于计算3,4和5.此外,在4和6之前不会计算3。
有关详细信息,请阅读this paper。