我使用此函数生成keras模型:
def nn_model(n1,n2=None,n3=None):
model = Sequential()
model.add(Dense(n1, input_dim=len(features), init='he_normal'))
model.add(PReLU())
if n2 != None:
model.add(Dense(n2, init = 'he_normal'))
model.add(PReLU())
if n3 != None:
model.add(Dense(n3, init = 'he_normal'))
model.add(PReLU())
model.add(Dense(1, init='he_normal'))
model.compile(loss='mae', optimizer='adadelta')
return(model)
运行它的代码:
N1 = [10,9,8,7,6]
N2 = [8, 7, 6, 5, 4, 3, None]
N3 = [6, 5, 4, 3, 2, None]
test_list = [item for item in product(N1,N2,N3) if sorted(item, reverse = True) == list(item)][start_index:]
for m,(n1,n2,n3) in enumerate(test_list):
model = nn_model(n1,n2,n3)
# fit model and predict
它工作正常,但每次调用它时,返回编译模型的速度会变慢。如果我重新启动Python,我会像平常一样再次工作,但在每次迭代后它会变慢。在30次迭代之后,它花费了将近5分钟,而第一次呼叫则需要10秒。 我运行的模型在形状和大小上都相似,所以这不是问题。如果我先生成相同的模型,或者在10次迭代后生成相同的模型,则在10次迭代后会更长。
有谁知道这可能来自何处以及如何避免它(没有每5次迭代重新启动python)。 我在IPython中运行它,在GTX650Ti(1Go内存)上的张量流后端。 值得注意的是我的RAM消耗会慢慢增长(通过调用~50-100Mo)。
答案 0 :(得分:1)
所有模型都是在默认的TF图形中创建的,随着时间的推移会变得越来越大。
解决方案是在图形范围内创建模型,或使用以下Keras实用程序清除默认图形:
from keras import backend as K
K.clear_session()