Как ускорить расчет потерь, который выполняется по очереди

Я создаю автоэнкодер и для проверки прогресса модели - я вычисляю MSE и MAE после каждой эпохи для каждой записи в наборе проверки:

for validation_sample in x_pred:
   prediction = autoencoder.predict(validation_sample)
   current_validation_mae.append(keras.backend.eval(keras.losses.mean_absolute_error(validation_sample, prediction)))
   current_validation_mse.append(keras.backend.eval(keras.losses.mean_squared_error(validation_sample, prediction)))

После этого я беру этот массив, чтобы получить реальный MAE / MSE, разделив его на количество образцов при проверке.

Мои данные - это данные об экспрессии генов. 1 образец содержит 17000 функций и 1 точку данных для каждой функции. Всего 5000 образцов.

Производительность при использовании валидации 10 образцов (на суперкомпьютере):

Прогноз создан за 0,019748687744140625 секунд.

MAE заняло: 1.1507933139801025 секунд.

MSE заняла: 1,1251187324523926 секунд.

Что можно улучшить?


person Alexander Aksjonov    schedule 29.01.2020    source источник
comment
Почему вы делаете это по отдельности, а не для всей партии сразу?   -  person thushv89    schedule 30.01.2020
comment
Когда я помещаю весь свой x_pred в autoencoder.predict (x_pred) - он выводит 1 сэмпл, хотя сэмплов много. Вот почему я думаю, мне нужно делать это по одному.   -  person Alexander Aksjonov    schedule 30.01.2020


Ответы (1)


Оказалось, что .predit () действительно возвращает ту же форму, что и ввод, поэтому не нужно было его зацикливать:

        predictions = autoencoder.predict(x_pred)
        current_validation_mae = np.mean(keras.backend.eval(keras.losses.mean_absolute_error(x_pred, predictions)))
        current_validation_mse = np.mean(keras.backend.eval(keras.losses.mean_squared_error(x_pred, predictions)))

Убыток также рассчитывается по всей партии.

person Alexander Aksjonov    schedule 03.02.2020