文 / 李锡涵,Google Developers Expert
本文节选自《简单粗暴 TensorFlow 2.0》
在《【入门教程】TensorFlow 2.0 模型:多层感知机》 里,我们以多层感知机(Multilayer Perceptron)为例,总体介绍了 TensorFlow 2.0 的模型构建、训练、评估全流程。
本篇文章则以在图像领域常用的卷积神经网络为主题,介绍以下内容:
-
如何使用 tf.keras 构建卷积神经网络模型;
-
如何在自己的项目中快速载入并使用经典的卷积神经网络模型;
-
为深度学习的入门者简介 卷积层 和 池化层 的原理。
使用 tf.keras 构建卷积神经网络模型
卷积神经网络 (Convolutional Neural Network, CNN) 是一种结构类似于人类或动物的视觉系统的人工神经网络,包含一个或多个卷积层 (Convolutional Layer)、池化层 (Pooling Layer) 和全连接层 (Fully-connected Layer)。
基础知识和原理
卷积神经网络的一个示例实现如下所示,和上节中的 多层感知机 在代码结构上很类似,只是新加入了一些卷积层和池化层。这里的网络结构并不是唯一的,可以增加、删除或调整 CNN 的网络结构和参数,以达到更好的性能。
1class CNN(tf.keras.Model):
2 def __init__(self):
3 super().__init__()
4 self.conv1 = tf.keras.layers.Conv2D(
5 filters=32, # 卷积层神经元(卷积核)数目
6 kernel_size=[5, 5], # 感受野大小
7 padding='same', # padding策略(vaild 或 same)
8 activation=tf.nn.relu # 激活函数
9 )
10 self.pool1 = tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2)
11 self.conv2 = tf.keras.layers.Conv2D(
12 filters=64,
13 kernel_size=[5, 5],
14 padding='same',
15 activation=tf.nn.relu
16 )
17 self.pool2 = tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2)
18 self.flatten = tf.keras.layers.Reshape(target_shape=(7 * 7 * 64,))
19 self.dense1 = tf.keras.layers.Dense(units=1024, activation=tf.nn.relu)
20 self.dense2 = tf.keras.layers.Dense(units=10)
21
22 def call(self, inputs):
23 x = self.conv1(inputs) # [batch_size, 28, 28, 32]
24 x = self.pool1(x) # [batch_size, 14, 14, 32]
25 x = self.conv2(x) # [batch_size, 14, 14, 64]
26 x = self.pool2(x) # [batch_size, 7, 7, 64]
27 x = self.flatten(x) # [batch_size, 7 * 7 * 64]
28 x = self.dense1(x) # [batch_size, 1024]
29 x = self.dense2(x) # [batch_size, 10]
30 output = tf.nn.softmax(x)
31 return output
示例代码中的 CNN 结构图示
<