У меня есть ссылка на базу данных из 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