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

标签 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

最佳答案

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

K.clear_session()

run_model()的末尾

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

如果您没有像 K.clear_session() 那样重置图表,tensorflow 将继续向其添加节点,因此每次迭代将花费更长的时间,直到进程本身被终止。

关于python - Keras 模型训练在一段时间后会占用更多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53170600/

相关文章:

sql - 如何将分钟添加到日期时间的时间部分

python - 如何将连接列表作为参数传递?

python - 在 mac 上安装 Python/PyGame

python - 如何在 Keras 中累积大批量的梯度

machine-learning - 具有 'age' 特征且某些值缺失的二元分类数据集

linux - wc -l 的性能

php - 使用mysql命令从数据库中选择在线用户

python - 我不知道为什么这个 for 循环程序不起作用(python)。解决方案?

python - 跨平台和跨语言套接字

python - 作为 PC 算法的一部分在 python 中测试条件独立性