keras的学习笔记

简介

Keras是一个高层神经网络API,Keras由纯Python编写而成并基于Tensorflow、Theano和CNTK后端。Keras 支持快速实验,能够把你的idea迅速转换为结果,适用场景:

  • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
  • 支持CNN和RNN,或二者的结合
  • 无缝CPU和GPU切换

Keras适用的Python版本是:Python 2.7-3.6

keras的使用

Keras的核心数据结构是“模型”,模型是一种组织网络层的方式。Keras中主要的模型是Sequential模型,Sequential是一系列网络层按顺序构成的栈。

Sequential模型如下:

1
2
3
4
5
6
7
8
9
from keras.models import Sequential  
from keras.layers import Dense, Activation

model = Sequential()

model.add(Dense(units=64, input_dim=100))
model.add(Activation("relu"))
model.add(Dense(units=10))
model.add(Activation("softmax"))

在Keras 0.x中,模型其实有两种,一种叫Sequential,称为序贯模型,也就是单输入单输出,一条路通到底,层与层之间只有相邻关系,跨层连接统统没有。这种模型编译速度快,操作上也比较简单。第二种模型称为Graph,即图模型,这个模型支持多输入多输出,层与层之间想怎么连怎么连,但是编译速度慢。在Keras1和Keras2中,图模型被移除,而增加了了“functional model API”,这个东西,更加强调了Sequential是特殊情况这一点。一般的模型就称为Model,然后如果你要用简单的Sequential,OK,那还有一个快捷方式Sequential。

另外还可以通过将一个层列表传递到构建器的方式创建Sequential:

1
2
3
4
5
6
model = Sequential([  
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])

模型需要知道预期的输入形状,因此Sequential模型的第一层(只需第一层,因为后面的层能自动计算形状)需要收到输入形状的信息。有几种方式可以实现:

*将input_shape申明传入第一层。这是一个形状元组(整数或None,None意味可能是任意正整数),这里不包含批次维度。

*一些2D层如Dense,通过申明input_dim支持指明输入形状,一些3D的时序层支持申明input_dim和input_length。

*如果需要指明固定的输入批次规模(对状态循环网络有用),可以将batch_size申明传入一个层。如果传入batch_size=32和input_shape(6, 8)至一个层,它将期望所有输入批次形状为(32,6,8)。

完成模型的搭建后,我们需要使用.compile()方法来编译模型:

1
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

编译,训练模型前应设置学习进程,通过compile方法实现,它接受3个申明:

  • 优化器,可以是现成的优化器如rmsprop或者adagrad,或者是自定义Optimizer类的实例。
  • 损失函数,模型要最小化的对象,可以是现成的如categorical_crossentropy或者mse,或者自定义。
  • 度量列表,对于分类问题我们使用metrics=[‘accuracy’],可以是其它现成度量或自定义。
1
2
3
# 自定义模型的相关参数
from keras.optimizers import SGD
model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))

lr表示学习速率,momentum表示动量项,decay是学习速率的衰减系数(每个epoch衰减一次),Nesterov的值是False或者True,表示使不使用Nesterov momentum。

完成模型编译后,我们在训练数据上按batch进行一定次数的迭代来训练网络

1
model.fit(x_train, y_train, epochs=5, batch_size=32)

当然,我们也可以手动将一个个batch的数据送入网络中训练,这时候需要使用:

1
model.train_on_batch(x_batch, y_batch)

随后,我们可以使用一行代码对我们的模型进行评估,看看模型的指标是否满足我们的要求:

1
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

或者,我们可以使用我们的模型,对新的数据进行预测:

1
classes = model.predict(x_test, batch_size=128)

Keras提供了三种后端引擎Theano/Tensorflow/CNTK,并将其函数统一封装,使得用户可以以同一个接口调用不同后端引擎的函数。

  • Theano是一个开源的符号主义张量操作框架,由蒙特利尔大学LISA/MILA实验室开发。
  • TensorFlow是一个符号主义的张量操作框架,由Google开发。
  • CNTK是一个由微软开发的商业级工具包。

backend字段的值改写为你需要使用的后端:theanotensorflow或者CNTK,即可完成后端的切换。我们也可以通过定义环境变量KERAS_BACKEND来覆盖上面配置文件中定义的后端:

1
2
KERAS_BACKEND=tensorflow python -c "from keras import backend;"
Using TensorFlow backend

张量可以看作是向量、矩阵的自然推广,我们用张量来表示广泛的数据类型。

参考:

  1. keras —— 常用模型构建
  2. 快速开始:30s上手Keras
  3. DeepLearning tutorial(6)易用的深度学习框架Keras简介——具有构建CNN的代码
  4. 利用keras搭建神经卷积网络(CNN)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

他们曾是别人眼中的笑话,最后却都成了神话

有一个瘦小的小伙去肯德基应聘,他落选了。后来他跟大老板们讲了讲什么叫电子商务,大老板们得出一个结论,这是个骗子,后来他创造了阿里巴巴商业帝国,这个人叫马云。有人对一个年轻人说,你这么丑,…

房贷已经审批通过,放款的时候银行却要求涨利率,是否合法?

近日有个网友说他自己在1月份申请的房贷,2月份的时候银行按揭贷款已经审批通过,但是在4月份放款的时候,银行却突然要求上浮10%的利率,否则就得继续等。对于这个问题,相信不少网友都曾经遇到过,那银行这种临…

