原创

keras的学习笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://wqqeqeqwe.blog.csdn.net/article/details/100994428

简介

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)
文章最后发布于: 2018-04-20 10:32:38
展开阅读全文
曾参与过风云系列卫星、碳卫星、子午工程、嫦娥等项目的数据处理工作;有超10年大型项目的开发经验。 专栏收入了作者为Python爱好者精心打造的多篇文章,从小白入门学习的基础语法、基础模块精讲等内容外,还提出了“Python语感训练”的概念和方法,不仅为初学者提供了进阶之路,有一定基础的程序员亦可从中受益。后续,本专栏还将加入2D/3D应用开发、数据处理、实战项目等精品内容,敬请期待。
xufive ¥3.80 1404人订阅

没有更多推荐了,返回首页

分享到微信朋友圈

×

扫一扫,手机浏览