2017-10-15 70 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