Модель Tensorflow не может полностью удалить и все еще занимает память процессора - PullRequest
0 голосов
/ 13 апреля 2020

Я работаю с оптимизацией архитектуры нейронной сети и гипераметров. По этой причине я строю для l oop значение для отправки по гиперметрам и строю / обучаю / оцениваю новую модель на каждой итерации. Пример, подобный этому:

for k in range(10):
    #full_model() function is used to build the new model with 
    #hyperparameters l1,l2,l3
    md=full_model(l1,l2,l3)
    md.compile(optimizer='SGD',loss='categorical_crossentropy',metrics=['accuracy'])
    md.fit(trads,validation_data=vds,epochs=3)
    teloss,teacc=md.evaluate(teds)


, и я пытаюсь полностью удалить созданную модель и освободить занятую память процессора после оценки в l oop, добавив следующий код в l oop:

del md
gc.collect()
tf.keras.backend.clear_session()
tf.compat.v1.reset_default_graph()

Но я заметил, что память процессора не будет освобождена после добавления кода выше в l oop, и использование памяти будет увеличиваться во время итерации. Наконец, процесс будет остановлен системой из-за утечки памяти.

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

class custom_layer(tf.keras.layers.Layer):

   def __init__(self):
      self.layer_li=[layers.conv(),layers.Maxpool2d()....]
      ...

   def call(self,inputs):
    self.out1,self.out2=self.layer_li[0](inputs),self.layer_li[1(inputs)
    return [self.out1,self.out2]


class build_model(tf.keras.Model):

    def __init__(self):
        sub_layers_list=[sublayer_1(),sublayer2...]

   def call(self,inputs):
        self.x=self.sub_layers_list[0](inputs)
        for k in range(1,len(sub_layers_list)):
           self.out=sub_layers_list[k](self.out)

        return self.out







Может кто-нибудь помочь мне работать таким образом без утечки памяти? Заранее благодарен за любую помощь!

отредактировано мой код запускается в tennflowflow2.1 с Ubuntu 16.04

1 Ответ

0 голосов
/ 26 апреля 2020

Наконец, эта проблема решена путем изменения ОС на Windows. Если у кого-то есть более разумный способ справиться с этим в Ubuntu, добро пожаловать, чтобы дать некоторые предложения или комментарии.

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