масштабирование данных в настраиваемой функции потери тренировки keras - PullRequest
1 голос
/ 25 апреля 2019

Я определяю настраиваемую функцию потерь для моей модели LSTM (функция RMSE) следующим образом:

def RMSE(y_true, y_pred):
        return K.sqrt(K.mean(K.square(y_pred - y_true)))

пока все хорошо, но проблема в том, что я масштабирую свои входные данные, чтобы они находились вдиапазон [-1, 1], поэтому заявленная потеря будет связана с этой шкалой. Я хочу, чтобы модель сообщала о потере тренировки в диапазоне моих исходных данных, например, применяя функцию scaler.inverse_transform к y_true иy_pred как-то, но не повезло, делая это ... так как они тензорные, а для scaler.inverse_transform требуется массив numpy ....

любая идея о том, как принудительно пересортировать данные и сообщить значения потерь вПравильный масштаб?

1 Ответ

1 голос
/ 26 апреля 2019

scaler.inverse_transform по существу использует параметры scaler.min_ и scaler.scale_ для преобразования данных в sklearn.preprocessing.minmaxscaler. Пример:

from sklearn.preprocessing import MinMaxScaler
import numpy as np

data = np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])
scaler = MinMaxScaler()
data_trans = scaler.fit_transform(data)
print('transform:\n',data_trans)

data_inverse = (data_trans - scaler.min_)/scaler.scale_
print('inverse transform:\n',data_inverse)

# print
transform:
 [[0.   0.  ]
 [0.25 0.25]
 [0.5  0.5 ]
 [1.   1.  ]]
inverse transform:
 [[-1.   2. ]
 [-0.5  6. ]
 [ 0.  10. ]
 [ 1.  18. ]]

Так что вам просто нужно использовать их для достижения своих целей в функции RMSE.

def RMSE_inverse(y_true, y_pred):
    y_true = (y_true - K.constant(scaler.min_)) / K.constant(scaler.scale_)
    y_pred = (y_pred - K.constant(scaler.min_)) / K.constant(scaler.scale_)
    return K.sqrt(K.mean(K.square(y_pred - y_true)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...