每次循环迭代后内存增加

时间:2019-01-18 11:51:38

标签: python loops tensorflow memory keras

在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

1 个答案:

答案 0 :(得分:0)

即使在注释部分中出现了解决方案(答案部分),也要在此处指定答案(为社区的利益

增加内存的问题已通过Ending the Session解决,并在每次迭代完成后每次加载trained model