Расчет проблем с запутанностью и памятью в Keras / Tensorflow - PullRequest
0 голосов
/ 30 декабря 2018

Я бы хотел оценивать свою модель с недоумением после каждой тренировочной эпохи.Я использую Keras с бэкэндом Tensorflow.Проблема в том, что после каждой оценки все больше и больше памяти используется, но никогда не освобождается.Так что после нескольких эпох моя система падает.Это работало бы без проблемы с памятью, если бы я не использовал керасы и функции тензорного потока.Но тогда это будет слишком медленно.Вот код:

def compute_perplexity(self, modelName, sentences):
    all_labels, all_predictions = self.predictLabels_for_perplexity_evaluation(self.models[modelName], sentences)
    # add an axis to fit tensor shape
    for i in range(len(all_labels)):
        all_labels[i] = all_labels[i][:,:, np.newaxis]

#calculate perplexity for each sentence length and each datapoint and append to list
perplexity = []
for i in range(10,15): #range(len(all_labels)):
    start = time.time()
    xentropy = K.sparse_categorical_crossentropy(tf.convert_to_tensor(all_labels[i]), tf.convert_to_tensor(all_predictions[i]))
    perplexity.append(K.eval(K.pow(2.0, xentropy)))
    print('time for one set of sentences. ', time.time()- start)
#average for each datapoint
for i in range(len(perplexity)):
    perplexity[i] = np.average(perplexity[i], axis=1)
    perplexity[i] = np.average(perplexity[i])

return np.mean(perplexity)

1 Ответ

0 голосов
/ 30 декабря 2018

Нет необходимости оценивать эту метрику с помощью TensorFlow. То, что вы кодируете, - это добавление массива all_labels к графику при каждом его вызове, что объясняет использование памяти, которое вы видите.

Подумайте о том, чтобы реализовать все эти вычисления с использованием numpy или выполнить операцию, которую вы оцениваете с новыми данными в сеансе, используя feed_dict (без использования tf.convert_to_tensor).

...