我用這個功能來生成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次迭代後將會更長。
有誰知道這可能來自哪裏以及如何避免它(無需重新啓動python每5次迭代)。 我在IPython,GTX650Ti(1Go內部存儲器)上的tensorflow後端運行此操作。 它也值得注意我的內存消耗量緩慢增長(約50-100Mo通話)。
不熟悉'keras',想到的不過第一件事可能會用'yield'替換'return',因爲生成器消耗的內存要少得多,而且只有在調用時纔會激活。 –