Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套while\u循环的张量流优化_Python_Tensorflow - Fatal编程技术网

Python 嵌套while\u循环的张量流优化

Python 嵌套while\u循环的张量流优化,python,tensorflow,Python,Tensorflow,我正在尝试将此方法用于TensorFlow(取自): 我已经使用三个tf.while_循环重新编写了这篇文章,但注意到它非常慢(工作示例): (注意:我知道在这种情况下我返回的是一个值,而不是一个矩阵。但这是一个单独的问题) 一系列16x256值的计算大约需要4-5秒。现在我想知道如何优化这个。在这种情况下,有没有替代使用tf.while\u循环的方法?我的CPU似乎也有相当高的负载,我在训练时收到很多这样的信息: 2017-10-30 17:00:51.234993:I tensorflow/

我正在尝试将此方法用于TensorFlow(取自):

我已经使用三个tf.while_循环重新编写了这篇文章,但注意到它非常慢(工作示例):

(注意:我知道在这种情况下我返回的是一个值,而不是一个矩阵。但这是一个单独的问题)

一系列16x256值的计算大约需要4-5秒。现在我想知道如何优化这个。在这种情况下,有没有替代使用tf.while\u循环的方法?我的CPU似乎也有相当高的负载,我在训练时收到很多这样的信息:

2017-10-30 17:00:51.234993:I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247]PoolAllocator:257610 get请求后,put_count=385620 executed_count=128000 execution_rate=0.331933,未满足的分配率=0

我对TensorFlow的了解仍然有限,我想知道可以做些什么来优化这个方法


我使用的是python 2.7和TensorFlow 1.2.0,我不熟悉雅可比方程,但基本上应该避免在TensorFlow中循环元素。您应该在张量/矩阵运算中考虑它,并使用TFAPI进行张量运算。我在他们的源代码中找到了雅可比计算:


也许会有帮助。

我不熟悉雅可比方程,但基本上应该避免在Tensorflow中循环元素。您应该在张量/矩阵运算中考虑它,并使用TFAPI进行张量运算。我在他们的源代码中找到了雅可比计算:

也许有帮助

def _jacobian_product_sq_euc(X, Y, E, G):
    m = X.shape[0]
    n = Y.shape[0]
    d = X.shape[1]

    for i in range(m):  # 0 - 4
        for j in range(n):
            for k in range(d):
                G[i, k] += E[i,j] * 2 * (X[i, k] - Y[j, k])
def calc_score():
    gm = tf.zeros([16, 256])

    i = 0
    i_max = 16
    j_max = 16
    d_max = 256

    while_condition_loop1 = lambda i, gm_score: tf.less(i, i_max)
    while_condition_loop2 = lambda i, j, gm_score: tf.less(j, j_max)
    while_condition_loop3 = lambda i, j, d, gm_score: tf.less(d, d_max)
    gm_score = tf.constant(0.)

    def loop3(i, j, d, gm_score):
        gm_score = gm_score + e[i+1, j+1] * 2 * tf.abs((x[i,d] - y[j, d]))
        return [i, j, tf.add(d,1), gm_score]

    def loop2(i, j, gm_score):
        d = 0
        _, _, _, gm_score = tf.while_loop(while_condition_loop3, loop3, [i, j, d, gm_score])
        return [i, tf.add(j,1), gm_score]

    def loop1(i, gm_score):
        j = 0
        _, _, gm_score = tf.while_loop(while_condition_loop2, loop2, [i, j, gm_score])
        return [tf.add(i,1), gm_score]

    _, gm_score = tf.while_loop(while_condition_loop1, loop1, [i, gm_score])

    return gm_score