Keras入门教程

  • 1.线性回归建模(快速入门)
  • 2.线性模型的优化
  • 3.波士顿房价回归 (MPL)
  • 4.卷积神经网络(CNN)
  • 5.使用LSTM RNN 进行时间序列预测
  • 6.Keras 预训练模型应用

线性回归建模(快速入门)

前言

Keras 是何物?Keras 是一个用 Python 编写的高级神经网络 API。其是以TesorFlow作为后端运行的。我们安装深度学习框架tensorflow时自动安装的,并非单独安装,作为tesorflow的API存在,使用起来非常方便。
目前网上有大量的 深度学习 关于tesorflow 1.X版本的教程,而2.0以上的版本教程,都是降到1.0版本再运行。因此,本文以tesorflow ‘2.8.0’ 版本进行讲解。
本文先用sklearn 线性回归模型,引入深入学习的keras进行建模。
为了更好的快速入门深度学习的keras,本文不讨论数学原理,不讨论模型的原理,只从程序(代码)实现方面对深度学习有个感性的认识。看完这系列文章,建议你对机器学习中深度学习有一个更深的理解。

加载包

import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import  mean_squared_error
%matplotlib inline

数据导入

income数据集为例,为了方便小伙伴,不用找数据集,由于数据比较小,所以直接写入代码。

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]])
# 可以查看data内容
data

数据可视化

plt.scatter(data.Education,data.Income);

分离数据

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

Sklearn 建模

model_lr=LinearRegression()
model_lr.fit(X,y)

查看线性相关属性

print( "斜率:", model_lr.coef_[0] ," 截距:",model_lr.intercept_)
print("R^2=",model_lr.score(X,y))
MSE=mean_squared_error(y,y_pred)
print("MSE:",MSE)

斜率: 5.599483656931067 截距: -39.44626851089707
R^2= 0.9309626013230593
MSE: 29.828741902209323

进行预测

y_pred=model_lr.predict(X)

画回归曲线

plt.scatter(X,y)
plt.plot(X,y_pred,"r")

keras 建模

from keras.models import Sequential
from keras.layers import Densemodel_kr = Sequential()
model_kr.add(Dense(1,input_shape=(1,),activation='linear'))

查看模型

model_kr.summary()

Model: “sequential”


Layer (type) Output Shape Param #

dense (Dense) (None, 1) 2

=================================================================
Total params: 2
Trainable params: 2
Non-trainable params: 0


选择损失函数和优化方法

model_kr.compile(optimizer='adam' , loss='mse')
model_kr.fit(X , y , epochs=200 , verbose=1)

进行200次的结果如下

Output exceeds the size limit. Open the full output data in a text editor
Epoch 1/200
1/1 [==============================] - 0s 394ms/step - loss: 835.3273
Epoch 2/200
1/1 [==============================] - 0s 6ms/step - loss: 834.3919
Epoch 3/200
1/1 [==============================] - 0s 9ms/step - loss: 833.4571
Epoch 4/200
1/1 [==============================] - 0s 5ms/step - loss: 832.5229
Epoch 5/200
1/1 [==============================] - 0s 10ms/step - loss: 831.5893
Epoch 6/200
1/1 [==============================] - 0s 9ms/step - loss: 830.6564
Epoch 7/200
1/1 [==============================] - 0s 14ms/step - loss: 829.7242
Epoch 8/200
1/1 [==============================] - 0s 4ms/step - loss: 828.7927
Epoch 9/200
1/1 [==============================] - 0s 7ms/step - loss: 827.8617
Epoch 10/200
1/1 [==============================] - 0s 8ms/step - loss: 826.9315
Epoch 11/200
1/1 [==============================] - 0s 7ms/step - loss: 826.0019
Epoch 12/200
1/1 [==============================] - 0s 7ms/step - loss: 825.0732
Epoch 13/200
...
Epoch 199/200
1/1 [==============================] - 0s 6ms/step - loss: 666.1816
Epoch 200/200
1/1 [==============================] - 0s 9ms/step - loss: 665.4104

查看线性相关属性

W , b = model_kr.layers[0].get_weights()
print('线性回归的斜率和截距: %.2f, b: %.2f' % (W, b))

线性回归的斜率和截距: 1.82, b: 0.19

yks_pred=model_kr.predict(X)
MSE=model_kr.evaluate(y,yks_pred)
print("MSE1:",MSE)

1/1 [==============================] - 0s 99ms/step - loss: 4833.7842
MSE1: 4833.7841796875

惊奇的发现与上面做的结果相差很大

看看回归曲线

plt.scatter(X,y)
plt.plot(X,yks_pred,"b",label='200 epochs')
plt.legend()

画一下MSE曲线

plt.plot(history.epoch,history.history.get('loss'),label="loss")
plt.xlabel("epoch")
plt.ylabel("MSE")
plt.legend()

