Я тренирую модель нейронной сети для прогнозирования. Функция потери - средняя квадратическая ошибка (MSE). Тем не менее, я обнаружил, что MSE, рассчитанный Keras, сильно отличается от рассчитанного Scikit-learn.
Эпоха 1/10 162315/162315 [=============================] - 14 с
87US / шаг - потеря: 111,8723 - mean_squared_error: 111,8723 -
val_loss: 9.5308 - val_mean_squared_error: 9.5308
Epoch 00001: потеря улучшена с inf до 111.87234, спасая модель до
/home/Model/2019.04.26.10.55
Scikit Learn MSE = 208,811126
Эпоха 2/10 162315/162315 [=============================] - 14 с
89us / step - потеря: 4.5191 - mean_squared_error: 4.5191 - val_loss:
3.7627 - val_mean_squared_error: 3.7627
....
Epoch 00010: потери улучшены с 0,05314 до 0,05057, сохраняя модель до
/home/Model/2019.04.26.10.55 Scikit Learn MSE = 0,484048
MSE рассчитывается по Keras
:
model.compile(loss='mse', optimizer='adam', metrics=['mse'])
MSE рассчитывается по Scikit-Learn
:
class my_callback(Callback):
def __init__(self, trainX, trainY, model_name):
self.trainset_X = trainX
self.trainset_Y = trainY
self.model_name = model_name
self.previous_mse = 10000000
def on_train_begin(self, logs={}):
return
def on_train_end(self, logs={}):
return
def on_epoch_begin(self, epoch, logs={}):
return
def on_epoch_end(self, epoch, logs={}):
# ----- Train -----
y_pred = self.model.predict(self.trainset_X, batch_size=64)
curr_mse = mean_squared_error(self.trainset_Y, y_pred)
print('Scikit Learn MSE = %f' % curr_mse)
if curr_mse < self.previous_mse:
print('Save the best model to %s' % self.model_name)
self.model.save(self.model_name)
self.previous_mse = curr_mse
return
def on_batch_begin(self, batch, logs={}):
return
def on_batch_end(self, batch, logs={}):
return
Знаете ли вы, почему есть такие разные? Я также проверил коды Python обоих из них, и они очень похожи.