Keras入门教程 2.线性模型的优化

13 篇文章 0 订阅
7 篇文章 0 订阅

Keras入门教程


线性模型的优化

前言

上一节,我们讲解了,keras 的实现过程,本节在原来的基础上添加相应层,增加优化器,以达到优化模型的目的。

正文

仍以上一节的数据集作为分析,以下部分均与上一节一致

### 加载包
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.metrics import  mean_squared_error
%matplotlib inline
### 数据导入

data=pd.DataFrame(columns=['Education','Income'],data=[[10.00000,26.65884],
[10.40134,27.30644],
[10.84281,22.13241],
[11.24415,21.16984],
[11.64548,15.19263],
[12.08696,26.39895],
[12.48829,17.43531],
[12.88963,25.50789],
[13.29097,36.88459],
[13.73244,39.66611],
[14.13378,34.39628],
[14.53512,41.49799],
[14.97659,44.98157],
[15.37793,47.03960],
[15.77926,48.25258],
[16.22074,57.03425],
[16.62207,51.49092],
[17.02341,61.33662],
[17.46488,57.58199],
[17.86622,68.55371],
[18.26756,64.31093],
[18.70903,68.95901],
[19.11037,74.61464],
[19.51171,71.86720],
[19.91304,76.09814],
[20.35452,75.77522],
[20.75585,72.48606],
[21.15719,77.35502],
[21.59866,72.11879],
[22.00000,80.26057]])

X=data.Education.values.reshape(-1,1)
y=data.Income

keras 建模

加载包

from keras.models import Sequential
from keras.layers import Densef
from tensorflow.keras.optimizers import RMSprop

这里需要特别说的是from tensorflow.keras.optimizers import RMSprop 在很多博客或文章是from keras.optimizers import RMSprop 运行报错,是因为我们这里是采用 tensorflow 作为后端,而非单独安装 keras 引起的,特此说明。

为了方便说明,以下代码将上节的模型名称修改为model


model = Sequential()
model.add(Dense(64, kernel_initializer = 'normal', activation = 'relu',input_shape = (1,)))  # 增加了激活函数 relu 
model.add(Dense(128, activation = 'relu')) # 增加了层
model.add(Dense(1))

查看模型

model_kr.summary()

Model: “sequential_3”


Layer (type) Output Shape Param #

dense_8 (Dense) (None, 64) 128

dense_9 (Dense) (None, 64) 4160

dense_10 (Dense) (None, 1) 65

=================================================================
Total params: 4,353
Trainable params: 4,353
Non-trainable params: 0

选择损失函数和优化方法

# model_kr.compile(optimizer='adam' , loss='mse') 原来的
model.compile(
   loss = 'mse',  # 损失函数
   optimizer = RMSprop(), # 优化器
   metrics = ['mean_absolute_error'] # 衡量指标
)

进行拟合训练

history= model.fit(X , y , epochs=200 , verbose=1)

进行200次的结果如下

Epoch 1/200
1/1 [==============================] - 2s 2s/step - loss: 112.1887 - mean_absolute_error: 8.9837
Epoch 2/200
1/1 [==============================] - 0s 11ms/step - loss: 121.1905 - mean_absolute_error: 8.8568
Epoch 3/200
1/1 [==============================] - 0s 17ms/step - loss: 111.5530 - mean_absolute_error: 8.9720
Epoch 4/200
1/1 [==============================] - 0s 14ms/step - loss: 111.3915 - mean_absolute_error: 8.9431
Epoch 5/200
1/1 [==============================] - 0s 14ms/step - loss: 111.2669 - mean_absolute_error: 8.9382
Epoch 6/200
1/1 [==============================] - 0s 15ms/step - loss: 111.1435 - mean_absolute_error: 8.9319
Epoch 7/200
1/1 [==============================] - 0s 12ms/step - loss: 111.0212 - mean_absolute_error: 8.9259
Epoch 8/200
1/1 [==============================] - 0s 11ms/step - loss: 110.8999 - mean_absolute_error: 8.9200
Epoch 9/200
1/1 [==============================] - 0s 12ms/step - loss: 110.7795 - mean_absolute_error: 8.9140
Epoch 10/200
1/1 [==============================] - 0s 11ms/step - loss: 110.6598 - mean_absolute_error: 8.9082
Epoch 11/200
1/1 [==============================] - 0s 17ms/step - loss: 110.5408 - mean_absolute_error: 8.9023
Epoch 12/200
1/1 [==============================] - 0s 12ms/step - loss: 110.4224 - mean_absolute_error: 8.8965
Epoch 13/200
1/1 [==============================] - 0s 11ms/step - loss: 110.3046 - mean_absolute_error: 8.8908
...
Epoch 199/200
1/1 [==============================] - 0s 8ms/step - loss: 89.9502 - mean_absolute_error: 7.7671
Epoch 200/200
1/1 [==============================] - 0s 7ms/step - loss: 89.8372 - mean_absolute_error: 7.8902
yks_pred=model_kr.predict(X) #  model_kr  此为上一节模型 (需要用到上节模型)
yks_pred1=model.predict(X)

看看回归曲线

plt.scatter(X,y)
plt.plot(X,yks_pred,"b",label='orgial')
plt.plot(X,yks_pred1,"r",label='addLayer')
plt.legend()

在这里插入图片描述

效果如此显,还有更多的提升空间

再次增加epoch次数

再次训练可以再调用以下语句

history= model.fit(X , y , epochs=200 , verbose=1)

再多次运行fit结果如下:

特别提醒初学者小伙伴,千万别一次性将 epochs值调到很大的值,否则你的电脑死在那里了(原因是吃光你的内存)。你可以多次的调用上述代码,查看学习效果。
在这里插入图片描述

小节

现在有一个比较令人满意的结果了,随着练习次数的增加,模型提升的效果会越越小,也就是说模型不可能是无休止的提升,到达一定程度就不可能再提升了。这是由于数据集本身决定的,并非模型决定的。理论上讲,只要数据量大,深度学习一定能达到数据集本身理想上限。

理论部分

讲了这么多,应该对深度学习有些感性的认识,现在开始讲一讲最最简单的理解原理部。
我也不想把问题讲得太复杂,先看一下下面这张图,神经元模型(引自 周志华《机器学习》)
在这里插入图片描述
转化为下图的模型,这样的话,大伙比较真观了解其结构。
在这里插入图片描述
由于上图只是一个神经元结构,在真正的深度学习体系中,可能用到好多个神经元,分成很多层,始下图,黄色部分为输入层,蓝色部分为中间层,又称隐藏层,橙色部分为输出层,有时输出层也有可能是多变量的。

多层神经元

总结

真正的深度学习模型,需要不同的层,不同的损失函数,激活函数等,才现达到最优的效果。
很上例,增加了层,模型有明显的提升效果。
下一节,将以此模型,在 波士顿 房价数据集上做进一步探讨,以达到学习的目的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值