园子里头看到了一些最基础的 keras 入门指导, 用一层网络,可以训练一个简单的线性回归模型。

自己学习了一下,按照教程走下来,结果不尽如人意,下面是具体的过程。

第一步: 生成随机数据,绘出散点图

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt # 生产随机数据
np.random.seed(123) # 指定种子,使得每次生成的随机数保持一致
x = np.linspace(-1,1,200) # 生成一个长度为 200 的 list,数值大小在 [-1,1] 之间
np.random.shuffle(x) #随机排列传入 list
y = 0.5 * x + 2 + np.random.normal(0, 0.05, (200,)) # 添加正态分布的偏差值
#测试数据 与 训练数据
x_train, y_train = x[:160], y[:160]
x_test, y_test = x[160:], y[160:0]
#绘出散点图: plt.scatter(x,y) plt.show()

散点图如下:

二、创建网络模型

# 创建模型
model = Sequential()
# 添加全连接层,输入维度 1, 输出维度 1
model.add(Dense(output_dim = 1, input_dim= 1))

三、模型编译

# 模型编译
# 损失函数:二次方的误差, 优化器:随机梯度随机梯度下降,stochastic gradient descent
model.compile(loss='mse', optimizer='sgd')

四、模型训练

# 训练模型,就跑一次

print('start train model:')
for step in range(300):
cost = model.train_on_batch(x_train, y_train)
if step % 50 == 0:
print('cost:', cost)

五、测试模型

#看测试数据损失又多少
print('start test:')
cost = model.evaluate(x_test, y_test, batch_size=40)
print('the loss is:', cost) # 查看函数参数
w,b = model.layers[0].get_weights()
print('weights =',w, ' biases = ', b) # 用模型预测测试值
y_pred = model.predict(x_test) # 画出测试散点图
plt.scatter(x_test, y_test)
# 画出回归线
plt.plot(x_test, y_pred)
plt.show()

输出结果:

此次训练所得模型:

从图中可以看出,模型没有很好的满足我们的需求,进行调整,看下结果:

减小batch_size, 增加训练次数。

batch_size: 单一批训练样本数量

epochs : 将全部样本训练都跑一遍为 1 个 epoch,  10 个 epochs 就是全部样本都训练 10 次

# 调整模型训练过程
model.fit(x_train, y_train, batch_size=5,epochs=60)

最终所得模型图为:

曲线为:

keras 学习-线性回归的更多相关文章

  1. 用scikit-learn和pandas学习线性回归

    对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了. 1. 获取数据,定义问题 没有数据,当然没法研究机器学习 ...

  2. (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

    特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

  3. Keras 学习之旅(一)

    软件环境(Windows): Visual Studio Anaconda CUDA MinGW-w64 conda install -c anaconda mingw libpython CNTK ...

  4. 用 scikit-learn 和 pandas 学习线性回归

      用 scikit-learn 和 pandas 学习线性回归¶ from https://www.cnblogs.com/pinard/p/6016029.html 就算是简单的算法,也需要跑通整 ...

  5. 官网实例详解-目录和实例简介-keras学习笔记四

    官网实例详解-目录和实例简介-keras学习笔记四 2018-06-11 10:36:18 wyx100 阅读数 4193更多 分类专栏: 人工智能 python 深度学习 keras   版权声明: ...

  6. keras学习笔记-bili莫烦

    一.keras的backend设置 有两种方式: 1.修改JSON配置文件 修改~/.keras/keras.json文件内容为: { "iamge_dim_ordering":& ...

  7. 【干货】Keras学习资源汇总

    目录: Keras简介 Keras学习手册 Keras学习视频 Keras代码案例 Keras&NLP Keras&CV Keras项目 一.Keras简介 Keras是Python中 ...

  8. keras学习简单线性回归【1】

    转自:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-1-regressor/ 总的代码的过程就是: 1.导入模块+创建 ...

  9. (一) Keras 一元线性回归

    视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 环境为 an ...

随机推荐

  1. Pownerdesigner画用例图_类图_时序图

    1. 问题描述 软件过程中,设计阶段有几个常用的工具:Rational Rose.Visio.Pownerdesigner,一般用Rose用例图/类图/时序图,Visio画流程图,Pownerdesi ...

  2. NetCore 依赖注入之服务之间的依赖关系

    简单介绍,直接官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspn ...

  3. ‎Cocos2d-x 3.x 学习笔记(三):Scheduler Timer 调度与定时

    ‎1. 概述 Cocos2d-x 的 Scheduler 离不开 Timer.Timer 类是定时器,用来规定一个回调函数应该在何时被触发.Timer 封装了已运行时间.重复次数.已执行次数.延迟秒数 ...

  4. 使用jqueryUI实现自由调整表格列宽

    今天项目中需要插入表格,用Excel表格调整列宽时,想怎么拖就怎么拖,于是乎就让插入的表格也这么让人舒服.网上查找许久,没找到好用的方案.最后发现jQuery UI中的resizable()方法可以实 ...

  5. C#3.0新增功能09 LINQ 标准查询运算符 02 查询表达式语法

    连载目录    [已更新最新开发文章,点击查看详细] 某些使用更频繁的标准查询运算符具有专用的 C# 语言关键字语法,使用这些语法可以在查询表达式中调用这些运算符. 查询表达式是比基于方法的等效项更具 ...

  6. docker实战(二)之redis的使用

    docker中安装redis的步骤比较简单,Linux系统版本centos7.4 1.官方仓库https://hub.docker.com/r/library/redis/tags/中查看redis的 ...

  7. 快速掌握mongoDB(五)——读写分离的副本集实现和Sharing介绍

    1 mongoDB副本集 1 副本集简介 前边我们介绍都是单机MongoDB的使用,在实际开发中很少会用单机MongoDB,因为使用单机会有数据丢失的风险,同时单台服务器无法做到高可用性(即当服务器宕 ...

  8. Linux内容点(部分)

    文件属性 -w      文件或目录,对目前(有效的)用户或组来说是可写的       -x       文件或目录,对目前(有效的)用户或组来说是可执行的       -o       文件或目录, ...

  9. .net持续集成单元测试篇之单元测试简介以及在visual studio中配置Nunit使用环境

    系列目录 单元测试及测试驱动开发简介 什么是单元测试 单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验.单元测试几乎都是用单元测试框架编写的.单 ...

  10. Codeforces Round #192 (Div. 2) (330B) B.Road Construction

    题意: 要在N个城市之间修建道路,使得任意两个城市都可以到达,而且不超过两条路,还有,有些城市之间是不能修建道路的. 思路: 要将N个城市全部相连,刚开始以为是最小生成树的问题,其实就是一道简单的题目 ...