使用keras实现线性回归导致nan损失

使用keras实现线性回归导致nan损失,keras,linear-regression,Keras,Linear Regression,我是keras的新手。当我实现线性回归时,我遇到了一个nan损失,这让我非常困扰。我把我的源代码放在下面: from keras.layers import Dense,Activation from keras.models import Sequential import numpy as np model = Sequential() model.add(Dense(1,input_shape=(1,))) model.add(Activation('linear')) model.com

我是keras的新手。当我实现线性回归时,我遇到了一个nan损失,这让我非常困扰。我把我的源代码放在下面:

from keras.layers import Dense,Activation
from keras.models import Sequential
import numpy as np
model = Sequential()
model.add(Dense(1,input_shape=(1,)))
model.add(Activation('linear'))
model.compile(loss='mse',optimizer='sgd',metrics=['mse'])
x = np.linspace(1,100,1e3)
y = 3*x + 1 + np.random.normal(size=x.shape)
model.fit(x,y,batch_size=100)
那么损耗的输出是nan。 但当我改变训练数据时,对应的代码是:

x = np.linspace(1,10,1e3)
一切都很好,最后我可以得到近似为3.0的w和近似为1的b。 有人知道为什么会这样吗?提前感谢。

问题是x=np。linspace1100,1e3将为您提供1000个值从1到100的数字。想象所有这些数字乘以某个随机值w,生成预测x*w,然后进行平方和求和,得到具有MSE函数的损失值。这个数字太大了,从inf到nan都溢出了

一个好的做法是保持数据的平均值为0.0且方差较低,例如1

在这种情况下,一个简单的解决方法是将数据除以100,如下所示:

x = np.linspace(1,100,1e3) / 100

我是一名NN新手,我花了整整两天的时间让一个线性回归模型与Keras一起工作,直到我最终发现数据需要标准化,以便更快地学习

您可以将以下两行添加到程序中:

from·keras.layers·import·BatchNormalization
model.add(BatchNormalization())