首页 > 解决方案 > 每次循环迭代后内存增加

问题描述

在 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

标签: pythonloopstensorflowmemorykeras

解决方案


在此处指定解决方案(回答部分),即使它出现在评论部分中也是为了社区的利益

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


推荐阅读