python - 使用 Keras 进行简单线性回归

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

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

生成的图如下:

Plot

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

最佳答案

您应该提高优化器的学习率。 RMSprop 优化器中学习率的默认值设置为 0.001,因此该模型需要几百个 epoch 才能收敛到最终解决方案(您自己可能已经注意到这一点如训练日志所示,损失值缓慢下降)。要设置学习率导入 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(即平均绝对误差),这也比此处使用的损失值(即均方误差)更易于解释。

关于python - 使用 Keras 进行简单线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51181393/

相关文章:

python - Beautiful Soup 嵌套 div(添加额外功能)

python - 带有 Tensorflow 的 CNN,CIFAR-10 的准确率低且没有改进

python - 如何从 urllib 中读取 lines()

python - 我无法使用使用 pandas Dataframes 作为参数的生成器创建 Dataset.from_generator()

tensorflow - 图像分类迁移学习需要负例吗?

python-3.x - 拟合顺序模型后缺少 val_acc

machine-learning - TensorFlow - GradientDescentOptimizer - 我们真的找到了全局最优吗?

python - Django Rest 框架文件上传

python - 在 Keras 中连接三个不同维度的输入

excel - 计算游戏中单位的值(value)