我一直在尝试在 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.')
生成的图如下:
有人可以指出上述模型定义中的缺陷(可以确保更好的拟合)吗?
最佳答案
您应该提高优化器的学习率。 RMSprop
优化器中学习率的默认值设置为 0.001
,因此该模型需要几百个 epoch 才能收敛到最终解决方案(您自己可能已经注意到这一点如训练日志所示,损失值缓慢下降)。要设置学习率导入 optimizers
模块:
from keras import optimizers
# ...
model.compile(optimizer=optimizers.RMSprop(lr=0.1), loss='mean_squared_error', metrics=['mae'])
0.01
或 0.1
都应该可以正常工作。进行此修改后,您可能不需要训练模型 200 个时期。甚至 5、10 或 20 个纪元可能就足够了。
另请注意,您正在执行回归任务(即预测实数),并且在执行分类任务时使用'accuracy'
作为度量(即预测离散标签,如图像的类别).因此,正如您在上面看到的,我将其替换为 mae
(即平均绝对误差),这也比此处使用的损失值(即均方误差)更易于解释。
关于python - 使用 Keras 进行简单线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51181393/