SGD、 卷积层、VGG笔记

笔记:

SGD

使用参数的梯度,沿梯度方向更新参数,并重复这个步骤多次,从而逐渐靠近最优参数,这个过程称为随机梯度下降法(stochastic gradient descent),简称SGD

公式:
在这里插入图片描述
SGD最优化更新路径:
在这里插入图片描述
缺点:SGD低效的根本原因是,梯度的方向并没有指向最小值的方向。可用Momentum、AdaGrad、Adam这3种方法来取代SGD

SGD、Momentum、AdaGrad、Adam最优化方法比较:
在这里插入图片描述
用得较多的是将主要使用SGD或者Adam

权重初始值
Relu
Batch Normalization 的算法
优点:
• 可以使学习快速进行(可以增大学习率)。
• 不那么依赖初始值(对于初始值不用那么神经质)。
• 抑制过拟合(降低Dropout等的必要性)

过拟合
发生过拟合的原因,主要有以下两个。
• 模型拥有大量参数、表现力强。
• 训练数据少。

通过使用Dropout可以抑制过拟合,训练数据和测试数据的识别精度的差距变小了。并且,训练数据也没有到达100%的识别精度

卷积层

卷积层计算顺序:左到右,上到下
在这里插入图片描述
卷积运算的偏置运算:
在这里插入图片描述
填充:大小为(4, 4)的输入数据变成了(6, 6)的形状。
然后,应用大小为(3, 3)的滤波器,生成了大小为(4, 4)的输出数据。
在这里插入图片描述
步幅:
在这里插入图片描述
增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。
假设输入大小为(H, W),滤波器大小为(FH, FW),输出大小为(OH, OW),填充为P,步幅为S。
在这里插入图片描述
例如:输入大小:(28, 31);填充:2;步幅:3;滤波器大小:(5, 5)
在这里插入图片描述
当输出大小无法除尽时(结果是小数时),需要采取报错等对策。根据深度学习的框架的不同,当值无法除尽时,有时会向最接近的整数四舍五入,不进行报错而继续运行。
3维数据计算
计算顺序
在这里插入图片描述
需要注意的是,在3维数据的卷积运算中,输入数据和滤波器的通道数要设为相同的值。
作为4维数据,滤波器的权重数据要按的顺序书写。比如,通道数为3、大小为5 × 5的滤波器有20个时,可以写成(20, 3, 5, 5)。

池化
池化顺序在这里插入图片描述
如图所示,从2 × 2的区域中取出最大的元素,一般来说,池化的窗口大小会和步幅设定成相同的值。除了Max池化之外,还有Average池化等,Average池化则是计算目标区域的平均值。

基于im2col
如果老老实实地实现卷积运算,估计要重复好几层的for语句,用im2col这个便利的函数进行简单的实现。im2col会把输入数据展开以适合滤波器(权重).
参数:
im2col (input_data, filter_h, filter_w, stride=1, pad=0)
• input_data―由(数据量,通道,高,长)的4维数组构成的输入数据
• filter_h―滤波器的高
• filter_w―滤波器的长
• stride―步幅
• pad―填充

import sys, os
sys.path.append(os.pardir)
from common.util import im2col
x1 = np.random.rand(1, 3, 7, 7)
col1 = im2col(x1, 5, 5, stride=1, pad=0)
print(col1.shape) # (9, 75)
x2 = np.random.rand(10, 3, 7, 7) # 10个数据
col2 = im2col(x2, 5, 5, stride=1, pad=0)
print(col2.shape) # (90, 75)

池化层实现流程在这里插入图片描述
LeNet和AlexNet是CNN的代表性网络。

与现在的CNN相比,LeNet有几个不同点

第一个不同点在于激活函数。LeNet中使用sigmoid函数,而现在的CNN中主要使用ReLU函数。此外,原始的LeNet中使用子采样(subsampling)缩小中间数据的大小,而现在的CNN中Max池化是主流。

AlexNet和LeNet不同
•AlexNet激活函数使用ReLU。
• 使用进行局部正规化的LRN层。
• 使用Dropout

VGG

VGG是由卷积层和池化层构成的基础的CNN。它的特点在于将有权重的层(卷积层或者全连接层)叠加至16层(或者19层)。
在这里插入图片描述
输入图片的尺寸是224x224,3通道,尺寸从224降为112是通过maxpooling实现的,选取kernel_size=2并且stride=2的pooling操作可以让长宽各降低一半;网络的最后端是全连接层,全连接层最后输出1000维的目的是实现1000分类的效果。ABCDE表示不同深度的网络配置,convx-y中x表示卷积核尺寸,y表示特征通道数,比如conv3-256表示3x3的卷积核并且通道数为256;同理conv1-512表示卷积核3x3通道数为512。

以VGG16中 D为例:

(1)包含13个卷积层,每个卷积层都不会改变前一层的特征图长和宽;通过Conv可以实现通道数的增加(表格中maxpool放置的位置容易误导读者,让人误以为池化层负责增加通道数)。假设输入图片尺寸为(batch_size, 3, 224, 224),如果希望这一层的输出特征图尺寸为(batch_size, 64, 224, 224),需要使用64个尺寸为3x3并且3个通道的卷积核。

(2)包含5个池化层,分别分布在2或者3次卷积以后。池化层的作用是降低特征图尺寸并且能提高网络抗干扰能力。假设上一层得到的特征图尺寸为(batch_size, 64, 224, 224),选取Max Pooling的核尺寸为2x2,每次移动两个步长,那么得到的输出特征图尺寸为(batch_size, 64, 112, 112)。VGG16选取的是max pooling仅仅是各种池化方式中的一种,类似的池化还有均值池化等。

(3)包含3个全连接层,从现在普遍使用的pytorch与tensorflow框架上进行分析可知,卷积层的输入核输出应该是4D的张量(batch_size, channels, height, width),而全连接的输入核输出应该是(batch_size, features_number)。因此,卷积层输出的特征图需要进行维度和尺寸变换操作,才能送入全连接层,各种框架提供的变换函数可能并不一致,比如view和reshape等。最后一个全连接层输出的特征数量为1000,代表其功能为1000分类。

参考:VGG16网络原理分析与pytorch实现
书籍:深度学习入门 基于Python的理论与实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值