gpt4 book ai didi

python - Tensorflow 在每次调用带有最终图的 session.run() 时泄漏内存

转载 作者:行者123 更新时间:2023-12-05 07:23:12 25 4
gpt4 key购买 nike

我正在尝试使用 tf.data api 将可变大小的图像数据 (LxLx2) 提供给我的模型,但是我注意到我在每次迭代时都在泄漏内存。我预计内存使用量将由数据集中最大的图像决定,但是我可以看到,即使在处理小于目前看到的最大尺寸的图像时,内存使用量也在增加。

Leaking memory over 100 iterations

当我直接收集处理后的特征而不是计算神经网络激活时,内存似乎没有泄漏。

Expected memory use (forgoing NN computation)

似乎导致此类问题的最常见原因是向图中动态添加节点,但是我在迭代之前调用了 graph.finalize() 并且没有捕获到任何错误。

我正在使用 python 3.5.4 和 tensorflow 1.10,并且只在 CPU 上运行计算。

import tensorflow as tf
from sys import argv

# Data preparation
def record_parser(value):
keys_to_features = {
'seq_length': tf.VarLenFeature(dtype=tf.int64),
'seq_feat': tf.VarLenFeature(dtype=tf.float32)
}
parsed = tf.parse_single_example(value, keys_to_features)
length_ = tf.reshape(parsed['seq_length'].values, [])
i32_len = tf.cast(length_, dtype=tf.int32)
features_ = tf.reshape(parsed['seq_feat'].values, [i32_len, i32_len, 2])
return features_

graph = tf.get_default_graph()
dataset_ = tf.data.TFRecordDataset(argv[1])
dataset_ = dataset_.map(lambda value: record_parser(value))
dataset_ = dataset_.batch(1)
iterator = dataset_.make_one_shot_iterator()
features = iterator.get_next()

# NN part
nn0 = tf.layers.conv2d(features, filters=64, kernel_size=15, padding='SAME',\
activation=tf.nn.relu)
nn = tf.layers.dense(nn0, units=100, activation=tf.nn.relu)
prediction = tf.layers.dense(nn, 17, activation=None)

var_init_op = tf.group(
tf.global_variables_initializer(),
tf.local_variables_initializer()
)
graph.finalize()

# Iterating over samples
with tf.Session() as sess:
sess.run(var_init_op)
for i in range(100):
out_loss = sess.run(prediction)
#out_loss = sess.run(features)

最佳答案

为了社区的利益在此提及答案。

使用tf.data时的内存泄漏问题API Tensorflow Version 1.10通过升级到 Tensorflow Version 1.13 解决.

关于python - Tensorflow 在每次调用带有最终图的 session.run() 时泄漏内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56123186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com