版权声明:本文为博主原创文章,未经博主允许不得转载。    https://blog.csdn.net/baimafujinji/article/details/78384792
现在人工智能,特别是深度学习可谓风光无限,加之各种框架神器层出不穷也令深度学习不再是什么空中楼阁。由于工具化的趋势越来越明显,现在要自行搭建一个深度神经网络已经变得越来越容易。你可能听说过的框架有TensorFlow、Theano、Torch、Caffe、MXNet等等,今天我们就要来介绍构建神经网络最为容易的一个框架——Keras。之所以说Keras是当前构建神经网络最为容易的框架,就是因为相比于Theano和TensorFlow,你会发现使用Keras,你所需要自行编写的代码是最少的。真是不得不令人感叹:没有对比,就没有伤害。

总的来说,使用Keras构建神经网络的基本工作流程主要可以分为4个部分。而且这个用法和思路我个人感觉,很像是在使用Scikit-learn中的机器学习方法

Model definition → Model compilation → Training → Evaluation and Prediction

下面我们就通过一个非常简单的例子来一步一步地演示如果在Keras中构建一个简单的用于回归的神经网络。这个例子基本上跟文章【TensorFlow简明入门宝典 】中最后给出的那个求解线性回归的例子要做的事情是一致的。

首先,我们人为地造一组由 y = 0.5x + 2 加上一些噪声而生成的数据,数据量一共有200个,其中前160作为train set,后40作为test set。

import numpy as np
import matplotlib.pyplot as plt
 
X = np.linspace(-2, 6, 200)
np.random.shuffle(X)
Y = 0.5 * X + 2 + 0.15 * np.random.randn(200,) 
 
# plot data
plt.scatter(X, Y)
plt.show()
 
X_train, Y_train = X[:160], Y[:160]     # train first 160 data points
X_test, Y_test = X[160:], Y[160:]       # test remaining 40 data points
可以用matplotlib中提供的方法来绘制一下数据的分布情况:

接下来,我们要执行构建模型的第一步,即Model Definition。这一步的作用就是定义NN中的层次结构。为此要引入两个重要的类,Sequential和Dense。
from keras.models import Sequential
from keras.layers import Dense
其中Sequential是Keras中构建NN最常用的一种Model(也是最简单的一种),一个Sequential的Model 就是 a linear stack of layers,也就是说,你只要按顺序(使用add()方法)一层一层地顺序地添加神经网络层就可以了。而Dense表示全连接层,此时它需要接收两个参数,即输入的节点数及输出的节点数,特别地,在一层一层地构建NN时,Keras还可以根据上一层的输出来推断下一次的输入,所以有些全连接层参数可以省略。

在这个简单的例子中,我们的全连接层只有一层,而且输入的节点数和输出的节点数都为1,所以有:

model = Sequential()
model.add(Dense(output_dim = 1, input_dim = 1))

接下来执行构建模型的第一步,即Model compilation。这一步是要指定模型中的loss function(在这例子中使用的是最小二乘误差‘mse’),优化器以及metrics等内容。优化器你可以使用系统提供的默认优化器,例如你可以像下面这样用'sgd'表示随机梯度下降。

model.compile(loss='mse', optimizer='sgd')
你可以可以像下面这样自定义优化器中的参数:
from keras.optimizers import SGD
model.compile(loss='mse', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))

然后来执行Training的部分。在这一步你可以有两个选择。第一种直接使用fit,这个简直和Scikit-learn中的感觉像极了!你只要在fit方法的参数列表中指定训练数据(特征向量和label)、训练的次数和用来做梯度下降的batch size就可以了。

model.fit(x_train, y_train, epochs=100, batch_size=64)
另外一个选择是你也可以采用下面的语法来feed batches to your model manually:

model.train_on_batch(x_batch, y_batch)
例如在本例中你可以把训练部分写成下面这种形式,其中每20步,我们会输出一次cost。
print('Training -----------')
for step in range(100):
    cost = model.train_on_batch(X_train, Y_train)
    if step % 20 == 0:
        print('train cost: ', cost)
我的程序输出结果如下(注意由于存在各种随机性,每次的输出未必完全一致):

Training -----------
train cost:  0.0290748
train cost:  0.0276375
train cost:  0.026696
train cost:  0.0260792
train cost:  0.0256752

最后,终于可以进入Evaluation and Prediction的部分了。对于之前预留的测试集来说,你可以使用:

cost = model.evaluate(X_test, Y_test, batch_size=40)
具体来说针对我们现在这个例子则有:
print('\nTesting ------------')
loss_and_metrics = model.evaluate(X_test, Y_test, batch_size=40)
print('test cost:', cost)
W, b = model.layers[0].get_weights()
print('Weights=', W, '\nbiases=', b)
我的程序输出结果如下:
Testing ------------
40/40 [==============================] - 0s
test cost: 0.0254213
Weights= [[ 0.50829154]] 
biases= [ 1.9707619]

对一些新的数据来进行预测,那么你可以使用predict,而且它的使用也与Scikit-learn中的用法及其相似,最终我们预测test set中每个的点,并绘制预测的模型。

Y_pred = model.predict(X_test)
plt.scatter(X_test, Y_test)
plt.plot(X_test, Y_pred)
plt.show()
输出之图形如下:


