在Keras / Tensorflow中计算困惑和内存问题

时间:2018-12-30 14:17:19

标签: tensorflow memory keras nlp perplexity

我想在每个训练时期之后用困惑度评估我的模型。我正在将Keras与Tensorflow后端一起使用。问题在于,每次评估之后,都会使用越来越多的内存,但从未释放过。因此,经过几个时期后,我的系统崩溃了。如果我不使用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 :(得分:0)

无需使用TensorFlow评估此指标,您编写的代码是在每次调用图形时将all_labels数组添加到图形中,这说明了您所看到的内存使用情况。

请考虑使用numpy实现所有这些计算,或者使用feed_dict(而不使用tf.convert_to_tensor)在会话中使用新数据进行评估的操作。