我有一个包含 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
最佳答案
如果您使用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/