200 次远远没有达到理想结果

增加epoch次数

再多次运行fit结果如下:

再次提醒小伙伴,千万别把epoch调得很大。

结论

有小伙伴说,这个结果太令人伤心了,远没有原始线性回归好。
但是,但是,你有没有发现这里根本没有“深度”,只加了一层,根本没有发挥深度学习的优势。因此在实际的模型中,会加入多层(深度),进行建模。
下一节,在此基础上,增加层和激活函数,优化此模型,进入下一节。

keras入门教程 1.线性回归建模(快速入门)相关推荐

  1. PR软件入门教程 Adobe Premiere Pro 快速入门指南

    原文(包含图片)链接:https://www.prjianji.com/1.html 了解如何开始使用面向电影制作人.电视节目制作人.新闻记者.学生和视频制作人员的非线性编辑软件 Premiere P ...

  2. python快速入门教程-终于理解python快速入门教程

    跟Java语言一样,python语言也有类的概念,直接使用class关键字定义python类.在python类,定义类的方法.然后直接使用类的初始化调用自身,获取相应的属性.以下是小编为你整理的pyt ...

  3. sklearn快速入门教程 -- 机器学习工具的快速入门指引

    本系列教程旨在提供一个直观.快速的入门指引,从应用的角度进行阐述,提供框架性的理解方式. 全程共5篇教程.若抛开下载和安装的过程,应在2小时左右全部阅读和动手测试完成. (一)准备工作 (二)线性回归 ...

  4. 史上最全Python快速入门教程,让你快速入门python学好python

    Python是面向对象,高级语言,解释,动态和多用途编程语言.Python易于学习,而且功能强大,功能多样的脚本语言使其对应用程序开发具有吸引力. Python的语法和动态类型具有其解释性质,使其成为 ...

  5. python画图零基础入门教程_Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件...

    前面的教程中,我们已经可以让小海龟绘制出各种图形了.但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的.这一节中,咪博士将教大家如何让海龟响应用户的输入. 1 ...

  6. python入门教程jupyter_python数据分析师快速入门1Jupyter文档笔记工具

    简介 Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,方程式,可视化和说明文本的文档. Jupyter Notebook类似于画布或环境,它允许您使用编程语言来执行 ...

  7. STL教程:C++ STL快速入门

    目录 1.STL引言 2.STL是什么(STL简介) 3.STL历史 4.STL组件 5.STL基本结构 6.STL 使用方法 7.STL目录 网址:STL教程:C++ STL快速入门(非常详细) 第 ...

  8. pkpm快速入门教程_PKPM结构软件从入门到精通高清版

    摘要 本书在众多PKPM结构软件中抓住PMCAD建立模型.SATWE分析计算.JCCAD基础设计这三个关键软件作为主线,从建模操作技巧入手,从规范规定.软件实现.工程应用相结合的角度,详细阐述SATW ...

  9. python快速编程入门教程-终于懂得python快速编程入门教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

最新文章

  1. Linux 的启动流程
  2. 定时覆盖库_高考直通车公众号 联考题库大全
  3. C语言的int, float,double相互转化 (从本质上理解可能的问题)
  4. Java配置----JDK开发环境搭建及环境变量配置
  5. html暂停计时器,JS实现可暂停秒表计时器效果的方法
  6. 【AI视野·今日NLP 自然语言处理论文速览 第十一期】Mon, 21 Jun 2021
  7. ci php做多图上传,CodeIgniter快速实现图片上传
  8. 大话css预编译处理(二)安装使用篇
  9. 女生,到底能不能当程序员?
  10. java for 循环中if判断只进入第一个_「每天三分钟跟我学Java」之条件语句和循环结构...
  11. #centos7 创建内网yum源 OpenStack源部署
  12. Hive依据key获取value
  13. wordpress制作主题之菜单
  14. 夜谈TCP/IP的起源和胜利
  15. 推荐下载使用:COMODO Internet Security V5.0.157302.1066 多国语言版(含:简体中文)
  16. 理解COM的线程套件(转)
  17. 2022年长沙初级会计考试模拟题及答案
  18. 小米手机二季度国内业绩回稳微增,雷军组织架构调整成效初显
  19. ceisum添加风场插件
  20. 苏州新导室内定位方案之WIFI RTLS室内定位解决方案

热门文章

  1. 【错误解决】SpringBoot邮件服务的一些错误及其解决方案
  2. 在windows中下载、安装和使用MongoDB
  3. 171029 windows10 桌面美化
  4. MySQL最重要的日志-binlog详解
  5. java程序步骤_java编写程序的步骤是什么?java编写程序步骤实例讲解
  6. 关于阻止PROE联网的一些想法!
  7. C语言语句篇-------赋值语句
  8. dimission letter exmaple
  9. JavaSE - 14 枚举 + 注解
  10. IDEA的下载及安装