成长 进步 分享

Great works are performed not by strength, but by perseverance

简单的Keras入门教程

Keras的安装环境:

Keras是用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

所以在使用Keras前要安装好:1,Python环境,2,Tensorflow之后在安装Keras,为了方便起见,我们使用ANACONDA来安装Python环境和Tensorflow,

Anaconda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换

Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等。我们直接在Anaconda的官方网站上下载对应平台的Anaconda安装包:www.anaconda.com

Anaconda的安装方式比较简单,在安装好Anaconda后,有两种方式可以安装Tensorflow和Keras:

通过Anaconda的GUI来手动安装Tensorflow和Keras:

打开Anaconda Navigator,选择左侧的Environments,在base一栏中,选择“Not installed”,然后在右侧的搜索栏里分别输入Tensorflow和Keras,并勾选同名的项目,之后点击右下角的绿色apply按钮,等待加载完后安装即可。

通过命令行界面的pip工具自动安装Tensorflow和Keras

打开安装Anaconda Prompt,进入命令行界面输入‘pip install tensorflow’和’pip install keras’并等待下载安装完成。

通过以上任意一种方式完成安装后,打开Anaconda Prompt,进入命令行界面,输入’python’命令,进入python编辑器的模式,再输入’import keras‘并执行,如果出现’Using TensorFlow backend.’则说明安装成功。

Keras的三段式结构:创建模型,堆叠模型结构,构建模型并编译

在安装完成Anaconda,tensorflow,keras后,我们可以在python中使用Keras了,打开Anaconda Naviagtor并启动Home页面的Spyder是Python(x,y)的作者为它开发的一个简单的集成开发环境。和其他的Python开发环境相比,它最大的优点就是模仿MATLAB的“工作空间”的功能,可以很方便地观察和修改数组的值。

Keras的核心数据结构是model,作为一种组织网络层的方式,最简单的模型为Sequential模型它由多个网络层线性堆叠。在 Keras 中有两类主要的模型:Sequential 顺序模型使用函数式 API 的 Model 类模型。较为简单的模型通过堆叠由Sequential顺序模型创建的模型就可以完成,而较为复杂的模型,例如:多输入多输出的LSTM模型,就需要通过使用使用函数式 API 的 Model 类模型。来构建。本篇我们只讲Sequential顺序模型的简单使用。

Sequential顺序模型的构建方法有两种:

将网络层参数列表传给Sequential构造器,来创建一个Sequential模型:

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

在构建模型前,首先要从keras中导入相应的包。在这段代码里,我们导入了Sequential顺序模型,Dense全连接层模型和Activation激活函数这三个包。

命名一个Sequential模型来开始构建过程(model只是模型的名字,可以自定义):通过添加一个Dense层来创建第一层网络,Dense层的基本参数有两个:本层的神经元数目和本层期望输入的尺寸,然后添加一个该层的激活函数Activation,不同的激活函数适用于不同的任务,在Keras中有很多预设的激活函数可以直接调用,也可以自定义激活函数。

通过逐层添加的方式构建模型

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

这种方式和上一种的区别是更加直观,通过使用add函数来添加不同的网络层,激活函数等,表现出了‘堆叠’网络的过程。

在构建网络模型时,最需要注意的点是模型期望输入的尺寸,所以顺序模型的第一层必须要接受关于输入尺寸的信息,之后的层会自动推断尺寸。不同的层要求的输入尺寸的数据类型不同,比如示例中的Dense层,需要输入的是一个数字,而LSTM层则需要使用一个三维张量来指定输入的尺寸。

对模型的训练和评估

在完成模型的构建后,首先通过complie函数来配置学习过程

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

在配置学习过程中,loss函数和optimizer优化器是必须要选择的参数。 不同的loss函数适用于不同的任务,keras预制了大量loss函数,但也可以自定义loss函数,loss函数实际上是对预先输入的标签值和网络的输出值进行计算来指引网络学习优化的方向。 optimizer优化器的作用则是优化网络的学习过程,避免网络陷入局部最优而无法继续优化,示例中的’sgd’优化器采用的是著名的随机梯度下降算法。

配置完成学习过程后,就要通过输入数据来对模型进行训练和评估,在训练时,我们通常使用fit函数:

model.fit(x_train, y_train, epochs=10, batch_size=128)

在fit函数的参数中,x_train是输入数据,而y_train则是标签和网络期望输出的形状,epochs是迭代的总次数,batch_size则是网络训练时一次性更新的参数数目,通常,batch_size越大,网络训练的速度也越快。

在训练完成后,就可以通过predict函数和evaluate函数来查看模型的预测结果和模型性能

classes = model.predict(x_test, batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)

模型实例:由Dense层组成的多层感知机分类器

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout

# 生成虚拟数据
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_test = np.random.random((100, 20))
y_test = np.random.randint(2, size=(100, 1))

model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x_train, y_train,
          epochs=20,
          batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)
classes = model.predict(x_test, batch_size=128)
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注