AlexNet


AlexNet-Model(pytorch版本)


参考文献格式:

  • 1.一 论文导读
  • 2.二 论文精读
  • 3.三 代码实现
  • 4.四 问题思索

《ImageNet Classification with Deep Convolutional Neural Network》
—基于卷积神经网络的图像分类
作者:Alex Krizhevsky
单位:加拿大多伦多大学
发表会议及时间:NIPS 2012

一 论文导读

 

1.论文导读及研究背景介绍

AlexNet于2012年被提出,开启了深度学习的热潮。

在2012年之前对于图像的处理主要还是关于支持向量机的相关算法,支持向量机独立风骚十几年。由此可见,支持向量机有其特别出众发的优点。

但是在那个时候,人们对于图像处理并不自信,图像处理最基本的分类任务的最高准确率还只是出于89%左右,还是在一定的限定条件下。

16年残差神经网络让图像分类准确率达到96%及其以上,宣告了这类课题(识别图片等)的结束

CNN卷积是一种特征工程,用来提取特征

补充:LeNet简介

LeNet:径向基神经网络
研究一个网络最重要的就是特征工程,后面的分类用其他任何的分类器效果都不会差(有好的特征工程的情况下)

为什么说CNN那么强呢?看起来如此简单的结构,甚至让人不可思议,就这样的结构为什么能取代图像处理方面的复杂的特征工程,就是因为随着CNN的加深,卷积神经网络逐层提取了边缘、轮廓、高级语义等越来越高级的特征信息。就是因为CNN能提取到大部分的图像特征工程的特征信息,只要随着CNN层数的加深。

HR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMzc1MzE4,size_16,color_FFFFFF,t_70)
ImageNet是人文、艺术类数据集,商业价值不高

Benchmark具有商业价值的模型
Baseline就是通用的普遍的模型

两个小型数据集,可以用来测测自己写的模型

Top1:小类
Top5:大类,所以Top5>Top1

图像分类的网络发展:(都是由卷积核构成的)

常用Vgg,
像GoogleNet、ResNet已经过于高级,适合比赛、论文。---- emmmm,2020的我对这句话感到羞愧!

二 论文精读

 

三 代码实现

 

from torch import nn

# 定义Alexnet网路结构
class AlexNet(nn.Module):
    def __init__(self, num_classes=5):
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1),  # 修改了这个地方,不知道为什么就对了
            # raw kernel_size=11, stride=4, padding=2. For use img size 224 * 224.
            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 * 1 * 1, 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 * 1 * 1)
        x = self.classifier(x)
        # return F.log_softmax(inputs, dim=3)
        return x

四 问题思索