介绍:

一)Keras是什么?

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验,能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。特别的,在TensorFlow2.0版本中,将对Keras框架进行进一步整合,官方也推荐大家使用Keras构建模型,所以我们很有必要了解并掌握Keras的基本结构和使用方法,以提升我们的工作和实验效率!
(二)Keras的优点

在Keras的官方文档中,开发组列出了Keras的四个优点:

    用户友好
    Keras 是为人类而不是为机器设计的 API。它把用户体验放在首要和中心位置。Keras 遵循减少认知困难的最佳实践:它提供一致且简单的 API,将常见用例所需的用户操作数量降至最低,并且在用户错误时提供清晰和可操作的反馈。

    模块化
    模型被理解为由独立的、完全可配置的模块构成的序列或图。这些模块可以以尽可能少的限制组装在一起。特别是神经网络层、损失函数、优化器、初始化方法、激活函数、正则化方法,它们都是可以结合起来构建新模型的模块。

    易扩展性
    新的模块是很容易添加的(作为新的类和函数),现有的模块已经提供了充足的示例。由于能够轻松地创建可以提高表现力的新模块,Keras 更加适合高级研究。

    基于 Python 实现
    Keras 没有特定格式的单独配置文件。模型定义在 Python 代码中,这些代码紧凑,易于调试,并且易于扩展。

(三)Keras使用示例

我们来定义一个含有一个隐层的网络:

from tensorflow import keras
from keras.utils import plot_model
import numpy as np

x_train = np.random.rand(10000, 2)
y_train = 3 * x_train[:, 0] + 2 * x_train[:, 1] + 1
print(y_train.shape)

model = keras.models.Sequential()
# 使用add方法添加隐层
model.add(keras.layers.Dense(512, activation= 'sigmoid', input_dim= 2, use_bias= True))

model.add(keras.layers.Dense(1, activation= 'sigmoid', use_bias= True))
# 编译模型
model.compile(loss = keras.losses.mean_squared_error,
              optimizer= keras.optimizers.Adam(0.01),
              metrics= ['accuracy'])
# 训练模型
model.fit(x_train, y_train, batch_size= 10)
# 输出:
10/1000 [..............................] - ETA: 26s - loss: 17.7002 - acc: 0.0000e+00
690/1000 [===================>..........] - ETA: 0s - loss: 12.8620 - acc: 0.0000e+00
1000/1000 [==============================] - 0s 336us/step - loss: 11.8523 - acc: 0.0000e+00

可以看出,相较于TensorFlow基础API,使用Keras构建模型更加快捷、高效
 

安装:

(一)安装TensorFlow

Keras需要TensorFlow作为后端, 所以我们要首先确认是否安装了TensorFlow,打开Anaconda Prompt,输入:

>>>pip install tensorflow

(二)使用pip安装

打开Anaconda Prompt,输入:

>>>pip install keras

等待下载安装即可
(三)使用git安装

打开Anaconda Prompt,输入:

>>>git clone https://github.com/keras-team/keras.git

使用此方法的前提是你已经安装了git工具
(四)安装h5py

此组件的目的是让我们可以保存Keras的模型,打开Anaconda Prompt,输入:

>>>pip install h5py

(五)安装graphviz和pydot

这两个组件的目的是为了可视化Keras的网络结构,之后我们会用到,打开Anaconda Prompt,输入:

>>>pip install graphviz
>>>pip install pydot

使用keras的一般流程:

# 实例化一个次序模型
model = keras.models.Sequential()
# 使用model.add方法添加隐层
model.add(···)
model.add(···)

具体如何定义一个隐层,我们会在下节讲到
(3)编译模型

在我们定义完模型后,需要使用complie方法对其进行编译:

model.compile(loss = keras.losses.mean_squared_error,
              optimizer= keras.optimizers.Adam(0.01),
              metrics= ['accuracy'])

在编译操作中,我们需要定义模型使用的优化方法,损失函数,评估模型的指标等
(4)训练模型

我们使用model.fit()方法来训练模型,将训练数据的特征和标签导入:

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

在这里可以指定批处理数、训练的世代数等参数
(5)评估模型

使用model.evaluate()方法来评估模型,如下所示:

model.evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None)

同样可以指定批处理数等参数
(6)保存模型

模型训练完成之后,我们使用model.save()方法来保存模型

model.save(/model.h5)

最终模型会被保存为h5格式的文件
 

 Dense方法介绍:

(一)keras.layers.Dense方法

在开始定义模型之前,我们有必要对Dense方法进行详细地了解,因为它是Keras定义网络层的基本方法,其代码如下:

keras.layers.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)

 

参数说明如下:   

 units:
    该层有几个神经元

    activation:
    该层使用的激活函数

    use_bias:
    是否添加偏置项

    kernel_initializer:
    权重初始化方法

    bias_initializer:
    偏置值初始化方法

    kernel_regularizer:
    权重规范化函数

    bias_regularizer:
    偏置值规范化方法

    activity_regularizer:
    输出的规范化方法

    kernel_constraint:
    权重变化限制函数

    bias_constraint:
    偏置值变化限制函数

(二)使用示例

以下给出Dense方法的使用示例:

keras.layers.Dense(512, activation= 'sigmoid', input_dim= 2, use_bias= True)

这里定义了一个有512个节点,使用sigmoid激活函数的神经层,注意定义第一层的时候需要制定数据输入的形状,即input_dim,这样才能让数据正常喂进网络!
 

Sequential方法定义模型:

 

(二)模型实现
(1)导入类库

from tensorflow import keras

   

(2)模型定义

细心的朋友可能已经发现,这是用来识别MNIST数据集的模型

model = keras.models.Sequential()
model.add(keras.layers.Dense(784, input_dim=784, kernel_initializer='normal', activation= 'tanh'))
model.add(keras.layers.Dense(512, kernel_initializer='normal', activation= 'tanh'))
model.add(keras.layers.Dense(512, kernel_initializer='normal', activation= 'tanh'))
model.add(keras.layers.Dense(10, kernel_initializer='normal', activation= 'softmax'))

 

(3)模型编译

使用交叉熵作为损失函数,使用Adam优化算法:

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

(4)模型训练

model.fit(x_train, y_train, epochs=10, batch_size=200, verbose=1)

  

(5)模型保存

model.save('/model.h5')

(6)完整代码

输入数据即可开始训练,注意这里的代码没有输入数据的操作!仅提供设计思路。

from tensorflow import keras

# 定义模型
model = keras.Sequential()
model.add(keras.layers.Dense(784, input_dim=784, kernel_initializer='normal', activation= 'tanh'))
model.add(keras.layers.Dense(512, kernel_initializer='normal', activation= 'tanh'))
model.add(keras.layers.Dense(512, kernel_initializer='normal', activation= 'tanh'))
model.add(keras.layers.Dense(10, kernel_initializer='normal', activation= 'softmax'))

# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# 拟合模型
model.fit(x_train, y_train, epochs=10, batch_size=200, verbose=1)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