Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.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 Tensorflow';在非常简单的“;对于循环”;_Python_Tensorflow - Fatal编程技术网

Python Tensorflow';在非常简单的“;对于循环”;

Python Tensorflow';在非常简单的“;对于循环”;,python,tensorflow,Python,Tensorflow,我有一个关于tensorflow的非常奇怪的问题。我将问题简化为以下版本: 我问这个问题是因为我需要运行一系列的训练,我只是把它们放在一个for循环中,然后为每个迭代使用不同的参数 为了简化这个问题,我用tensorflow语言写了一个简单的矩阵乘法,然后我把这个“矩阵乘法训练”放在一个“for循环”中(当然你可以把其他复杂的函数放在for循环中,结论是一样的) 我设置了100000次迭代,这意味着我将运行10000个训练示例。打印每个循环中的时间消耗,然后我可以观察到每个迭代的时间消耗是相同的

我有一个关于tensorflow的非常奇怪的问题。我将问题简化为以下版本:

我问这个问题是因为我需要运行一系列的训练,我只是把它们放在一个for循环中,然后为每个迭代使用不同的参数

为了简化这个问题,我用tensorflow语言写了一个简单的矩阵乘法,然后我把这个“矩阵乘法训练”放在一个“for循环”中(当然你可以把其他复杂的函数放在for循环中,结论是一样的)

我设置了100000次迭代,这意味着我将运行10000个训练示例。打印每个循环中的时间消耗,然后我可以观察到每个迭代的时间消耗是相同的,这没有问题。但是内存成本增长非常快,最后我得到了一个错误:“内存不足”(我希望每次迭代内存应该保持不变)


我知道原因是,在每次迭代中,程序创建了一个新的操作,这将增加内存。我想知道有没有办法在每次迭代后释放内存开销?(此内存问题与GPU情况相同)

您的代码的结构应如下所示:

import tensorflow as tf
import numpy as np

A = tf.placeholder(tf.float32, [1,100])
B = tf.placeholder(tf.float32, [100,100])
result = tf.matmul(A,B)

init_op = tf.global_variables_initializer()

# Later, when launching the model
with tf.Session() as sess:
    # Run the init operation. 
    # This will make sure that memory is only allocated for the variable once.
    sess.run(init_op)

    for i in range(100000):
        a = np.arange(100).reshape(1,-1)
        b = np.arange(10000).reshape(100,100)
        sess.run(result, feed_dict={A: a, B: b})
        if i % 1000 == 0:
            print(i, "processed")

在这里,您将为第一次迭代分配一次内存,并在后续迭代中继续重用相同的内存块。

try
import-gc;gc.collect()
在大约每100次迭代之后。这不是问题。你解决你的需求是错误的。您应该做的是创建一个图,并以迭代方式将数据提供给它。您正在为每个迭代创建新的tf图。这会导致您的内存很快用完。我建议你重新构造你的代码。这不起作用,内存仍然在增加。这个问题有张量流方法吗?我知道你的意思。我只是将我的代码简化成这个版本,我必须将训练放入for循环,这意味着我必须运行多个训练,我的情况必须这样做(出于某些特殊原因)。这就是为什么我必须释放内存,tensorflow不是那样工作的。我知道你有特殊情况。尝试并找到一种方法,如何将您的特殊情况转化为标准。试着从更广阔的角度看待这个问题。弄清楚你如何使用这项技术并解决问题。好的,明白了。非常感谢,我将尝试修改代码。
import tensorflow as tf
import numpy as np

A = tf.placeholder(tf.float32, [1,100])
B = tf.placeholder(tf.float32, [100,100])
result = tf.matmul(A,B)

init_op = tf.global_variables_initializer()

# Later, when launching the model
with tf.Session() as sess:
    # Run the init operation. 
    # This will make sure that memory is only allocated for the variable once.
    sess.run(init_op)

    for i in range(100000):
        a = np.arange(100).reshape(1,-1)
        b = np.arange(10000).reshape(100,100)
        sess.run(result, feed_dict={A: a, B: b})
        if i % 1000 == 0:
            print(i, "processed")