【发布时间】:2021-04-30 17:10:09
【问题描述】:
我想自己在keras中测试损失函数mse。但是,计算出来的答案是不同的。 mse的定义如下: https://en.wikipedia.org/wiki/Mean_squared_error
测试代码如下:
from keras.datasets import boston_housing
import numpy as np
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
x_train = train_data.astype(np.float32)
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(13,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1))
model.compile(optimizer='rmsprop',loss='mse', metrics=['mae'])
y_train = train_targets.astype(np.float32)
# y_test = test_targets.astype(np.float32)
model.fit(x_train,y_train,epochs=1,batch_size=404)
print(np.mean((y_train - model.predict(x_train).ravel()) ** 2))
显示在keras中损失函数在816左右。但是从mse的定义来看,结果是704左右,为什么这里的结果不一样呢?
【问题讨论】:
-
假设你改变了你的
epochs=1,batch_size=404,即一次性训练整个批次,所以你没有给模型太多训练,而模型训练给了你mse。现在使用该训练模型,您可以预测相同的训练数据。该模型不会给您相同的 mse,因为当它看到您的 404 个数据点时,它已经调整了权重。因此,该模型不太可能在训练数据上表现出相同的性能,否则它将是一个过拟合的模型。 -
@simpleApp 我改变了epochs和batch_size,损失函数结果还是不一样。对于 keras,是 8412。对于我的计算,大约是 1469。谢谢
-
它们相距甚远,因此没有意义。需要挖掘更多。
标签: python keras loss-function