当前位置: 首页 > news >正文

经典论文AlexNet


#pic_center =400x
系列文章:


文章目录

  • 研究背景
  • 研究意义
  • AlexNet 架构
    • 采用Relu激活
      • LRU
    • Overlapping Pooling
    • 总体体系结构
  • 减少过拟合
    • 数据增强
    • Dropout
  • 代码
    • 路径拼接
    • 图像处理问题
    • 加载模型


研究背景

CV数据集:

Mnist 图片大小28x28; 类别 10; 训练数据 50000; 测试数据 10000; 图片格式 Gray

Cifar-10 图片大小32x32; 类别 10; 训练数据50000; 测试数据10000; 图片 RGB
ILSVRC-2012图片大小100x100 ; 类别 1000; 训练数据50000; 测试数据10000; 图片 RGB
ImageNet数据集包含21841类别, 14197122张图片,ILSVR-2012的数据集是从ImageNet中获取的

研究意义

实现端到端:特征工程提取和分类集成一体。之前都是特征工程提取和分类是分开进行。
计算机视觉应用落地,如人脸识别,车辆检测等

pytorch 有专门的颜色扰动

AlexNet 架构

采用Relu激活

Relu优点

  1. 使网络训练更快
  2. 防止梯度消失/弥散
  3. 使网络具有稀疏性

LRU

Local Response Normalization
局部响应标准化:可以提高AlexNet泛化能力,该ieda受真实神经元侧抑制(lateral inhibition) 启发
侧抑制:当细胞分化为不同是,他会对周围细胞产生抑制信号,阻止它们襄相同方向分化,最终表现为细胞命运的不同
在这里插入图片描述
α , β , k , n 都是超参数 \alpha, \beta,k,n都是超参数 α,β,k,n都是超参数
在 i 的n/2 邻域半径内,半径不得超过边界 ( i − n / 2 < 0 , i + n / 2 > = N ) , (i-n/2<0, i+n/2>=N), (in/2<0,i+n/2>=N)
统计这些神经元平方和,对应位置出去平方和。如果某个神经元的值特别大,邻域内其他的神经元就会趋向0

Overlapping Pooling

相对于传统的no-overlapping pooling,采用Overlapping Pooling不仅可以提升预测精度,同时一定程度上可以减缓过拟合。

相比于正常池化(步长s=2,窗口z=2) 重叠池化(步长s=2,窗口z=3) 可以减少top-1, top-5分别为0.4% 和0.3%;重叠池化可以避免过拟合。
在这里插入图片描述

总体体系结构

在这里插入图片描述

在这里插入图片描述

减少过拟合

数据增强

两种数据增强:
两种数据增强方式

第一种:图像转换与水平映射。
在训练数据集上:从图像256x256中随机抽取224x224像素大小进行训练,训练数据集增长了2048,这样得到的图像是高度相关的

在测试数据集上:从源图像的上下左右+中间采取5张224x224大小的图片, 进行水平翻转(新的5张),最终得到10张图像
在这里插入图片描述

第二种方式就是PCA
PCA
PCA(主成分分析方法)

Dropout

多个不同模型结合起来能减小测试误差但是训练时间太长了。有一种非常有效的模型结合方式并且训练时间是原来的2倍。新的技术dropout:一0.5概率使得隐藏层的输出重置为0。重置为0的神经元不会进行前向传播、反向传播。每次给定输入,神经网络会对不同的体系结构进行采样,但是这些体系结构是共享权重的

在测试阶段,所有神经元的输出需要乘0.5 训练阶段使用dropout使得一半的输出为0,测试阶段 需要预测的值的几何平均值减小一半即乘0.5
使用dropout收敛所需的迭代次数是之前的两倍

AlexNet 论文深度讲解

代码

路径拼接

import os
#os.path.dirname(__file__)返回的是.py文件的目录
path1 = os.path.dirname(__file__)
print('path1',path1)
# path1 E:\code\deeplea\pytorchlearn\ForTest

#os.path.abspath(__file__)返回的是.py文件的绝对路径(完整路径)
path2 = os.path.abspath(__file__)
print('path2',path2)
# path2 E:\code\deeplea\pytorchlearn\ForTest\test.py

#组合使用
path3 = os.path.dirname(os.path.abspath(__file__))
print('path3',path3)
# path3 E:\code\deeplea\pytorchlearn\ForTest

