为什么Keras的MSE与我计算的不一样?
我使用以下代码:为什么Keras的MSE与我计算的不一样?,keras,neural-network,Keras,Neural Network,我使用以下代码: 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): mean
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
如果我移除活动\u正则化器=我的正则化器
,则它们将更接近,但仍然不同:
MSE from Keras: 0.09773887693881989
Calculated MSE: 0.09773887699599623
答案很清楚。你有一个正则化器。 正则化器的作用是在损失函数中添加一个项,因此预期的行为是有更大的损失
还有一点不同,那就是精确性。可能使用浮点32 vs浮点64,或者使用不同的算法在GPUxCPU上进行计算。我不会担心这种差异 谢谢。这里似乎有一个类似的问题,但作者没有提供示例。你的例子很好。