深度学习从入门到精通+TensorFlow案例演示:神经网络层
·
| 相关学习资料 | 深度学习入门到精通+TensorFlow全程案例讲解 .zip |
3-5 神经网络层
上一节运用自动微分实现了一条简单线性回归线的求解,然而
神经网络是多条回归线的组合,并且每一条回归线可能再乘上
非线性的
Activation Function
,假如使用自动微分函数逐一定义
每条公式,层层串连,程序可能要很多个循环才能完成。所以
为了简化程序开发的复杂度,
TensorFlow/Keras
直接建构了各式
各样的神经层函数,可以使用神经层组合神经网络的结构,用
户只需要专注算法的设计即可,轻松不少。
如图
3.8
所示,神经网络是多个神经层组合而成的,包括输入层
(
Input Layer
)、隐藏层(
Hidden Layer
)及输出层
(
Output Layer
),其中隐藏层可以有任意多层。一般而言,隐
藏层大于或等于两层,即称为深度学习。
TensorFlow/Keras
提供了数十种神经层,分成以下类别,用户可
参阅
Keras
官网说明(
https://keras.io/api/layers/
)。
(
1
)核心类别(
Core Layer
):包括完全连接层
(
Full Connected Layer
)、激励神经层(
Activation layer
)、嵌
入层(
Embedding layer
)等。
(
2
)卷积层(
Convolutional Layer
)。
(
3
)池化层(
Pooling Layer
)。
(
4
)循环层(
Recurrent Layer
)。
(
5
)前置处理层(
Preprocessing layer
):提供
One
Hot Encoding
、影像前置处理、数据增补(
Data Augmentation
)
等。
我们先来看看两个最简单的完全连接层范例。
范例
1.
使用完全连接层估算简单线性回归的参数(
w
、
b
)。
程序:请参阅
03_4_
简单的完全连接层
.ipynb
。
(
1
)产生随机数据,与上一节范例相同。程序代码如下:
(
2
)建立模型:神经网络仅使用一个完全连接层,而且输入只
有一个神经元,即
X
,输出也只有一个神经元,即
y
。
Dense
本身
有一个参数
use_bias
,即是否有偏差项,默认值为
True
,除了一
个神经元输出外,还会有一个偏差项。以上设定其实就等于
y
=
wx
+
b
。为聚焦概念的说明,暂时不解释其他参数,在后面章
节会有详尽说明。程序代码如下:
(
3
)定义模型的损失函数及优化器。程序代码如下:
(
4
)模型训练:只需一个指令
model.fit
(
X, y
)即可,训练过
程的损失函数变化都会存在
history
变量中。程序代码如下:
(
5
)训练过程绘图。程序代码如下:
执行结果:损失函数值随着训练周期越来越小,如图
3.9
所示。
(
6
)取得模型参数
w
为第一层的第一个参数,
b
为输出层的第
一个参数。程序代码如下:
执行结果:
w
:
0.8798
,
b
:
3.5052
,因输入数据为随机随机
数。
(
7
)绘图显示回归线。程序代码如下:
执行结果:如图
3.10
所示。
与自动微分比较,这种方法程序更简单,只要设定模型结构、
损失函数、优化器后,呼叫训练(
fit
)函数即可。
下面我们再看一个有趣的例子,利用神经网络自动求出华氏与
摄氏温度的换算公式。
范例
2.
使用完全连接层推算华氏与摄氏温度的换算公式。
华氏(
F
)
=
摄氏(
C
)
*
(
9/5
)
+ 32
(
1
)利用换算公式,随机产生
151
个数据。程序代码如下:
(
2
)建立模型:神经网络只有一个完全连接层,而且输入只有
一个神经元,即摄氏温度,输出只有一个神经元,即华氏温
度。程序代码如下:
(
3
)模型训练。程序代码如下:
(
4
)训练过程绘图。程序代码如下:
执行结果:如图
3.11
所示。由此可见:损失函数值随着训练周
期越来越小。
(
5
)测试:输入摄氏
100
度及
0
度转换为华氏温度,答案完全正
确。程序代码如下:
执行结果:
华氏(
F
):
212.00
,摄氏(
C
):
100
华氏(
F
):
32.00
,摄氏(
C
):
0
(
6
)取得模型参数
w
、
b
。
①执行结果:
w
:
1.8000
,
b
:
31.9999
,近似于华氏与摄氏温度
的换算公式。
②其实换算公式也是一条回归线。
读到这里,读者应该会好奇如何使用更多的神经元和神经层,
甚至更复杂的神经网络结构,下一章我们将正式迈入深度学习
的殿堂,学习如何用
TensorFlow
解决各种实际的案例,并且详
细剖析各个函数的用法及参数说明
更多推荐
所有评论(0)