我一直在尝试使用Keras中的神经网络实现一个简单的线性回归模型,希望能理解如何在Keras库中工作。不幸的是,我最终得到的模型非常差。以下是我的实现:
from pylab import *from keras.models import Sequentialfrom keras.layers import Dense#Generate dummy datadata = data = linspace(1,2,100).reshape(-1,1)y = data*5#Define the modeldef 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 modelregr = baseline_model()regr.fit(data,y,epochs =200,batch_size = 32)plot(data, regr.predict(data), 'b', data,y, 'k.')
生成的图表如下所示:
能有人指出上述模型定义中的缺陷(以确保更好的拟合)吗?
回答:
你应该增加优化器的学习率。在RMSprop
优化器中的默认学习率值设置为0.001
,因此模型需要几百个周期才能收敛到最终解(你可能已经注意到这一点,训练日志显示损失值下降缓慢)。要设置学习率,请导入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
(即平均绝对误差),这也比这里使用的损失值(即均方误差)更易于解释。