Память увеличивается после каждой итерации цикла - PullRequest
0 голосов
/ 18 января 2019

У меня проблемы с памятью во время работы модели в цикле while. У меня есть обученная модель, которую я сохранил.

Я создал функцию, в которой входами являются модели, обученные входы и соответствующие выходы.

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

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

Может кто-нибудь предложить что-нибудь?

Я не уверен, как использовать K.clear_session () и будет ли он работать или нет.

Код следующий:

def reverse_generator(generator, y_sample,x_sample):

    i=0
    result_inputs=np.zeros((len(y_sample),11),dtype=np.float16)
    while i < len(y_sample):
        if np.count_nonzero(y_sample[i])==2:
            y_sample[i][y_sample[i] != 0] = 1.0
            latent_vec = y_sample[i]
            latent_vec=latent_vec[np.newaxis,...]
        elif np.count_nonzero(y_sample[i])==1:
            #print('we are in 1')
            y_sample[i][y_sample[i] != 0] = 1.0
            latent_vec = y_sample[i]
            latent_vec=latent_vec[np.newaxis,...]                  
        elif np.count_nonzero(y_sample[i])==3:
            y_sample[i][y_sample[i] != 0] = 0.33
            latent_vec = y_sample[i]
            latent_vec=latent_vec[np.newaxis,...]        
        elif np.count_nonzero(y_sample[i])==4:
            y_sample[i][y_sample[i] != 0] = 0.25
            latent_vec = y_sample[i]
            latent_vec=latent_vec[np.newaxis,...]
    """Gradient descent to map images back to their latent vectors."""

        target = K.placeholder((91))
        loss = K.sum(K.abs(generator.outputs[0] - target))
        grad = K.gradients(loss, generator.inputs[0])[0]
        sess = K.get_session()
        update_rate = 0.001
        for k in range(1):
            for _ in range(10):
                update_vec, cost = sess.run([grad, loss], feed_dict={target: x_sample[i],generator.inputs[0]: latent_vec})
                latent_vec -= update_vec * update_rate                
        result_inputs[i,:]=latent_vec[0,:]
        print('#############final latent vector of input number############# ' +str(i) , np.abs(np.around(y_sample[i],2)))        
        i=i+1

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