AlexNet

AlexNet


AlexNet-Model(pytorch版本)


参考文献格式:

《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

四 问题思索

AlexNet是由Alex Krizhevsky等人在2012年提出的一个深度卷积神经网络(Convolutional Neural Network,CNN),它在ImageNet图像识别挑战赛中取得了显著突破,首次击败了传统的计算机视觉方法。这标志着深度学习在计算机视觉领域的重大进展。 在TensorFlow框架中,AlexNet可以被用来作为预训练模型,用于迁移学习任务,即在一个大型数据集(如ImageNet)上训练好的模型,在新的、具有相似任务的小规模数据集上进行微调。TensorFlow库提供了方便的接口,如`tf.keras.applications.AlexNet()`,可以直接加载预训练的AlexNet模型,并允许用户进行前向传播或对某些层进行修改和训练。 以下是使用AlexNet的基本步骤: 1. **导入模型**: ```python from tensorflow.keras.applications import AlexNet model = AlexNet(weights='imagenet') # 加载预训练权重 ``` 2. **冻结层**(如果不需要训练整个网络): ```python for layer in model.layers[:-10]: # 冻结除最后几层之外的层 layer.trainable = False ``` 3. **添加新层**(如果需要自定义输出): ```python new_output_layer = tf.keras.layers.Dense(units=...)(model.output) model = tf.keras.Model(inputs=model.input, outputs=new_output_layer) ``` 4. **编译和训练**(替换为新数据集): ```python model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=..., validation_data=(x_val, y_val)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值