I just started learning keras. I am trying to train a non-linear regression model in keras but model doesn't seem to learn much.
#datapoints
X = np.arange(0.0, 5.0, 0.1, dtype='float32').reshape(-1,1)
y = 5 * np.power(X,2) + np.power(np.random.randn(50).reshape(-1,1),3)
#model
model = Sequential()
model.add(Dense(50, activation='relu', input_dim=1))
model.add(Dense(30, activation='relu', init='uniform'))
model.add(Dense(output_dim=1, activation='linear'))
#training
sgd = SGD(lr=0.1);
model.compile(loss='mse', optimizer=sgd, metrics=['accuracy'])
model.fit(X, y, nb_epoch=1000)
#predictions
predictions = model.predict(X)
#plot
plt.scatter(X, y,edgecolors='g')
plt.plot(X, predictions,'r')
plt.legend([ 'Predictated Y' ,'Actual Y'])
plt.show()
what am I doing wrong?
Your learning rate is way too high.
Also, irrelevant to your issue, but you should not ask for metrics=['accuracy']
, as this is a regression setting and accuracy is meaningless .
So, with these changes:
sgd = SGD(lr=0.001);
model.compile(loss='mse', optimizer=sgd)
plt.legend([ 'Predicted Y' ,'Actual Y']) # typo in legend :)
here are some outputs (results will be different among runs, due to the random element of your y
):
Just adding this since I had this problem recently. My model wasn't fitting to a polynomial and seemed to only be doing linear regression. After increasing the epochs to 50000, the model began fitting the polynomial properly.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.