赞
踩
文 / 李锡涵,Google Developers Expert
本文节选自《简单粗暴 TensorFlow 2.0》
在《【入门教程】TensorFlow 2.0 模型:多层感知机》 里,我们以多层感知机(Multilayer Perceptron)为例,总体介绍了 TensorFlow 2.0 的模型构建、训练、评估全流程。
本篇文章则以在图像领域常用的卷积神经网络为主题,介绍以下内容:
如何使用 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 结构图示
<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。