resnet50网络结构_ResNet50复现笔记
零、复现参考图:
一、残差结构
Residual net(残差网络)
将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入部分。
意味着后面的特征层的内容会有一部分由其前面的某一层线性贡献。
深度残差网络的设计是为了克服由于网络深度加深而产生的学习效率变低与准确率无法有效提升的问题。
二、ResNet50模型基本构成
ResNet50有两个基本的块,分别名为Conv Block和Identity Block
Conv Block输入和输出的维度(通道数和size)是不一样的,所以不能连续串联,它的作用是改变网络的维度;
Identity Block输入维度和输出维度(通道数和size)相同,可以串联,用于加深网络的。
Conv Block结构
Identity Block的结构
三、总体的网络结构
四、代码复现
1.导库
import torch
from torch import nn
2.写Block类
'''Block的各个plane值:inplane:输出block的之前的通道数midplane:在block中间处理的时候的通道数(这个值是输出维度的1/4)midplane*self.extention:输出的维度
'''
class Bottleneck(nn.Module):#每个stage中维度拓展的倍数extention=4#定义初始化的网络和参数def __init__(self,inplane,midplane,stride,downsample=None):super(Bottleneck,self).__init__()self.conv1=nn.Conv2d(inplane,midplane,kernel_size=1,stride=stride,bias=False)self.bn1=nn.BatchNorm2d(midplane)self.conv2=nn.Conv2d(midplane,midplane,kernel_size=3,stride=1,padding=1,bias=False)self.bn2=nn.BatchNorm2d(midplane)self.conv3=nn.Conv2d(midplane,midplane*self.extention,kernel_size=1,stride=1,bias=False)self.bn3=nn.BatchNorm2d(midplane*self.extention)self.relu=nn.ReLU(inplace=False)self.downsample=downsampleself.stride=stridedef forward(self,x):#参差数据residual=x#卷积操作out=self.relu(self.bn1(self.conv1(x)))out=self.relu(self.bn2(self.conv2(out)))out=self.relu(self.bn3(self.conv3(out)))#是否直连(如果时Identity block就是直连;如果是Conv Block就需要对参差边进行卷积,改变通道数和size)if(self.downsample!=None):residual=self.downsample(x)#将参差部分和卷积部分相加out+=residualout=self.relu(out)return out
3.写Resnet结构
class ResNet(nn.Module):#初始化网络结构和参数def __init__(self,block,layers,num_classes=1000):#self.inplane为当前的fm的通道数self.inplane=64super(ResNet,self).__init__()#参数self.block=blockself.layers=layers#stem的网络层self.conv1=nn.Conv2d(3,self.inplane,kernel_size=7,stride=2,padding=3,bias=False)self.bn1=nn.BatchNorm2d(self.inplane)self.relu=nn.ReLU()self.maxpool=nn.MaxPool2d(kernel_size=3,padding=1,stride=2)#64,128,256,512是指扩大4倍之前的维度,即Identity Block的中间维度self.stage1=self.make_layer(self.block,64,self.layers[0],stride=1)self.stage2=self.make_layer(self.block,128,self.layers[1],stride=2)self.stage3=self.make_layer(self.block,256,self.layers[2],stride=2)self.stage4=self.make_layer(self.block,512,self.layers[3],stride=2)#后续的网络self.avgpool=nn.AvgPool2d(7)self.fc = nn.Linear(512 * block.extention, num_classes)def forward(self,x):#stem部分:conv+bn+relu+maxpoolout=self.conv1(x)out=self.bn1(out)out=self.relu(out)out=self.maxpool(out)#blockout=self.stage1(out)out=self.stage2(out)out=self.stage3(out)out=self.stage4(out)#分类out=self.avgpool(out)out = torch.flatten(out, 1)out=self.fc(out)return outdef make_layer(self,block,midplane,block_num,stride=1):'''block:block模块midplane:每个模块中间运算的维度,一般等于输出维度/4block_num:重复次数stride:Conv Block的步长'''block_list=[]#先计算要不要加downsample模块downsample=Noneif(stride!=1 or self.inplane!=midplane*block.extention):downsample=nn.Sequential(nn.Conv2d(self.inplane,midplane*block.extention,stride=stride,kernel_size=1,bias=False),nn.BatchNorm2d(midplane*block.extention))#Conv Blockconv_block=block(self.inplane,midplane,stride=stride,downsample=downsample)block_list.append(conv_block)self.inplane=midplane*block.extention#Identity Blockfor i in range(1,block_num):block_list.append(block(self.inplane,midplane,stride=1))return nn.Sequential(*block_list)
4.调用
resnet = ResNet(Bottleneck, [3, 4, 6, 3])
x=torch.randn(1,3,224,224)
x=resnet(x)
print(x.shape)
参考:https://blog.csdn.net/weixin_44791964/article/details/102790260
复现之后resnet的图:
链接: https://pan.baidu.com/s/1pazTBDtVMb68tECRR1sM4Q 密码: ps9c
复现之后resnet的代码:
链接: https://pan.baidu.com/s/1SKfgCnx_excnc-AzvfK8IQ 密码: fi1w
resnet50网络结构_ResNet50复现笔记相关推荐
- resnet50网络结构_Resnet50详解与实践(基于mindspore)
1. 简述 Resnet是残差网络(Residual Network)的缩写,该系列网络广泛用于目标分类等领域以及作为计算机视觉任务主干经典神经网络的一部分,典型的网络有resnet50, resne ...
- resnet50网络结构_学习笔记(一):分析resnet源码理解resnet网络结构
最近在跑实验的过程中一直在使用resnet50和resnet34,为了弄清楚网络的结构和原理的实现,打开resnet的源码进行了学习. 残差网络学习的原理 针对神经网络过深而导致的学习准确率饱和甚至是 ...
- Attentional Factorization Machine(AFM)复现笔记
声明:本模型复现笔记记录自己学习过程,如果有错误请各位老师批评指正. 之前学习了很多关于特征交叉的模型比如Wide&Deep.Deep&Cross.DeepFM.NFM. 对于特征工程 ...
- WideDeep Model、Wide Model(LR)、Deep Model、DeepFm Model、NFM Model复现笔记
声明:本模型复现笔记记录自己学习过程,如果有错误请各位老师批评指正. 本周复现了Wide&Deep Model.Wide Model.Deep Model.DeepFm Model.NFM M ...
- PaddleDetection复现笔记
PaddleDetection复现笔记 (1) PP-Tracking_GUi step1:准备环境 step2:准备模型 step3:运行 (2) PP-Tracking step1:准备环境 st ...
- 【Muduo复现笔记】 PingPong测试程序
[Muduo复现笔记] PingPong测试程序 pingpong_server void onConnection(const TcpConnectionPtr& conn) 将新连接con ...
- 禅道linux一键安装漏洞,禅道全版本rce漏洞复现笔记
禅道全版本rce漏洞复现笔记 漏洞说明 禅道项目管理软件是一款国产的,基于LGPL协议,开源免费的项目管理软件,它集产品管理.项目管理.测试管理于一体,同时还包含了事务管理.组织管理等诸多功能,是中小 ...
- Trackformer复现笔记
Trackformer复现笔记 前言 因毕设需要进行一下记录 一.python版本 建议使用python 3.7.1,源代码是基于python 3.7进行编写 二.pip 1.lap依赖 这个依赖需要 ...
- resnet50网络结构_识别准确率从76.5%到82.4%的ResNet50系列图像分类模型养成之路
简介 ResNet系列模型是在2015年提出的,一举在ILSVRC2015比赛,也就是著名的ImageNet图像分类挑战赛中取得冠军,因此ResNet的作者摘得CVPR2016最佳论文奖,其中resn ...
最新文章
- 程序可以在硬件之间发送吗_你知道硬件、软件工程师之间,还有一个固件工程师吗?...
- 网站内链的6大常见形式你了解多少?
- 成为大厂AI算法工程师,“NLP/CV”都是你必须过的坎!
- boost::mpl模块实现list相关的测试程序
- Exhaustive Search Aizu - ALDS1_5_A
- STL源码剖析 heap堆结构
- oracle 对象仕途,“事业型”凤凰男为了仕途不顾家,妻子的选择让他措手不及...
- 2款QQ空间首页好看的psd源码
- 证券secuerity英语
- npm常用命令(持续更新)
- 从码农到工程师:只要做到这6点
- windows下开源免费waf防火墙,附可用资源包
- Vdbench的校验原理
- 大数据开源框架技术汇总
- 跳槽、换房、不忘输出,与你分享我匆忙的 2022~
- 强大合作伙伴生态系统助力 Denodo 在大中华区不断发展壮大
- 云南新开普一脸通解决方案、医院智慧餐饮一卡通、高校一脸通解决方案
- 欧几里得+扩展欧几里得+RSA
- typecho category.php,typecho主题制作
- java计算机毕业设计个性化推荐的扬州农业文化旅游管理平台源程序+mysql+系统+lw文档+远程调试