AlexNet学习

AlexNet学习

先给出AlexNet的一些参数和结构图: 
卷积层:5层 
全连接层:3层 
深度:8层 
参数个数:60M 
神经元个数:650k 
分类数目:1000类

创新点:

ReLU和多个GPU        
    为了提高训练速度,AlexNet使用ReLU代替了Sigmoid,其能更快的训练,同时解决sigmoid在训练较深的网络中出现的梯度消失,或者说梯度弥散的问题. 双GPU训练,提高速度

重叠的pool池化:kernal=3,stride=2        
    提高精度, 不容易产生过拟合,在以前的CNN中普遍使用平均池化层,AlexNet全部使用最大池化层,避免了平均池化层的模糊化的效果,并且步长比池化的核的尺寸小,这样池化层的输出之间有重叠,提升了特征的丰富性.

局部响应归一化             
    提高精度,局部响应归一化,对局部神经元创建了竞争的机制,使得其中响应小打的值变得更大,并抑制反馈较小的.

数据增益 Dropout       
减少过拟合,使用数据增强的方法缓解过拟合现象

不理解的地方:????怎么做的?除以标准差还是最大最小标准化?

标准化(Local Response Normalization)
使用ReLU f(x)=max(0,x)后,你会发现**函数之后的值没有了tanh、sigmoid函数那样有一个值域区间,所以一般在ReLU之后会做一个normalization,LRU就是稳重提出(这里不确定,应该是提出?)一种方法,在神经科学中有个概念叫“Lateral inhibition”,讲的是活跃的神经元对它周边神经元的影响。

 

pytorch:没有nomalization操作

class AlexNet(nn.Module):

    def __init__(self, num_classes=1000):
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        self.classifier = nn.Sequential(
            nn.Dropout(),
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, num_classes),
        )

    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size(0), 256 * 6 * 6)
        x = self.classifier(x)
        return x


发展:

在AlexNet问世之后,CNN以一个很快的速度发展,截止到2017年,已经有了多代的网络结构问世,深度、宽度上也越来越大,效率和正确率上也越来越好: 
AlexNet—NiN—VGG—GoogLeNet—ResNet 
在这些结构中: 
NiN 引入1×11×1卷积层(Bottleneck layer)和全局池化; 
VGG将7×77×7替换成三个3×33×3; 
GoogLeNet引入了Inception模块; 
ResNet引入了直连思想; 
DenseNet引入稠密链接,将当前的层与之后的所有层直连。 
其中的一些网络甚至替换了AlexNet中提出的一些思想,但是CNN大体上结构依旧遵循着AlexNet,甚至还有很多传统ANN的思想存在。
AlexNet学习

参考:

https://blog.csdn.net/Rasin_Wu/article/details/80017920

https://blog.csdn.net/chenyuping333/article/details/82178335