在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
答案 0 :(得分:0)
即使在注释部分中出现了解决方案(答案部分),也要在此处指定答案(为社区的利益。
) 增加内存的问题已通过Ending the Session
解决,并在每次迭代完成后每次加载trained model
。