使用神经网络实现简单的线性回归

数据挖掘 喀拉斯 线性回归
2021-10-06 09:16:56

我一直在尝试使用 Keras 中的神经网络实现简单的线性回归,希望了解如何在 Keras 库中工作。不幸的是,我最终得到了一个非常糟糕的模型。

这是实现:

from pylab import *
from keras.models import Sequential
from keras.layers import Dense

#Generate dummy data
data = data = linspace(1,2,100).reshape(-1,1)
y = data*5

#Define the model
def baseline_model():
   model = Sequential()
   model.add(Dense(1, activation = 'linear', input_dim = 1))
   model.compile(optimizer = 'rmsprop', loss = 'mean_squared_error', metrics = ['accuracy'])
   return model


#Use the model
regr = baseline_model()
regr.fit(data,y,epochs =200,batch_size = 32)
plot(data, regr.predict(data), 'b', data,y, 'k.')

生成的图如下:

阴谋

有人可以指出上述模型定义中的缺陷(可以确保更好的拟合)吗?

1个回答

您的代码完美运行。唯一的问题是参数的学习没有完成。如果您尝试使用 10000 个 epoch,这将起作用,但这对于这个问题来说太过分了。事实上,您可以看到损失正在非常缓慢地减少。

  • 解决方法:提高学习率

我将批量大小设置为 1,因为这会降低此处的收敛速度。当您需要避免过度拟合时,增加批量大小很有用。在这里,您想过度拟合您的数据。此外,我选择在 SGD 优化器中使用更简单的更新规则。通过这些更改,您将看到只需 4 个 epoch 即可完美拟合您的数据。

from pylab import *
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers

#Generate dummy data
data = data = linspace(1,2,100).reshape(-1,1)
y = data*5

#Define the model
def baseline_model():
   model = Sequential()
   model.add(Dense(1, activation = 'linear', input_dim = 1))
   sgd = optimizers.SGD(lr=0.2)
   model.compile(optimizer = sgd, loss = 'mean_squared_error', metrics = ['accuracy'])
   return model


#Use the model
regr = baseline_model()
regr.fit(data,y,epochs = 4,batch_size = 1)
plot(data, regr.predict(data), 'b', data,y, 'k.')