Как вручную удалить тензоры из памяти? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть некоторые проблемы с тем, как тензорный поток обрабатывает память.Я хотел бы удалять тензоры из моей памяти после каждой итерации на этом игрушечном примере.

Я использую tenorflow EagerExecution.Я пробовал с переменными и с простыми тензорами.tf.assign не делает работу.Все больше и больше памяти используется.Я думаю, это нормально, чтобы иметь возможность вычислить градиент.Даже если я применяю какой-то фиктивный оптимизатор в конце каждой итерации, память не освобождается (точнее, иногда это происходит, но общая тенденция заключается в том, что использование памяти растет).

Так же, как и этоможно удалить вручную?

import tensorflow as tf
import tensorflow.contrib.eager as tfe
import numpy as np
import time as ti


tf.enable_eager_execution()

for i in range(150):
    all_subject=tfe.Variable(np.random.rand(200, 500), dtype=tf.float32)
    tf.assign(all_subject, np.random.rand(200,500) )
    ti.sleep(1.0)
    del all_subject
    ti.sleep(0.5)

Как выглядит выделение:

Профиль памяти

1 Ответ

0 голосов
/ 31 мая 2018

В соответствии с документацией о быстром выполнении ,

Во время активного выполнения время жизни объектов состояния определяется временем жизни их соответствующего объекта Python.

Таким образом, вы не должны наблюдать никаких утечек памяти в вашем коде, даже без явного del: простой факт переназначения вашей переменной чему-то другому должен освободить память.

Однако это не такчто происходит, и я наблюдаю ту же утечку памяти, что и у вас.

Так что это может быть (серьезная) ошибка, которую вы можете отправить здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...