Обучение модели Keras занимает больше времени через некоторое время - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть ссылка на базу данных из 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 голосов
/ 06 ноября 2018

Если вы используете тензор потока в качестве бэкэнда keras, я предлагаю позвонить

K.clear_session()

в конце run_model()

убедитесь, что вы добавили необходимый импорт from keras import backend as K

Если вы не сбросите свой график, как это делает K.clear_session(), тензор потока будет добавлять к нему узлы, в результате каждая итерация займет больше времени, пока сам процесс не будет остановлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...