2017-05-10 55 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

我用一个最简单的例子来更新这个问题。 –