Почему MSE от Keras не совпадает с тем, что я рассчитываю? - PullRequest
1 голос
/ 26 сентября 2019

Я использую следующий код:

import numpy as np
import math
import keras
from keras.models import Model, Sequential
from keras.layers import Input, Dense, Activation
from keras import regularizers
from keras import backend as K

a=1

def my_regularizer(inputs):
    means=K.mean((inputs),axis=1)
    return a*K.sum(means)**2

x_train=np.random.uniform(low=-1,high=1,size=(200,2))
x_test=np.random.uniform(low=-1,high=1,size=(20,2))
model=Sequential([
     Dense(20,input_shape=(2,),activity_regularizer=my_regularizer),
     Activation('tanh'),
     Dense(2,),
     Activation('linear')
])

model.compile(optimizer='adam',loss='mean_squared_error')
hist=model.fit(x_train,x_train,epochs=10,verbose=1,validation_data=(x_test,x_test))

print('MSE from Keras: ',hist.history['val_loss'][-1])
y_pred=model.predict(x_test)
print('Calculated MSE: ', np.mean((y_pred-x_test)**2))

Вывод:

MSE from Keras:  0.1555381715297699
Calculated MSE:  0.12031101597786406

Если я уберу activity_regularizer=my_regularizer, то они будут ближе, но все же будут другими:

MSE from Keras:  0.09773887693881989
Calculated MSE:  0.09773887699599623

1 Ответ

1 голос
/ 26 сентября 2019

Ну, ответ ясен.У вас есть регуляризатор.Роль регуляризатора заключается в добавлении термина в функцию потерь, поэтому ожидаемое поведение будет иметь большую потерю.

Для другой маленькой разницы, это просто точность.Может быть, использовать float 32 против float 64 или выполнять вычисления на GPU x CPU с разными алгоритмами.Я бы не беспокоился об этой разнице.

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