Keras 是一个用于定义和训练神经网络的高阶API。简单的说,Keras 是对 TensorFlow 等深度学习框架的更高一层的封装,以提供更加优雅,用户友好的接口设计。所以,Keras 不能独立运行,须要底层框架的支持,这个底层框架能够是 TensorFlow, CNTK, Theano。推荐使用 TensorFlow , 本文也是以 TensorFlow 为例。python
在人工智能领域,一般所说的“神经网络”,完整说法应该是“人工神经网络”。它是人类为了使机器具有人类的智力行为,使用计算机算法模拟人类神经系统,开发的一种机器学习技术。人类的神经系统是由一个个神经元彼此相连,构成的复杂网络系统。算法
下图是大脑神经元结构,神经元从它的多个树突(DENDRITES)接收输入(神经冲动),通过处理,判断是否经过轴突(AXON)输出神经冲动。bash
正如神经元是构成大脑神经系统的基本单元,感知器(Perceptron)是构人工神经网络的基本单元。它接收多个输入(),经过线性函数和激活函数(Step Function 是激活函数的一种),获得输出
。微信
线性函数:网络
其中, 和
为向量,
,
,所以也能够展开以下:架构
Step Function 是阶越函数,在神经网络中,一般称这类函数为激活函数:框架
神经网络的数学原理是线性代数。在单个感知器中,输入到输出,实际就是,输入向量 与权重向量
的点积,再加上一个偏置单元
(标量)。为了表示的一致性,一般也会将偏置单元看做是,输入为 1 , 权重为
的特殊单元。机器学习
1 个感知器对应 1 个输出,多个具备不一样权重向量感知器,接收相同输入向量,就对应多个输出,这样一组感知器就构成神经网络的层(layer)。相比于单个感知器,层能接收多个输入,并获得多个输出,而权重再也不以向量表示,取而代之为矩阵。所以,层的数学模型就是,输入向量乘以权重矩阵,获得输出向量。函数
所谓的深度学习或深度神经网络,就是由多个感知层首尾相连,即前一个层的输出对应后一个层的输入,构成的多层感知器。其中,第1层也叫输入层(Input Layer),最后1层也叫输出层(Output Layer),中间层也叫隐藏层(Hidden Layer)。学习
在对深度神经网络有个基本概念后,接下来使用 Keras 搭建一个深度神经网络模型。在此以前,须要先安装相关软件和 python 包。
若是还没安装 Anaconda ,建议先安装,下载地址:www.anaconda.com/distributio… 。
确认已经安装了 Anaconda 后,打开命令行终端,输入以下命令,建立环境并安装相关 python 包。
conda create -n DNN python=3.6
conda activate DNN
pip install --upgrade pip
pip install numpy pandas matplotlib jupyter notebook tensorflow Keras
pip install seaborn
pip freeze | grep -Ei "numpy|pandas|matplotlib|tensorflow|Keras"
复制代码
out:
Keras==2.3.0
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
matplotlib==3.1.1
numpy==1.17.2
pandas==0.25.1
tensorflow==1.14.0
tensorflow-estimator==1.14.0
复制代码
Keras 提供两种建立神经网络的方法: 序列化模型(Sequential model),函数式API(Functional API)。
下面分别使用两种方法,建立最简单的3层神经网络模型,1个输入层,1个隐藏层和1个输出层,其中输入大小(shape)为 100, 输出大小为 10,隐藏层大小为 32。
from keras.models import Sequential
from keras.layers.core import Dense
复制代码
建立序列模型:
model = Sequential()
复制代码
给模型添加层。Keras 将根据第1层自动推断后续全部层的形状。这意味着,你只需为第1层设置输入维度。
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
复制代码
编译模型,指定损失函数,优化程序和评估指。
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
复制代码
查看模型架构:
model.summary()
复制代码
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 32) 3232
_________________________________________________________________
dense_2 (Dense) (None, 10) 330
=================================================================
Total params: 3,562
Trainable params: 3,562
Non-trainable params: 0
_________________________________________________________________
复制代码
Keras 函数式API用来定义结构更为复杂的模型。例如多输出模型,有向无环图或具备共享层的模型。
from keras.layers import Input, Dense
from keras.models import Model
复制代码
# 返回一个张量
inputs = Input(shape=(100, ))
# 给模型层实例,传入输入张量,返回一个输出张量
output_1 = Dense(32, activation='relu')(inputs)
outputs = Dense(10, activation='softmax')(output_1)
# 根据输入和输出,建立一个包含一个输入层,一个隐藏层和一个输出层的模型
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 查看模型结构
model.summary()
复制代码
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 100) 0
_________________________________________________________________
dense_3 (Dense) (None, 32) 3232
_________________________________________________________________
dense_4 (Dense) (None, 10) 330
=================================================================
Total params: 3,562
Trainable params: 3,562
Non-trainable params: 0
_________________________________________________________________
复制代码
本文从初学者角度,介绍深度神经网络的基本概念和数学原理,而后经过使用很是流行深度学习框架 Keras 提供的两种方法,分别建立了相同结构的模型,引导读者从理论过渡到实践。理论深奥难懂,但经过封装良好的框架,却能在最短期内,将煊赫一时地深度学习技术投入实践。但愿本文可以帮助对深度学习感兴趣的读者,迈出进入深度学习殿堂的第一步。
微信扫描二维码 获取最新技术原创