[英]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.01
或0.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 = 17
#使用模型
regr = baseline_model()
regr.fit(data,y,epochs =200, verbose = 0)
plot(data, regr.predict(data), 'bo', data,y, 'k-')
第一个num_neurons = 17的情节很合适。
但即使我们可以探索更多。
点击下面的链接查看图表
你可以看到,因为我们增加了神经元的数量
我们的模型变得更加智能化。 最合适。
我希望你明白了。
谢谢
有趣的问题,所以我将数据集插入到我写的模型构建器框架中。 该框架有两个回调: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.