最后,我个人认为【1】是入门Keras的一个非常好的Talk。另外,本文的jupyter notebook文件,你可以从下面的链接【3】中获取到。

参考文献:

【1】https://www.youtube.com/watch?v=OUMDUq5OJLg (需要自备梯子)

【2】https://keras.io/#getting-started-30-seconds-to-keras

【3】https://pan.baidu.com/s/1jI8CgHw

(本文完)
--------------------- 
作者:白马负金羁 
来源:CSDN 
原文:https://blog.csdn.net/baimafujinji/article/details/78384792 
版权声明:本文为博主原创文章,转载请附上博文链接!

Keras实例教程(1)相关推荐

  1. Keras实例教程(3)

    我们在之前的Keras教程中介绍了用Sequential model的形式来搭建神经网络模型的基本方法.然而,Keras中还提供了另外一种基于函数式编程思想的神经网络组建方法,我们称其为functio ...

  2. Keras实例教程(4)之迁移学习

    迁移学习(Transfer Learning)是机器学习中的一个重要研究话题,也是在实践中具有重要价值的一类技术.Transfer learning focuses on storing knowle ...

  3. Keras TensorFlow教程:如何从零开发一个复杂深度学习模型

    Keras 是提供一些高可用的 Python API ,能帮助你快速的构建和训练自己的深度学习模型,它的后端是 TensorFlow 或者 Theano .本文假设你已经熟悉了 TensorFlow ...

  4. Keras LSTM教程

    **本文更完整的内容请参考极客教程的深度学习专栏:https://geek-docs.com/deep-learning/rnn/keras-lstm-tutorial.html,欢迎提出您的宝贵意见 ...

  5. Keras TensorFlow教程:使用自己的数据集进行训练

    大多数Keras教程都尝试使用图像分类数据集(如MNIST(手写识别)或基本对象CIFAR-10(基本对象识别))来开启Keras库的基础知识学习. 这篇文章将对Keras入门教程进行不同的尝试.使用 ...

  6. matlab实例 pdf,matlab65实例教程(含语句注释).pdf

    matlab65实例教程(含语句注释).pdf 1 2. 基础准备及入门基础准备及入门 2.1 MATLAB 5.x 版对外部系统的要求版对外部系统的要求 2.2 MATLAB 的安装的安装 2.3 ...

  7. Silverlight实例教程 - Validation数据验证开篇

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  8. 改变窗口背景_Illustrator实例教程:只需三步,利用画笔描边做出炫酷的背景

    今天我们给大家带来一篇Illustrator实例教程,教大家只用三步,就能做出非常炫酷的背景效果.当然,这个方法也是我在平时的工作中发现和总结的,希望能够对你有所帮助. 我们先来看一下最终的效果吧! ...

  9. Silverlight实例教程 - Out of Browser开篇

    众所周知,学习一门IT技术,最关键的是实践,无论是软件开发还是网络调试,只要在真实环境下勤于动手和思考,很快就能掌握一门技术,Silverlight也不例外.为了帮助更多朋友快速学习掌握Silverl ...

最新文章

  1. 华为mate30会用鸿蒙嘛,华为Mate30安卓系统再遭限制,鸿蒙系统真的要应战了
  2. 清华优秀毕业生放弃留学上热搜!计算机系前10名中9人留校深造
  3. 巧用Windows server 2008密码重置盘
  4. Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
  5. 今日代码(200714)--主客观求指标权重及求城市得分
  6. ASP.NET Core 双因素验证2FA 实战经验分享
  7. es6 Object.assign()方法
  8. java添加锁_java – 如何在这种情况下添加锁?
  9. APPLE笔记本电脑软件测试,Apple Mac 实验室
  10. Python之数据分析(星期均值、星期汇总、Numpy的take与where方法、apply_along_axis函数)
  11. 1 Oracle数据库环境搭建
  12. 命令行怎么运行go程序_Go教程32: 编译打包运行程序
  13. 建筑基坑工程设计计算与施工(一)
  14. < 数据结构 > 树与二叉树
  15. 【计算机组成原理】中央处理器总结——基本知识要点汇总
  16. APICloud教程
  17. 从配置 Kivy、Buildozer 到 Android app 运行
  18. 蚂蚁金服区块链+公益又有新动作,助力相互保险爱心救助账户
  19. LeetCode3:合并两个有序数组 给你两个有序数数组,nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组.
  20. 西班牙语dele等级_DELE——西班牙语水平考试

热门文章

  1. Windows XP SP2 (Simplified Chinese MS08_067漏洞复现)
  2. guanyongyu2
  3. OSSH免费版华为Portal
  4. 2022年,Lazada开店要交多少钱
  5. 2020第十一届蓝桥杯7月份省赛真题(JavaB组题解)
  6. 01-Docker-介绍与安装(CentOS)
  7. Word中序号后面有空格怎么删除?
  8. 三星GT-P1000完美刷机教程,附ROM刷机包下载
  9. OpenCV开发笔记(六十五):红胖子8分钟带你深入了解ORB特征点(图文并茂+浅显易懂+程序源码)
  10. 树莓派能做什么呢?如何使用树莓派