У меня проблемы с памятью во время работы модели в цикле 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