【问题标题】:Non linear Regression: Why isn't the model learning?非线性回归:为什么模型不学习?
【发布时间】:2018-08-02 17:05:32
【问题描述】:

我刚开始学习 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()

我做错了什么?

【问题讨论】:

  • 变量predictions在哪里定义?它似乎没有包含在您的代码中。
  • @SelçukGülcan 我已经更新了predictions 行。请检查。

标签: python machine-learning keras neural-network regression


【解决方案1】:

你的学习率太高了。

另外,与您的问题无关,但您不应该要求metrics=['accuracy'],因为这是一个回归设置和accuracy is meaningless

所以,有了这些变化:

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

plt.legend([ 'Predicted Y' ,'Actual Y']) # typo in legend :)

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

【讨论】:

  • 感谢您的友善和解释。你能给我推荐一些学习深度学习的好资源或教程吗?
  • Here 是当前可用的课程/教程的详尽列表。就个人而言,我认为 Andrew Ng 的专业化 @ Coursera 和 Jeremy Howard (review) 的 fast.ai 课程相结合是一种很好的方法(向下滚动 here 进行非常简短的比较)。 Stanford CNN 也很棒(顺便说一句,也欢迎投票;)