#os.path.join()拼接路径
path4 = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test.py')
print('path4',path4)
# path4 E:\code\deeplea\pytorchlearn\ForTest\test.py
path_state_dict = os.path.join(BASE_DIR, "..", "data", "alexnet-owt-4df8aa71.pth")
    print(BASE_DIR)
    # E:\code\deeplea\pytorchlearn\learn\typepaper\A_alexnet\src
    print(path_state_dict)
    # E:\code\deeplea\pytorchlearn\learn\typepaper\A_alexnet\src\..\data\alexnet - owt - 4df8aa71.pth

图像处理问题

  • Resize 把给定的图片resize到给定大小
  • CenterCrop在图片的中间区域进行裁剪
  • ToTensor:convert a PIL image to tensor (HWC) in range [0,255] to a torch.Tensor(CHW) in the range [0.0,1.0]
  • Normalize
norm_mean = [0.485, 0.456, 0.406]
    norm_std = [0.229, 0.224, 0.225]
    inference_transform = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop((224, 224)),

        # [0, 255]/255 => [0,1]
        transforms.ToTensor(),
        transforms.Normalize(norm_mean, norm_std),
    ])

transforms.Compose()函数

 # path --> img
    img_rgb = Image.open(path_img).convert('RGB')

    # img --> tensor
    img_tensor = img_transform(img_rgb, inference_transform)
    img_tensor.unsqueeze_(0)        # chw --> bchw
    img_tensor = img_tensor.to(device)

img_tensor.unsqueeze_(0) 在0这个位置增加一维

def img_transform(img_rgb, transform=None):
    """
    将数据转换为模型读取的形式
    :param img_rgb: PIL Image
    :param transform: torchvision.transform
    :return: tensor
    """

    if transform is None:
        raise ValueError("找不到transform!必须有transform对img进行处理")

    img_t = transform(img_rgb)
    return img_t

加载模型

Pytorch搭建简单神经网络(三)——快速搭建、保存与提取

pred_int.cpu().numpy() 在GPU上的tensor格式数据不能直接转换为numpy, 需要先转换为cpu float-tensor随后转换为numpy格式。 numpy不能读取CUDA tensor格式数据,需要将它转换为CPU tensor
.detach().cpu().numpy()的作用

torch.max( ) 按照维度返回最大值及对应的索引

a = np.array([[11,22],[33,44]])
a = torch.tensor(a)
out_value,out_index = torch.max(a, dim=1)
print(out_value) #tensor([22, 44], dtype=torch.int32)
print( out_index) #tensor([1, 1])

torch.max()语法、用法以及例子

相关文章:

  • T1028:字符菱形(信息学一本通C++)
  • 投影仪竞争升级,卷完配置卷生态?
  • 关于我的本周目标
  • Go的Struct结构体和(Json Form tag)
  • 第十三届蓝桥杯JavaB组省赛F题——最大子矩阵 (AC)
  • 易观分析互联网+慢病管理生态洞察,助力行业升级
  • PIE-engine 教程 ——基于PIE-engine的水体频率变化长时序遥感监测自动计算平台
  • 第十三届蓝桥杯JavaB组国赛G题——背包与魔法 (AC)
  • Vue Admin Template关闭eslint校验,lintOnSave:false设置无效解决办法
  • MMpose初体验--多人姿态检测关键点检测
  • 【重识云原生】第六章容器6.4.2.2节——Pod使用(上)
  • T1023: Hello,World!的大小(信息学一本通C++)
  • 前端工程师4.0
  • 分别将Map以Key或Vale进行排序
  • Selenium之入门
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Brief introduction of how to 'Call, Apply and Bind'
  • canvas 五子棋游戏
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • echarts的各种常用效果展示
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JavaScript的使用你知道几种?(上)
  • maven工程打包jar以及java jar命令的classpath使用
  • redis学习笔记(三):列表、集合、有序集合
  • TypeScript实现数据结构(一)栈,队列,链表
  • 浮现式设计
  • 面试遇到的一些题
  • 如何实现 font-size 的响应式
  • 使用 @font-face
  • 我从编程教室毕业
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # Panda3d 碰撞检测系统介绍
  • ###C语言程序设计-----C语言学习(3)#
  • $refs 、$nextTic、动态组件、name的使用
  • (1)常见O(n^2)排序算法解析
  • (2)(2.10) LTM telemetry
  • (3)llvm ir转换过程
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (汇总)os模块以及shutil模块对文件的操作
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一)VirtualBox安装增强功能
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .Net Redis的秒杀Dome和异步执行
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .sys文件乱码_python vscode输出乱码
  • ??在JSP中,java和JavaScript如何交互?