AlexNet:
2012年以高出第二名10多个百分点的准确率获得ImageNet分类任务关军,开创卷积神经网络的新时代
AlexNet特点:
1)采用ReLU:代替饱和激活函数,减轻梯度消失
2)采用LRN(local Response Normalization):对数据归一化,减轻梯度消失(后来用batch normalization代替)
3)Dropout:提高全连接层的鲁棒性,增加网络的泛化能力
4)data augmentation:TencRrop,色彩修改
把AlexNet分为:features和classifier两个模块
在pytorch中通过torchvision.models.AlexNet()查看AlexNet
class AlexNet(nn.Moudule):
def __init__(self, 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.avgpool = nn.AdaptiveAvgPool2d((6, 6))
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, classes),
)
def forward(self, x):
x = self.features(x)
x = self.avgpool(x)
x = torch.flatten(x, 1)
x = self.classifier(x)
return x
可知AlexNet的结构:
conv—>pool—>conv—>pool—>conv—>conv—>conv—>pool—>avgpool—>dorpout—>linear—>dropout—>linear—>linear
补充:
torchvision:pytorch的计算机视觉工具包
包含3个模块:
(1)torchcision.transforms: 提供了许多图像预处理方法:数据的标准化、中心化、旋转、翻转
(2)torchvision.datasets:常用数据集的dataset实现,MNIST, CIFAR-10,Imagnet
(3)torchvision.model:常用的模型预训练,AlexNet, VGG, ResNet, GoogleNet