第四章 分类任务

所有内容均来源于【李哥考研复试项目班】

一、AlexNet

1、 特征图维度变化

输入图片  3 * 244 * 244

                                                    输出                                        参数量

Conv2d(3, 64, 11, 4, 2)         (224-11+2*2)/4+1=55               64*3*11*11+64(偏置) =

                                              64 * 55 * 55                              23296

Pool(3, 2)                              64 * 27 * 27                               0

3个一pool,每次走两步

Conv2d(64, 192, 5, 1, 2)      (27-5+2*2)/1+1=27                   192*64*5*5+64=

                                             192 * 27 * 27                             307392

Pool(3, 2)                             192 * 13 * 13                             0

Conv2d(192, 384, 3, 1, 1)    (13-3+2*1)/1+1=13                   384*192*3*3+384=

                                             384 * 13 * 13                             663936

Conv2d(384, 256, 3, 1, 1)    (13-3+2*1)/1+1=13                    256*384*3*3+256=

                                             256 * 13 * 13                             884992

Conv2d(256, 256, 3, 1, 1)    (13-3+2*1)/1+1=13                   256*256*3*3*+256=

                                             256 * 13 * 13                             590080

Pool(3, 2)                             256 * 6 * 6                                 0

adaPool(6)                           256 * 6 * 6                                 0

拉直    256*6*6=9216个数

Linner(9216, 4096)              4096                                          9216*4096+4096=37752832

Linner(4096, 4096)              4096                                          4096*4096+4096=16781312

Linner(4096, 1000)              1000                                          4096*1000+1000=4097000

2、代码

import torch
import torchvision.models as models
import torch.nn as nn


class myAlexNet(nn.Module):
    def __init__(self, out_dim):
        super(myAlexNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, 11, 4, 2)
        # 定义了一个卷积层,3个输入通道,64个输出通道,卷积核大小为11x11,步长为4,填充为2
        self.pool1 = nn.MaxPool2d(3, 2)
        # 定义池化层,赤化窗口大小为3*3,步长为2

        self.conv2 = nn.Conv2d(64, 192, 5, 1, 2)
        self.pool2 = nn.MaxPool2d(3, 2)

        self.conv3 = nn.Conv2d(192, 384, 3, 1, 1)
        self.conv4 = nn.Conv2d(384, 256, 3, 1, 1)
        self.conv5 = nn.Conv2d(256, 256, 3, 1, 1)

        self.pool3 = nn.MaxPool2d(3, 2)
        self.pool4 = nn.AdaptiveAvgPool2d(6)

        self.fc1 = nn.Linear(9216, 4096)
        # 定义全连接层,将卷积层的
### 关于深度学习图片分类的教程和资源 #### 神经网络基础与应用实例 对于初学者来说,了解神经网络的基础知识至关重要。专项课程中的第一门课涵盖了神经网络的核心概念以及构建方法,包括如何创建并训练一个用于识别猫的小型深度神经网络案例[^1]。 #### 传统机器学习对比 在探讨深度学习之前,理解其相对于传统机器学习的优势也很重要。传统上,为了使计算机能够识别特定对象(如狗),开发者需手动定义一系列复杂的特征提取过程;而在现代深度学习框架下,则无需如此繁琐的人工干预,模型可以直接从原始像素值中自动学到有用的表示形式[^2]。 #### 实际操作指南 当准备动手实践时,可以从加载预训练好的GoogLeNet模型入手。这不仅提供了快速入门的机会,而且有助于熟悉常用的工具和技术栈。具体而言,在MATLAB环境中启动“深度网络设计器”,并通过该平台导入所需的架构文件[^3]。 #### 数据预处理的重要性 值得注意的是,在正式开始训练前还应重视数据的质量控制环节。特别是针对图像类任务,建议利用Python库PIL来进行初步筛选——任何无法正常打开或是存在明显缺陷的照片都应当被排除在外,以免影响最终效果[^4]。 ```python from PIL import Image def check_image_quality(image_path): try: img = Image.open(image_path) # 尝试打开图片 img.verify() # 验证图片完整性 return True # 如果成功则返回True except (IOError, SyntaxError) as e: print(f'Bad file: {image_path}') # 打印错误信息 return False # 否则返回False ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值