tensorflow是否每次调用compute_gradients()时都会创建一个新的numpy数组?

tensorflow是否每次调用compute_gradients()时都会创建一个新的numpy数组?,numpy,tensorflow,Numpy,Tensorflow,tensorflow中的典型训练循环可能如下所示: cg = opt.compute_gradients(loss) grads = [None] * len(cg) for gv in cg: grads[i] = gv[0] # ... do some process to grads ... apply_gradients = opt.apply_gradients(cg) while (...): gradients = sess.run(grads) feed

tensorflow中的典型训练循环可能如下所示:

cg = opt.compute_gradients(loss)
grads = [None] * len(cg)
for gv in cg:
    grads[i] = gv[0]
# ... do some process to grads ...
apply_gradients = opt.apply_gradients(cg)
while (...):
    gradients = sess.run(grads)
    feed = dict()
    for i, grad_var in enumerate(cg)
        feed[grad_var[0]] = gradients[i]
    sess.run(apply_gradients, feed_dict=feed)

每次调用
sess.run(grads)
,都会生成一个新的numpy数组
gradients
(带有新分配的内部内存)。我想在所有的训练迭代中使用一个固定的numpy数组,我怎么能做到呢

tf.Optimizer.compute_gradients()方法不应创建任何新的NumPy数组:而是构建一个TensorFlow操作图,用于计算模型中部分或所有变量的
损失的梯度。返回值不是NumPy数组;它是一个梯度
tf.Tensor
对象对和相应的
tf.Variable
的列表,该梯度应应用于该对象


然而,在循环中调用
opt.compute_gradients()
通常会浪费内存。在没有看到更多代码的情况下,很难说这是否会完全起作用,但您应该能够在循环之前将调用移动到
opt.compute_gradients()
,因为它似乎不依赖于循环内部计算的任何内容。这将避免在每次循环迭代中构建新的TensorFlow图段,并应减少内存成本。
tf.Optimizer.compute_gradients()
方法不应创建任何新的NumPy数组:相反,它构建了一个TensorFlow操作图,用于计算模型中部分或全部变量的
损失梯度。返回值不是NumPy数组;它是一个梯度
tf.Tensor
对象对和相应的
tf.Variable
的列表,该梯度应应用于该对象


然而,在循环中调用
opt.compute_gradients()
通常会浪费内存。在没有看到更多代码的情况下,很难说这是否会完全起作用,但您应该能够在循环之前将调用移动到
opt.compute_gradients()
,因为它似乎不依赖于循环内部计算的任何内容。这将避免在每次循环迭代中构建新的TensorFlow图段,并应减少内存成本。

对不起,我的问题不够清楚。我编辑过,你现在能给我一些建议吗<代码>渐变
现在在我的代码中是一个numpy数组,每次都是一个新数组。我可以在所有训练迭代中使用具有固定内存块的数组吗?我怎么能这么做?我有个主意。我想首先我可以编写一个PythonC扩展,它创建一个使用固定内存的numpy数组。然后我们编辑tensorflow的session run()实现,让它使用我们自己的数组,然后每次执行
sess.run(grads)
,它都会使用固定内存。对不起,我的问题不够清楚。我编辑过,你现在能给我一些建议吗<代码>渐变
现在在我的代码中是一个numpy数组,每次都是一个新数组。我可以在所有训练迭代中使用具有固定内存块的数组吗?我怎么能这么做?我有个主意。我想首先我可以编写一个PythonC扩展,它创建一个使用固定内存的numpy数组。然后我们编辑tensorflow的session run()实现,让它使用我们自己的数组,然后每次执行
sess.run(grads)
,它都会使用固定内存。