一、卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。
顾名思义,就是将卷积与前馈神经网络结合,所衍生出来的一种深度学习算法。
卷积神经网络是在前馈神经网络的隐藏层做的改变,它的隐藏层包括卷积层、池化层、全连接层三部分。
输入层:
卷积神经网络的输入层可以处理多维数据:
| n维卷积神经网络 | 处理数据类型 |
|---|---|
| 一维卷积神经网络 | 一维或二维数组 |
| 二维卷积神经网络 | 二维或三维数组 |
| 三维卷积神经网络 | 四维数组 |
由于卷积神经网络在计算机视觉领域应用较广,因此许多研究在介绍其结构时预先假设了三维输入数据,即平面上的二维像素点和 RGB 通道。
隐藏层:
卷积层(包含有卷积核、卷积层参数、激励函数):使用卷积核进行特征提取和特征映射。
| 卷积核 | 类似于一个前馈神经网络的神经元,组成卷积核的每个元素都对应一个权重系数核一个偏差量,含义可类比视觉皮肤细胞的感受野 |
|---|---|
| 卷积层参数 | 包括卷积核大小、步长、填充,三者共同决定了卷积层输出特征图的尺寸,是卷积神经网络的超参数 |
| 激励函数 | 协助表达复杂的特征,类似于其它深度学习算法 |
3×3核的卷积核(卷积核一般采用3×3或2×2),卷积过程如下图:
池化层:
在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。
池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。
池化层选取池化区域与卷积核扫描特征图步骤相同,由池化大小、步长和填充控制。

最大池化——>它只是输出在区域中观察到的最大输入值。
均值池化——>它只是输出在区域中观察到的平均输入值。
两者最大区别在于卷积核的不同(池化是一种特殊的卷积过程)。
全连接层:
卷积神经网络中的全连接层等价于传统前馈神经网络中的隐含层(每个神经元与上一层的所有神经元相连)。全连接层位于卷积神经网络隐含层的最后部分,并只向其它全连接层传递信号。
特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数。
全连接层的作用则是对提取的特征进行非线性组合以得到输出,即全连接层本身不被期望具有特征提取能力,而是试图利用现有的高阶特征完成学习目标。
输出层:
卷积神经网络中输出层的上游通常是全连接层,因此其结构和工作原理与传统前馈神经网络中的输出层相同。
对于图像分类问题,输出层使用逻辑函数或归一化指数函数(softmax function)输出分类标签。
在物体识别(object detection)问题中,输出层可设计为输出物体的中心坐标、大小和分类。
在图像语义分割中,输出层直接输出每个像素的分类结果。
应用领域:
1.计算机视觉
图像识别
物体识别
行为认知
姿态估计
神经风格迁移
2.自然语言处理
3.其它
物理学
遥感科学
大气科学
卷积神经网络在计算机视觉识别上的全过程,如下图所示:

二、猫狗数据分类建模
对猫狗图像进行分类,代码如下:
import os, shutil
# 原始目录所在的路径
original_dataset_dir = 'E:\\Cat_And_Dog\\train\\'
# 数据集分类后的目录
base_dir = 'E:\\Cat_And_Dog\\train1'
os.mkdir(base_dir)
# # 训练、验证、测试数据集的目录
train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)
validation_dir = os.path.join(base_dir, 'validation')
os.mkdir(validation_dir)
test_dir = os.path.join(base_dir, 'test')
os.mkdir(test_dir)
# 猫训练图片所在目录
train_cats_dir = os.path.join(train_dir, 'cats')
os.mkdir(train_cats_dir)
# 狗训练图片所在目录
train_dogs_dir = os.path.join(train_dir, 'dogs')
os.mkdir(train_dogs_dir)
# 猫验证图片所在目录
validation_cats_dir = os.path.join(validation_dir, 'cats')
os.mkdir(validation_cats_dir)
# 狗验证数据集所在目录
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
os.mkdir(validation_dogs_dir)
# 猫测试数据集所在目录
test_cats_dir = os.path.join(test_dir, 'cats')
os.mkdir(test_cats_dir)
# 狗测试数据集所在目录
test_dogs_dir = os.path.join(test_dir, 'dogs')
os.mkdir(test_dogs_dir)
# 将前1000张猫图像复制到train_cats_dir
fnames = ['cat.{}.jpg'.format(i

本文详述了使用卷积神经网络(CNN)进行猫狗图像分类的过程,从CNN的基本结构到猫狗数据集的建模,包括模型构建、优化器配置、图像预处理和模型训练。通过一步步操作,展示了如何使用CNN进行计算机视觉任务。
最低0.47元/天 解锁文章
4016

被折叠的 条评论
为什么被折叠?



