非线性回归:为什么模型不学习?

Sam*_*dav 3 python regression machine-learning neural-network keras

我刚开始学习keras.我正在尝试在keras中训练一个非线性回归模型,但模型似乎并没有学到太多东西.

#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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我究竟做错了什么?

des*_*aut 6

你的学习率太高了.

此外,与您的问题无关,但您不应该要求metrics=['accuracy'],因为这是回归设置,准确性毫无意义.

所以,随着这些变化:

sgd = SGD(lr=0.001);
model.compile(loss='mse', optimizer=sgd)

plt.legend([ 'Predicted Y' ,'Actual Y']) # typo in legend :)
Run Code Online (Sandbox Code Playgroud)

这里有一些输出(由于你的随机元素,运行结果会有所不同y):

在此输入图像描述

在此输入图像描述

  • [here](https://github.com/ChristosChristofidis/awesome-deep-learning)是目前可用的课程/教程的详尽列表.就个人而言,我认为Andrew Ng的专业@ Coursera和Jeremy Howard的fast.ai课程的组合([评论](https://hackernoon.com/fast-ai-what-i-learned-from-lessons-1- 3-b10f9958e3ff))是一个很好的方法(向下滚动[这里](https://towardsdatascience.com/thoughts-after-taking-the-deeplearning-ai-courses-8568f132153)进行非常简短的比较).[斯坦福有线电视新闻网](http://cs231n.github.io/)也很棒(顺便说一下,也欢迎大家投票;) (3认同)
  • @SamarYadav没有黄金法则 - 无论对于特定问题有效!例如,您可以以0.1的速率成功训练MNIST上的小行星; 通常我们从0.01开始(有充分的理由这是Keras的默认值),我们继续试用和错误,如果它不起作用进一步减少它(这实际上是我在这里做的) (2认同)