Python 在张量变换期间如何管理内存?

Python 在张量变换期间如何管理内存?,python,tensorflow,Python,Tensorflow,即使这个问题涉及TensorFlow,我也会用普通的数学术语来描述我的问题 这么说吧 我有一个矩阵W的维数nxk 大小为1 x k的输入向量x 我需要将x与W 在阅读了一些代码示例之后,我现在的做法如下(n=self.nNodes,k=self.inputShape): 似乎(但我不确定)过了一段时间后,TensorFlow在管理内存(尤其是在GPU上)方面遇到了一些困难,因为expand_dims和tile操作返回了新的张量 有没有办法为X_MM分配一个张量(就像我为W分配张量一样)并将输

即使这个问题涉及TensorFlow,我也会用普通的数学术语来描述我的问题

这么说吧

  • 我有一个矩阵
    W
    的维数
    nxk
  • 大小为1 x k的输入向量
    x
  • 我需要将
    x
    W
在阅读了一些代码示例之后,我现在的做法如下(
n=self.nNodes
k=self.inputShape
):

似乎(但我不确定)过了一段时间后,TensorFlow在管理内存(尤其是在GPU上)方面遇到了一些困难,因为
expand_dims
tile
操作返回了新的张量

有没有办法为
X_MM
分配一个张量(就像我为
W
分配张量一样)并将输入值
X
复制到
X_MM
的每个元素中。这样,
X_MM
的内存将只分配一次

是否有一个“原子”指令可以将一个向量逐行复制到另一个向量中(一种无需分配新内存的平铺)?我应该使用TensorFlow迭代器来获得这个吗


更一般地说,我应该担心TensorFlow的内存管理吗?在我看来,这是一个重要的主题,但在文档中找不到任何相关信息,我看到的所有示例都使用分配新内存的运算符。

Tensorflow自动为您管理内存。您应该以自然的方式编写计算,让Tensorflow为您管理缓冲区

例如,Tensorflow自动为输出重用某些操作的输入缓冲区,而无需执行任何操作。我不知道代码中的特定运算符是否会发生这种情况

如果您遇到特定Tensorflow程序内存不足的问题,请提供详细的、可运行的、自包含的复制。如果没有更多的信息,就不可能说出到底出了什么问题

希望有帮助

inputShape = (10,)

W = tf.Variable(tf.random_uniform( (nNodes, ) + inputShape, 0.0, 1.0, dtype=tf.float32), dtype=tf.float32, name='W' )

x = tf.placeholder(self.__datatype, inputShape, name='input')

x_M = tf.expand_dims(x, 0, name='x_m')

x_MM = tf.tile(x_M, (nNodes, 1), name='x_mm')

spatDiffs = tf.subtract(x_MM, self.W)