使用Keras进行简单线性回归

我一直在尝试使用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.')

生成的图表如下所示:

Plot

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


回答:

你应该增加优化器的学习率。在RMSprop优化器中的默认学习率值设置为0.001,因此模型需要几百个周期才能收敛到最终解(你可能已经注意到这一点,训练日志显示损失值下降缓慢)。要设置学习率,请导入optimizers模块:

from keras import optimizers# ...model.compile(optimizer=optimizers.RMSprop(lr=0.1), loss='mean_squared_error', metrics=['mae'])

0.010.1中的任何一个都应该可以正常工作。进行此修改后,你可能不需要训练模型200个周期。甚至5个、10个或20个周期可能就足够了。

另外请注意,你正在执行回归任务(即预测实数),而'accuracy'作为指标是用于执行分类任务时(即预测离散标签,如图像的类别)。因此,如上所示,我已将其替换为mae(即平均绝对误差),这也比这里使用的损失值(即均方误差)更易于解释。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注