我有一个指向500个用户的数据库的链接。从这些用户中提取数据。每个用户的训练数据集总大小为[6000*4]
,即4个功能和6000个训练示例。为这些用户中的每个用户都训练了一个神经网络。
以下是代码中发生的简短代码:
user_list = get_users_list()
for each_user in user_list:
is_succesful = run_model(each_user)
def run_model():
training_data = extract_data() # 6000 * 4 samples
X_nn,Y_nn = training_data[:,0],training_data[:,1]
start_time = time.time()
model = fit_nn(X_nn,Y,nb_epoch = 200,batch_size = 20) # code of this is appended below
end_time = time.time()
duration = end_time - start_time
print(str(duration))
model.save_model('some_model')
return True
出现的问题是:对于最初的15-20个用户,培训时间约为90秒。 但是,在对15-20位用户进行培训之后,培训时间会不断增加,并达到 1600秒。这没有道理,因为
所以,我的问题是:模型训练难道不应该花几乎相同的时间吗?
这是fit_nn
def fit_nn(x_train,y_train,nb_epoch,batch_size):
model = Sequential()
model.add(Dense(300, activation="relu",input_shape=(x_train.shape[1],)))
model.add(Dropout(0.3))
model.add(Dense(150, activation="relu"))
model.add(Dense(50, activation="relu"))
model.add(Dense(30, activation="relu"))
model.add(Dense(1))
optimizer = optimizers.RMSprop(0.001)
model.compile(loss='mse',optimizer=optimizer,metrics=['mae'])
model.fit(x_train,y_train,epochs=nb_epoch,batch_size=batch_size,verbose=2,shuffle=True)
return model
答案 0 :(得分:0)
如果您使用tensorflow作为keras后端,我建议致电
K.clear_session()
run_model()
确保您添加了所需的导入from keras import backend as K
如果您不重置K.clear_session()
的图形,则tensorflow将继续向其添加节点,结果是每次迭代都将花费更长的时间,直到进程本身被杀死。