python - 训练循环迭代期间 Tensorflow 锯齿形内存使用情况

标签 python numpy memory tensorflow

我正在 Python while 循环中训练神经网络,该循环将持续到达到某个停止条件为止。我注意到,当我训练网络时,我可以看到“锯齿”/类似波浪的内存使用模式,如下所示:

sawtooth memory usage pattern

我已经成功地使用比我的生产模型简单得多的示例来重现这一点。显然,这有些不同,因为我不更新参数,但我相信它复制了我所看到的行为。

import tensorflow as tf
import numpy as np

def main(x_vals):
    x = tf.placeholder(tf.float32, [500, 1000, 1000])

    rs = tf.reduce_sum(x)

    sess = tf.Session()

    v = sess.run(rs, feed_dict={x:x_vals})
    print(v)


if __name__ == "__main__":
    x_vals = np.random.rand(500, 1000, 1000)
    while True:
        main(x_vals)

锯齿的大小似乎与输入数据的大小大致成比例。可以理解的是,每次循环迭代似乎都有一个周期。

这里发生了什么? Tensorflow 是否会复制我在每次 session 评估中的所有数据?这本身不是问题,但如果我可以避免在每次训练循环迭代中复制数据(因为我的整个数据集适合内存),我想这样做,因为我认为分配非常昂贵。我是否在某些地方偏离了最佳实践?

最佳答案

使用 feed_dict 通常会复制数据。最近添加了新功能,可以避免复制,但您必须确保您的数据是字对齐的,请参阅
中的讨论 https://github.com/tensorflow/tensorflow/issues/9690

关于python - 训练循环迭代期间 Tensorflow 锯齿形内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947241/

相关文章:

python - 比较 `exp(-mod(x))` 的解析傅里叶变换与数值傅里叶变换

python - numpy - 自动改变形状?

flash - Adobe AIR 可以使用的最大内存量是多少?

c - 访问C中的外部分配空间

python - 为什么这个 sed 模式在 python 循环中不起作用?

python - 不知道发布搜索按钮的 btnSearch.x 和 btnSearch.y 值

python - 将 QCheckBox 定位在 QListView 项目的左上角

numpy - ValueError : Cannot feed value of shape (128, 28, 28) 对于张量 'Placeholder:0' ,其形状为 '(?, 784)'

memory - 是否有可能在 Rust 中导致内存泄漏?

python - 解析向下滚动的整个网页的html代码