Утечка памяти Tensorflow при каждом вызове session.run () с завершенным графиком - PullRequest
2 голосов
/ 14 мая 2019

Я пытаюсь использовать API tf.data для подачи данных изображения переменного размера (LxLx2) в мою модель, однако я замечаю, что я теряю память на каждой итерации.Я ожидаю, что использование памяти будет определяться самым большим изображением в наборе данных, однако я вижу, что использование памяти увеличивается даже при обработке изображения, которое меньше максимального видимого размера.

Утечка памяти за 100 итераций

Когда я собираю обработанные функции напрямую, а не вычисляю активации нейронной сети, память, похоже, не просачивается.

Ожидаемая памятьuse (исключая вычисления NN)

Кажется, что наиболее распространенной причиной проблемы такого типа является динамическое добавление узлов в граф, однако я вызываю graph.finalize () до итерации и непоймать любую ошибку.

Я использую Python 3.5.4 и tenorflow 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...