keras中文文档 keras( 三 )


可以使用 RNN. call (以及 RNN.call)的 constants 关键字参数将「外部」常量传递给单元 。这要求 cell.call 方法接受相同的关键字参数 constants 。这些常数可用于调节附加静态输入(不随时间变化)上的单元转换,也可用于注意力机制 。
举例说明:
在训练模型之前,我们需要配置学习过程,这是通过compile方法完成的 。
他接收三个参数:优化器 opt
keras如何快速入门作者 | 杨照璐(微信号lwyzl0821)
编辑 | 言有三
这一次我们讲讲keras这个简单、流行的深度学习框架,一个图像分类任务从训练到测试出结果的全流程 。
相关的代码、数据都在我们 Git 上,希望大家 Follow 一下这个 Git 项目,后面会持续更新不同框架下的任务 。
Keras是一个非常流行、简单的深度学习框架,它的设计参考了torch,用Python语言编写,是一个高度模块化的神经网络库,支持GPU和CPU 。能够在TensorFlow,CNTK或Theano之上运行 。Keras的特点是能够快速实现模型的搭建,简单方便地让你实现从想法到实验验证的转化,这都是高效地进行科学研究的关键 。
Keras的安装非常简单,但是需要先安装一个后端框架作为支撑,TensorFlow,CNTK,Theano都可以,但是官网上强烈建议使用TensorFlow作为Keras的后端进行使用 。本例以TensorFlow 1.4.0 版本作为Keras的后端进行测试 。
通过上面两条命令就可以完成TensorFlow和Keras的安装,此处需要注意的一点是Keras的版本和TensorFlow的版本要对应,否则会出现意外的错误 。具体版本对应关系可在网上进行查询 。
3.1 MNIST实例
MNIST手写字符分类被认为是深度学习框架里的“Hello Word!”,下面简单介绍一下MNIST数据集案例的测试 。Keras的官方github的example目录下提供了几个MNIST案例的代码,下载mnist_mlp.py,mnist_cnn.py文件,本地运行即可,其他文件读者也可以自行测试 。
3.2 数据定义
前面我们介绍了MNIST数据集实例,很多读者在学习深度学习框架的时候都卡在了这一步,运行完MNIST实例之后无从下手,很大原因可能是因为不知道怎么处理自己的数据集,这一节我们通过一个简单的图像二分类案例,介绍如何实现一个自定义的数据集 。
数据处理有几种方式,一种是像MNIST、CIFAR数据集,这些数据集的特点是已经为用户打包封装好了数据 。用户只要load_data即可实现数据导入 。其实就是事先把数据进行解析,然后保存到.pkl 或者.h5等文件中,然后在训练模型的时候直接导入,输入到网络中;另一种是直接从本地读取文件,解析成网络需要的格式,输入网络进行训练 。但是实际情况是,为了某一个项目我们不可能总是找到相应的打包好的数据集供使用,这时候自己建立一个dataset就十分重要 。
Keras提供了一个图像数据的数据增强文件,调用这个文件我们可以实现网络数据加载的功能 。
此处采用keras的processing模块里的ImageDataGenerator类定义一个图像分类任务的dataset生成器:
下面简单地介绍一下上面的代码,完整代码请移步Git工程 。
Keras的processing模块中提供了一个能够实时进行数据增强的图像生成类ImagGenerator,该类下面有一个函数flow_from_directory,顾名思义该函数就是从文件夹中获取图像数据 。关于ImageGenerator更多的使用可以参考官方源码 。数据集结构组织如下:
此处还需要注意的一点是,我们现在进行的是简单的图像分类任务训练,假如要完成语义分割,目标检测等任务,则需要自定义一个类(继承ImageDataGenerator),具体实现可以查询相关代码进行参考 。
Keras网络模型搭建有两种形式,Sequential 顺序模型和使用函数式API的 Model 类模型 。本教程的例子采用一个简单的三层卷积,以及两层全连接和一个分类层组成的网络模型 。由于函数式API更灵活方便,因此下面采用函数式方法搭建模型,模型定义如下:
4.1 函数式API
即输出是12通道,卷积核大小3*3,步长为2,padding='same'表示边缘补零
axis表示需要归一化的坐标轴,bn_axis=3,由于采用TensorFlow作为后端,因此这句代码表示在通道数坐标轴进行归一化 。
x = Flatten()(x) 表示将卷积特征图进行拉伸,以便和全连接层Dense()进行连接 。
Dense()实现全连接层的功能,1200是输出维度,‘relu'表示激活函数,使用其他函数可以自行修改 。
最后一层采用‘softmax’激活函数实现分类功能 。
最终返回Model,包含网络的输入和输出 。
4.2 模型编译
网络搭建完成,在网络训练前需要进行编译,包括学习方法、损失函数、评估标准等,这些参数分别可以从optimizer、loss、metric模块中导入 。具体代码如下:

秒懂生活扩展阅读