赞
踩
介绍:
一)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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。