PHP设计模式

引言PHP介绍PHP是用C语言开发出来的一种语言,C语言是真正意义上跨平台的语言,这也注定PHP是跨平台的,PHP是可运行在Windows Server或Linux操作系统的服务器上的语言,它和Java以及C#一样,代码存储并运行在服务器端&…

信用卡消费退款,商家让客户付手续费,合理吗?

正常来说,商家要求客户支付手续费是不合理的,但有一些特殊情况收取手续费是合理的。我们先说不合理的地方如果你是通过线下刷卡消费,退款时商家要求你支付手续费是不合理的。因为你通过线下刷卡消费,你申请退款之后,银…

CCS调试工具的使用

CCS调试工具的使用 1.编好程序后,用各种手段进行查错和排错的过程。作为程序的正确性不仅仅表现在正常功能的完成上,更重要的是对意外情况的正确处理。

他曾经负债2.5亿,如今身价超过500亿

从负债2.5亿到身价500亿,到底有多少难?在常人看来,这个几乎是不能做到的,不要说从2.5亿的负债到500亿的身价,就算负债个250万,已经足够很多人踹不过气,这简直是异想天开嘛!但是有一个…

Jacobi并行拆解

作者:桂。 时间:2018-04-23 21:12:02 链接:http://www.cnblogs.com/xingshansi/p/8921815.html 前言 本文主要是复数矩阵分解的拆解思路(矩阵求逆/特征值分解)一文的补充。 一、并行拆解思路 回顾前文,对…

DSP之定点数

DSP之定点数 定点数的表示 定点数(fixed-point number)就是小数点位置固定的数。 需要先约定小数点的位置 以 1 个字节(8 bit)为例,约定前 5 位表示整数部分,后 3 位表示小数部分。

为什么借钱要上央行征信?

央行征信中心没有一个标准说谁借钱一定要上征信,只有那些接入人行征信系统的金融机构,他们用户的借贷活动才会被记录在案,不管是正常还款,还是逾期不还,统统都会被记录在人行征信系统里面。人行征信系统只是一个金融信…

PHP的构成及工作原理

PHP的设计理念及特点多进程模型 由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,随着时代发展,PHP也早已支持多线程模型。 弱类型语言 和C/C、Java、C#等语言不同&…

DSP/BIOS的基本介绍

DSP/BIOS的基本介绍 DSP/BIOS是一个简易的实时嵌入式操作系统,主要面向实时调度与同步、主机/目标系统通信,以及实时监测等应用,具有实时操作系统的诸多功能,如任务的调度管理、任务间的同步和通信、内存管理、实时时钟管理、中断…

PHP7的变化

引言PHP7与PHP5版本相比有非常大的变化,尤其是在Zend引擎方面。为了提升性能,PHP7对Zend进行了深度优化,使得PHP的运行速度大大提高,比PHP5.0-5.6快了近5倍,同时还降低了PHP对系统资源的占用。 PHP7比较大的变化有&…

Git的下载安装

Git的下载安装 在你开始使用 Git 前,需要将它安装在你的计算机上。 即便已经安装,最好将它升级到最新的版本。 你可以通 过软件包或者其它安装程序来安装,或者下载源码编译安装。 或者 测试一下是否安装成功

Jacobi并行拆解【补充】

作者:桂。 时间:2018-04-24 22:04:52 链接:http://www.cnblogs.com/xingshansi/p/8934373.html 前言 本文为Jacobi并行拆解一文的补充,给出另一种矩阵运算的思路。 一、算法流程 对于复数相关矩阵R,通过矩阵变换,在…

PHP内核——内存管理

PHP中的变量是不需要手动释放的,内核帮我们实现了变量的内训管理,包括内存的分配与回收。本文主要介绍PHP中与内存相关的知识点,包括变量的GC机制、垃圾回收以及底层的内存池实现,除此还有一些线程安全相关的知识点。 变量的自动G…

买房贷款被拒,该如何补救?

买房贷款被拒,想要补救得先找到根源,然后才能对症下药。下面我们就来分析下房贷被拒的原因,以及补救的方法。一、征信不良一般在提交房贷资料之前银行会先查询申请人的信用记录,银行对征信的要求一般是连三累六,也就是…

配置有户名和邮箱

配置有户名和邮箱 按上下键,可以切换到历史命令。 修改信息 获取单独的信息 Git help 就是对各种命令进行查询 对help中的具体命令进行查询

这4种钱没有也要借,不能等

借钱?说起来好像是一件没有面子的事情,但是我们认真观察下人的一生,我们会发现,在不同的时间段,我们会面临各种各样的问题, 我们所处的环境都会不一样,有时候有些钱是必须要花的,即使…

注意:这些信用卡不激活也会产生费用

银监会规定,信用卡未经持卡人激活,不得扣收任何费用。因此很多人都以为信用卡不激活就不会产生费用,挺多留下一个征信查询记录,但这只针对普通的金卡、白金卡的情况,如果你申请的是特种卡、高端白金卡,钻石…

管理git项目

管理git项目 错误示范 第一步:想建立项目文件夹 第二步:进入到项目文件夹下 第三步:在项目文件夹下使用git命令 正确示范 第一步:创建项目文件 第二步:进入到项目文件夹下 第三步:初始化项目文件的…