繁体   English   中英

使用Keras的简单线性回归

[英]Simple Linear Regression using Keras

我一直在尝试使用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 ,因此模型需要几百个时期才能收敛到最终解决方案(可能您已经注意到这一点,损失值缓慢下降,如训练日志中所示)。 要设置学习率导入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 (即平均绝对误差),这也比这里使用的损失值(即均方误差)更易解释。

以下代码最适合您的数据。

看看这个。

from pylab import *
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
%matplotlib inline

#生成虚拟数据

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

#定义模型

def baseline_model():
    global num_neurons
    model = Sequential()
    model.add(Dense(num_neurons, activation = 'linear', input_dim = 1))
    model.add(Dense(1 , activation = 'linear'))
    model.compile(optimizer = 'rmsprop', loss = 'mean_squared_error')
    return model

在第一个密集层中设置num_neurons

**您可以稍后更改

num_neurons = 17

#使用模型

regr = baseline_model()
regr.fit(data,y,epochs =200, verbose = 0)
plot(data, regr.predict(data), 'bo', data,y, 'k-')

第一个num_neurons = 17的情节很合适。

但即使我们可以探索更多。

点击下面的链接查看图表

num_neurons = 12的绘图

num_neurons = 17的绘图

num_neurons = 19的情节

num_neurons = 20的绘图

你可以看到,因为我们增加了神经元的数量

我们的模型变得更加智能化。 最合适。

我希望你明白了。

谢谢

有趣的问题,所以我将数据集插入到我写的模型构建器框架中。 该框架有两个回调:EarlyStopping回调为'loss',Tensorboard用于分析。 我从模型编译中删除了'metric'属性 - 不必要,反正应该是'mae'。

@ mathnoob123模型书写和学习率(lr)= 0.01在2968个时期有一个损失= 1.2623e-06

但是,用Adam替换RMSprop优化器的相同模型最准确,在2387个时期中损失= 1.22e-11。

我找到的最好的折衷方案是使用lr = 0.01的@ mathnoob123模型,在230个时期内导致损失= 1.5052e-4。 这比@ Kunam的模型更好,在第一个密集层中有20个节点,lr = 0.001:在226个时期内损失= 3.1824e-4。

现在我要看看随机化标签数据集(y),看看会发生什么......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM