2017-10-15 44 views
0

我是keras的新手。当我实施线性回归时,我遇到了一个纳税损失,这使我非常困惑。我把我的源代码如下:使用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) 

然后输出损失是南。 但是,当我改变了训练数据,相应的代码是:

x = np.linspace(1,10,1e3) 

一切都很好,最终我能得到在W逼近3.0与B接近1 任何人知道为什么会发生这种情况?提前致谢。

回答

0

问题是,x = np.linspace(1,100,1e3)会给你1000个数值从1到100.想象一下所有这些数字乘以一些随机值w来创建你的预测(x * w),然后平方和求得损失值MSE功能。这个数字太大了,从infnan

好的做法是保持数据用平均值是0.0,低方差(例如,1)

在这种情况下一个简单的办法将是100这样来划分数据:

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