深度学习入门之第五章:经典卷积神经网络( 四 )
输入层:227像素×227像素×3的彩色图像 。
文章插图
图5.3 AlexNet网络结构
第1层:Conv2D(11×11 , 96) , Stride(4) , Valid , Output:55×55×96 。
第2层:MaxPooling2D(3×3) , Stride(2) , Output:27×27×96 。
第3层:Conv2D(5×5 , 256) , Same , Output:27×27×256 。
第4层:MaxPooling2D(3×3) , Stride(2) , Output:13×13×256 。
第5层:Conv2D(3×3 384) , Same , Output:13×13×384 。
第6层:Conv2D(3×3 384) , Same , Output:13×13×384 。
第7层:Conv2D(3×3 256) , Same , Output:13×13×256 。
第8层:MaxPooling2D(3×3) , Stride(2) , Output:6×6×256 。
输出层:Flatten , Dense(4096) , Dropout(0.5) , Dense(4096) , Dropout(0.5) , Output 。 Output输出的节点根据真实的应用案例决定 。
5.2.2
AlexNet创新点
AlexNet网络结构在整体上类似于LeNet-5 , 都是先卷积然后全连接 , 但在细节上有很大不同 , AlexNet更复杂 , 同时AlexNet还有很多创新点 , 将其总结如下:
(1)成功使用ReLU作为CNN的激活函数 , 验证了其效果在较深的网络中超过sigmoid 。
(2)训练时使用Dropout随机忽略一部分神经元 , 避免模型过拟合 , 一般在全连接层使用 。
(3)在CNN中使用重叠的最大值池化(步长小于卷积核) 。
(4)提出局部响应归一化层(Local Response Normalization , LRN) , 即对当前层的输出结果做平滑处理 , 后来逐渐被BN(Batch Normalization)代替 。 有关BN的原理将在5.4节详细讲解 。
(5)使用CUDA加速神经网络的训练 , 利用了GPU强大的计算能力 。 受限于当时计算的能力 , AlexNet使用两块GPU进行训练 。
(6)采用了数据增强(Data Augmentation)技术 , 随机地从256像素×256像素的图像中截取254像素×254像素大小的区域(以及水平翻转的镜像) , 达到增加样本量的目的 。 有关数据增强的原理将在5.5节详细讲解 。
5.2.3
案例:中文字体识别——隶书和行楷
本节通过一个中文字体识别的案例来讲解AlexNet的网络结构实现 。
01
数据准备
传统数据分析的基本范式是把数据集一次性完整地读入内存 , 然后进行描述统计、可视化建模分析等 。 但是在深度学习中 , 常常会碰到非常大的数据量 , 一次性读入内存不太可能 , 因此需要把数据分批次随机读入 , 用来进行模型训练、验证和检验 。 这对数据的存储目录结构是有特殊要求的 。
以本案例数据为例 , 在本地目录上有一个目录叫作Data , Data下面有一个目录叫作ChineseStyle , 这是用来存储中文字体数据的核心根目录 , 在这个根目录下 , 又有两个并列的目录 , 一个叫作train , 另一个叫作test 。 其中train目录下包含了训练数据 , test下包含了验证数据 。 再进一步 , train和test下面还分别有两个目录 , 一个叫lishu , 另一个叫xingkai , 这样做是让程序自动识别这是一个二分类问题 , 其中一类叫作lishu , 另一类叫作xingkai 。 需要强调的是 , 两个目录的文件名必须完全相同 , 否则程序会识别为不同的类别 。 具体的数据存储目录如图5.4所示 。
文章插图
图5.4 数据存储目录
02
构造数据生成器
接下来介绍深度学习中一种特有的数据读入方法 , 通过构造数据生成器的方式 , 按照特定的目录结构和要求把相应少量的、多批次的数据读入内存 , 做相应的数据分析 。 这个方法在本书会重复用到 。 通过数据生成器读入数据的一个代价就是频繁的读入操作 , 这是以时间的延长和效率的降低为代价的 。 但是获得的好处是能在有限的内存资源的支持下 , 处理非常大的数据 , 这就是使用数据生成器的根本原因 。
推荐阅读
- 计算机专业大一下学期,该选择学习Java还是Python
- 苹果两款新iPad齐曝光:性能提高、入门款更轻薄、售价便宜
- 假期弯道超车 国美学习“神器”助孩子变身“学霸”
- 想自学Python来开发爬虫,需要按照哪几个阶段制定学习计划
- 未来想进入AI领域,该学习Python还是Java大数据开发
- RHEL 9提升了x86_64处理器的入门要求
- Google AI建立了一个能够分析烘焙食谱的机器学习模型
- 学习大数据是否需要学习JavaEE
- 入门HiFi享好声,这几款耳机绝对值得入手
- 学习“时代楷模”精神 信息科技创新助跑5G智慧港口
