初识Keras

本文详细介绍Keras深度学习库的使用方法,包括构建神经网络、设置评估标准、训练模型及保存模型等步骤。Keras是一款基于Theano和TensorFlow的高级API,支持快速原型设计,适用于CNN、RNN及其组合。

Conceptions:

 

Keras:基于Theano和TensorFlow的深度学习库

Keras是一个高层神经网络API,Keras由纯Python编写而成并基TensorFlow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:

  • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)

  • 支持CNN和RNN,或二者的结合

  • 无缝CPU和GPU切换

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

Keras的设计原则是

  • 用户友好:Keras是为人类而不是天顶星人设计的API。用户的使用体验始终是我们考虑的首要和中心内容。Keras遵循减少认知困难的最佳实践:Keras提供一致而简洁的API, 能够极大减少一般应用下用户的工作量,同时,Keras提供清晰和具有实践意义的bug反馈。

  • 模块性:模型可理解为一个层的序列或数据的运算图,完全可配置的模块可以用最少的代价自由组合在一起。具体而言,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块,你可以使用它们来构建自己的模型。

  • 易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Keras更适合于先进的研究工作。

  • 与Python协作:Keras没有单独的模型配置文件类型(作为对比,caffe有),模型由python代码描述,使其更紧凑和更易debug,并提供了扩展的便利性。

因此,在使用keras时,你会觉得你的任务实际上在拼积木构建网络。如下图:

这里我们用 Deep Learing 里面 “Hello World”级别的问题——手写文字分类为例进行讲解。

首先,我们可以去:http://yann.lecun.com/exdb/mnist/ 

下载手写数字的data set, 一共有四个,分别是training images, training labels, testing images, testing labels.

 

1. 首先,我们需要定义一个 function  set(Neural Network)

model = Sequential()  创建一个连续的网络。这里 sequential 代表序惯模型。连续模型

接下来给model 添加Layers。 使用 model.add

>>>>>>input_dim 代表上次层输入的data dimenion

>>>>>>“28*28"代表输入的图片的size是28*28pixels。

>>>>>>out_dim代表下一层的数据维度,如果是500个neturons 输出值就是500.(注意在最新版本中改为units=500)

>>>>>>Activation 选择添加激活方程的种类,图中用的是 Sigmod 方程,其实也可以用softplus,linear,relu等等

>>>>>>第二层的之后layer不需要再给input,因为上次层的output 就是下层的input.

>>>>>>最后的output 的dim 应该是10,因为只有10个数字,所以是10维,他会给出每个分类的probablity。

通过添加 Softmax 可以输出最后概率。

Keras 2.0(语法更新)

 

 

 

 

补充: Dense

全连接层(对上一层的神经元进行全部连接,实现特征的非线性组合)

keras.layers.core.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

Dense就是常用的全连接层,所实现的运算是output = activation(dot(input, kernel)+bias)。其中activation是逐元素计算的激活函数,kernel````是本层的权值矩阵,bias为偏置向量,只有当use_bias=True```才会添加。

如果本层的输入数据的维度大于2,则会先被压为与kernel相匹配的大小。

    units:大于0的整数,代表该层的输出维度。

    activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)

    use_bias: 布尔值,是否使用偏置项

# as first layer in a sequential model:

model = Sequential()

model.add(Dense(32, input_shape=(16,)))  #input_shape=(16,)等价于input_dim=16

# now the model will take as input arrays of shape (*, 16) ,输入维度=16

# and output arrays of shape (*, 32) ,输出维度=32

# after the first layer, you don't need to specify

# the size of the input anymore:

model.add(Dense(32)) #这一层的input_shape=(32,)

全连接层(Fully Connected layer)就是使用了softmax激励函数作为输出层的多层感知机(Multi-Layer Perceptron),其他很多分类器如支持向量机也使用了softmax。“全连接”表示上一层的每一个神经元,都和下一层的每一个神经元是相互连接的。全连接层的输出概率之和为1,这是由激励函数Softmax保证的。Softmax函数把任意实值的向量转变成元素取之0-1且和为1的向量。

综上,我们建立了一个Neural Network,其实它本身就是一个function Set.

2. 接下来,我们要进行step2,就是评价一下,这个function set的好坏。

 model.compile()用于评价一个function的好坏,包括 loss function。optimizer(实时跟新learing rate方法),以及metrics 的方法。optimizer 包括 SGD, RMSProp, Adagrad, Adadelta, Adam, Adamax, Nadam

这里使用了 交叉熵 作为损失函数, adam作为optimzer, "准确性"作为metrics的评价指标。

3. 确定一个好的function

其中X_train 就是image, y_train 就是label. 我们可以仔细的分析一下这个x_train 和y_train。

   首先,我们需要将一个image data(X_train)转变为以numpy array. 这个array的shape应该为(N*,m*m)其中N* 代表样本的数量,m*m就是图片的像素大小,我们也可以将其理解为features的数量。

y_train也是一个numpy array, shape为第一数字代表数目,第二个为特征值10维数组,也就是100000000.代表1

接下来介绍 batch 和 epoch.

我们把整个dataset 分为多个小的batch, 分别做loss function 的 GD, 每一个batch 更新完成一次叫做一个epoch.

>>>>batch_size 表示每个batch随机包含多少的data.

>>>>nb_epoch表示更新多少次。

如下图所示:

 

 

WHY WE USE  MINI-BATCH  RATHER THAN SGD??

 如果我们用SGD, 每次计算一个点需要更新一次数据。需要大量的CPU运算。

但是如果我们将其分解为一个个小batch, batch的整体输入可以作为一个矩阵给GPU, 从而做平行运算,速度大于CPU。

如图

 

4. 如何保存使用 keras

 

其中, score 的OUTPUT 一个2维Vector, 第一个是Loss, 第二个是Accuracy。

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值