pytorch-16 复现经典网络:LeNet5与AlexNet

一、相关概念

对于(10,3,227,227)数据表示,10张3通道的图,图的大小(特征数)为227*227.
通道数:作为卷积的输入通道数和输出通道数。
特征数:特征图的大小
步长stride和填充padding:线性减小特征图的尺寸
池化pooling:非线性且高效减小特征图的尺寸
计算公式:hout = (hin +2p -k) /s +1

二、LeNet5:现代CNN的奠基者

LeNet的核心思想“卷积+池化+线性”。在PyTorch中实现其架构的代码如下:在这里插入图片描述

import torch
from torch import nn
from torch.nn import functional as F
from torchinfo import summarydata = torch.ones(size=(10,1,32,32))class Model(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(1,6,5) #(H+2p-K)/S + 1self.pool1 = nn.AvgPool2d(kernel_size=2,stride=2)self.conv2 = nn.Conv2d(6,16,5)self.pool2 = nn.AvgPool2d(2)self.fc1 = nn.Linear(5*5*16,120)self.fc2 = nn.Linear(120,84)def forward(self,x):x = F.tanh(self.conv1(x))x = self.pool1(x)x = F.tanh(self.conv2(x))x = self.pool2(x)x = x.view(-1,5*5*16) #-1,我不关心-1这个位置上的数是多少,你根据我输入的x的结构帮我自己计算吧x = F.tanh(self.fc1(x))output = F.softmax(self.fc2(x),dim=1) #(samples, features)net = Model() #实例化
net(data)  #相当于在执行 net.forward(data) net = Model() #实例化
summary(net, input_size=(10,1,32,32))

结果显示:

==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
Model                                    --                        --
├─Conv2d: 1-1                            [10, 6, 28, 28]           156
├─AvgPool2d: 1-2                         [10, 6, 14, 14]           --
├─Conv2d: 1-3                            [10, 16, 10, 10]          2,416
├─AvgPool2d: 1-4                         [10, 16, 5, 5]            --
├─Linear: 1-5                            [10, 120]                 48,120
├─Linear: 1-6                            [10, 84]                  10,164
==========================================================================================
Total params: 60,856
Trainable params: 60,856
Non-trainable params: 0
Total mult-adds (M): 4.22
==========================================================================================
Input size (MB): 0.04
Forward/backward pass size (MB): 0.52
Params size (MB): 0.24
Estimated Total Size (MB): 0.81
==========================================================================================

三、AlexNet:从浅层到深度

AlexNet的架构若用文字来表现,则可以
打包成4个组合:
输入→(卷积+池化)→(卷积+池化)→(卷积x3+池化)→(线性x3)→输出
相对的,LeNet5的架构可以打包成3个组合:
输入→(卷积+池化)→(卷积+池化)→(线性x2)→输出在这里插入图片描述
和只有6层(包括池化层)的LeNet5比起来,AlexNet主要做出了如下改变:
1、相比之下,卷积核更小、网络更深、通道数更多,这代表人们已经认识到了图像数据天生适合于多次
提取特征,“深度”才是卷积网络的未来。LeNet5是基于MNIST数据集创造,MNIST数据集中的图片尺寸
大约只有30*30的大小,LeNet5采用了5x5的卷积核,图像尺寸/核尺寸大约在6:1。而基于ImageNet
数据集训练的AlexNet最大的卷积核只有11x11,且在第二个卷积层就改用5x5,剩下的层中都使用3x3
的卷积核,图像尺寸/核尺寸至少也超过20:1。小卷积核让网络更深,但也让特征图的尺寸变得很小,
为了让信息尽可能地被捕获,AlexNet也使用了更多的通道。小卷积核、多通道、更深的网络,这些都
成为了卷积神经网络后续发展的指导方向。
2、使用了ReLU激活函数,摆脱Sigmoid与Tanh的各种问题。
3、使用了Dropout层来控制模型复杂度,控制过拟合。
4、引入了大量传统或新兴的图像增强技术来扩大数据集,进一步缓解过拟合。
5、使用GPU对网络进行训练,使得“适当的训练“(proper training)成为可能。

1、AlexNet的架构复现

在PyTorch中来复现AlexNet的架构:

import torch
from torch import nn
from torch.nn import functional as Fdata = torch.ones(size=(10,3,227,227)) #224 x 224class Model(nn.Module):def __init__(self):super().__init__()# 大卷积核、较大的步长、较多的通道# 为了处理尺寸较大的原始图片,先使用11x11的卷积核和较大的步长来快速降低特征图的尺寸# 同时,使用比较多的通道数,来弥补降低尺寸造成的数据损失self.conv1 = nn.Conv2d(3,96, kernel_size=11, stride=4)self.pool1 = nn.MaxPool2d(kernel_size=3, stride=2) #overlap pooling#卷积核、步长恢复正常大小,进一步扩大通道# 已经将特征图尺寸缩小到27x27,计算量可控,可以开始进行特征提取了# 卷积核、步长恢复到业界常用的大小,进一步扩大通道来提取数据self.conv2 = nn.Conv2d(96,256,kernel_size=5,padding=2)self.pool2 = nn.MaxPool2d(kernel_size=3, stride=2)# 疯狂提取特征,连续用多个卷积层# kernel 5, padding 2, kernel 3, padding 1 可以维持住特征图的大小self.conv3 = nn.Conv2d(256,384,kernel_size=3, padding =1) self.conv4 = nn.Conv2d(384,384,kernel_size=3, padding =1)self.conv5 = nn.Conv2d(384,256,kernel_size=3, padding =1)self.pool3 = nn.MaxPool2d(kernel_size=3, stride=2)# 进入全连接层,进行信息汇总self.fc1 = nn.Linear(6*6*256,4096) #上层所有特征图上的所有像素self.fc2 = nn.Linear(4096,4096)self.fc3 = nn.Linear(4096,1000)def forward(self,x):x = F.relu(self.conv1(x))x = self.pool1(x)x = F.relu(self.conv2(x))x = self.pool2(x)x = F.relu(self.conv3(x))x = F.relu(self.conv4(x))x = F.relu(self.conv5(x))x = self.pool3(x)x = x.view(-1,6*6*256)  #将数据拉平x = F.dropout(x,p=0.5)                      #dropout:随机让50%的权重为0x = F.relu(F.dropout(self.fc1(x),p=0.5))    #dropout:随机让50%的权重为0 x = F.relu(self.fc2(x))output = F.softmax(self.fc3(x),dim=1)net = Model()
net(data)from torchinfo import summary
summary(net,input_size=(10,3,227,227))

结果显示:

==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
Model                                    --                        --
├─Conv2d: 1-1                            [10, 96, 55, 55]          34,944
├─MaxPool2d: 1-2                         [10, 96, 27, 27]          --
├─Conv2d: 1-3                            [10, 256, 27, 27]         614,656
├─MaxPool2d: 1-4                         [10, 256, 13, 13]         --
├─Conv2d: 1-5                            [10, 384, 13, 13]         885,120
├─Conv2d: 1-6                            [10, 384, 13, 13]         1,327,488
├─Conv2d: 1-7                            [10, 256, 13, 13]         884,992
├─MaxPool2d: 1-8                         [10, 256, 6, 6]           --
├─Linear: 1-9                            [10, 4096]                37,752,832
├─Linear: 1-10                           [10, 4096]                16,781,312
├─Linear: 1-11                           [10, 1000]                4,097,000
==========================================================================================
Total params: 62,378,344
Trainable params: 62,378,344
Non-trainable params: 0
Total mult-adds (G): 11.36
==========================================================================================
Input size (MB): 6.18
Forward/backward pass size (MB): 52.74
Params size (MB): 249.51
Estimated Total Size (MB): 308.44
==========================================================================================

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三相电子负载:行业前沿

三相电子负载是模拟电网中实际负载的装置,主要用于电源、电机、变压器等产品的测试和老化。随着科技的发展,三相电子负载在电力、通信、汽车电子、新能源等领域的应用越来越广泛,成为行业前沿技术之一。 三相电子负载在电源行业的应用非常广泛…

聚会活跃气氛神器小程序源码系统 各种小游戏 让聚会不再冷场 带源代码包以及安装搭建教程

系统概述 在社交聚会中,如何让气氛活跃起来一直是一个让人关注的问题。小编给大家分享一款聚会活跃气氛神器小程序源码系统。它不仅提供了丰富多样的小游戏,还带有源代码包和详细的安装搭建教程,让你轻松打造属于自己的聚会互动平台。 代码…

Qt 项目(CMake)支持多国语言(2024/05)

目录 1.在工程手动创建languages文件夹2.修改CMakeLists.txt3.在qml上随便添加一下文字内容4.执行CMake 参考:Qt 项目(CMake)设置国际化支持 1.在工程手动创建languages文件夹 2.修改CMakeLists.txt set(TS_FILES"${CMAKE_SOURCE_DIR}/languages/aidi_zh_CN.ts"&qu…

超声波清洗机哪家好一点?四款无比卓越精品不可错过

在日常生活中,眼镜成为了我们不可或缺的伙伴,无论是阅读书籍、工作还是享受自然风光,清晰的视野总是至关重要。然而,眼镜上不可避免地会沾染灰尘、油脂甚至细菌,影响我们的视觉体验。传统的眼镜清洗方法虽然简单&#…

Python使用MQTT连接新版ONENet

Python MQTT 连接新版ONENet 简介 前几个教程我们使用mqtt.fx连接了新版的ONENet, 只是跑通了MQTT协议,但是在实际操作下还需要实现具体环境、具体设备的MQTT连接,本章教程将以Python MQTT的方式连接 ONENet 参考文档: paho-mqtt PyPI …

数据结构 顺序表

目录 1. 什么是数据结构?2. 顺序表2.1 线性表2.2 顺序表 3. 动态顺序表的实现 正文开始 1. 什么是数据结构? 在学习顺序表前,我们先来了解一下什么是数据结构:数据结构是计算机存储、组织数据的方式,具有一定逻辑关系…

用了那么久的可道云teamOS,居然才发现这个隐藏的功能:一键存图,无需下载

在日常的工作或学习中,我们在遇到喜欢的图片时,总会想要保存下来以备后用。 然而,传统的图片保存方式通常需要我们右键另存为,或者复制链接、打开下载工具,甚至可能需要跳转到其他应用或网页才能完成下载。 存在电脑本…

数据整理的Compact流程 (二)|OceanBase数据转储合并技术解读(二)

上篇文章《数据整理的Compact流程 (一)|OceanBase数据转储合并技术解读(二)》中,有讲解到,在OceanBase数据库中,当MemTable写满时,将其下刷到Mini SSTable的过程包含两个…

ubuntu移动硬盘重命名

因为在ubuntu上移动硬盘的名字是中文的,所以想要改成英文的。 我的方法: 将移动硬盘插到windows上,直接右键重命名。再插到ubuntu上名字就改变了。 别人的方法: ubuntu下如何修改U盘名字-腾讯云开发者社区-腾讯云 在自带的软件…

盘点10大灵动惊艳小演员❗谁是你的心头好?

盘点国内影视那些惊艳观众的小演员们无疑为影视作品注入了新的活力。以下是10个备受赞誉的小演员: 1.韩昊霖:凭借在《我和我的祖国》和《庆余年》中的出色表现 韩昊霖的演技赢得了观众和业界的广泛认可 他能够准确地把握角色的情感和细节,展…

雷达基数据绘制成雷达图

x波段雷达基数据绘制成雷达图 1.雷达基数据格式Z_RADR_I_ZR001_20240521020002_O_DOR_YLD2-D_CAP_FMT.bin.bz2 2.基数据读取 python f StandardData(i) # 新版本标准数据radarTime f.scantime # 获取雷达时次date_str radarTime.strftime(%Y-%m-%d %H:%M:%S)date_str d…

832. 翻转图像 - 力扣

1. 题目 给定一个 n x n 的二进制矩阵 image ,先 水平 翻转图像,然后 反转 图像并返回 结果 。 水平翻转图片就是将图片的每一行都进行翻转,即逆序。 例如,水平翻转 [1,1,0] 的结果是 [0,1,1]。 反转图片的意思是图片中的 0 全部被…

一.ffmpeg 将内存中的H264跟PCM 数据流合成多媒体文件

在有一些嵌入式平台中,H264数据流一般来自芯片内部的硬编码器, AAC音频数据则是通过采集PCM进行软编码,但是如何对它实时进行封装多媒体文件 ,参考ffmpeg example,花了一些时间终于实现了该功能。 流程图如下&#xf…

【Pandas】深入解析`pd.read_pickle()`函数

【Pandas】深入解析pd.read_pickle()函数 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓 博主简介&…

Ora-32004错误处理

问题现象 处理方法 观察alert会发现报错的参数在加载spfile的阶段 按照mos的方法对其reset 重新启动无报错 观察日志无报错

ora-00392 ora-00312错误处理

检查当前日志组状态 对日志组进行clear操作 重新开库无报错

java的变量关系~使用和扩展

一、变量的概述 1、什么是变量 白话:变量就是一个装东西的盒子。 通俗:变量是用于存放数据的容器。我们通过变量名 获取数据,甚至数据可以修改。 2、变量在内存中的存储 本质:变量是程序在内存中申请的一块用来存放数据的空间,类似我们酒店的房间&a…

C++ (week5):Linux系统编程3:线程

文章目录 三、线程1.线程的基本概念①线程相关概念②我的理解 2.线程的基本操作 (API)(1)获取线程的标识:pthread_self(2)创建线程:pthread_create()(3)终止线程①pthread_exit():当前线程终止,子线程主动退出②pthread_cancel()&…

OrangePi AIpro(8T) 基本介绍和资料汇总

OrangePi AIpro 基本介绍和资料汇总 1 介绍1.1 香橙派(Orange Pi) 公司概述1.2 OrangePi AIpro(8T) 介绍概述硬件规格参数引脚图产品详细图芯片优缺点优点 2 资料汇总2.1 官方资料概述资料下载 参考 1 介绍 1.1 香橙派(Orange Pi) 公司概述 香橙派(Orange Pi&…

惊喜:我一晚上赚了10万!深扒挖瑞幸1.8亿起死回生的商业真相

■ ■ ■ ■ 瑞幸咖啡 2020年1月,浑水报告发出后,瑞幸股价一路颠簸,最终退市停牌。 然而,19个月后,在粉单市场股价再次增长781.16% 暴雷后的19个月,瑞幸经历了怎样的起死回生? 2020年4月2日…