Keras模型训练一段时间后会占用更多时间

时间:2018-11-06 11:03:46

标签: python machine-learning time deployment keras

我有一个指向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秒。这没有道理,因为

  1. 这些模型是独立的(一个模型在开始下一次训练之前就被销毁了。)
  2. 模型架构相同
  3. 数据大小几乎相同。

所以,我的问题是:模型训练难道不应该花几乎相同的时间吗?

这是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

1 个答案:

答案 0 :(得分:0)

如果您使用tensorflow作为keras后端,我建议致电

K.clear_session()

run_model()

的末尾

确保您添加了所需的导入from keras import backend as K

如果您不重置K.clear_session()的图形,则tensorflow将继续向其添加节点,结果是每次迭代都将花费更长的时间,直到进程本身被杀死。