首页 > 解决方案 > 一段时间后,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

标签: pythonmachine-learningtimedeploymentkeras

解决方案


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

K.clear_session()

在......的最后run_model()

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

如果你不重置你的图表K.clear_session(),张量流将继续向它添加节点,因此每次迭代都需要更长的时间,直到进程本身被终止。


推荐阅读