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

用pytorch实现Resnet

     ResNet(Residual Network)是一种深度卷积神经网络架构,由Kaiming He等人于2015年提出。它在计算机视觉领域引起了革命性的变革,使得训练更深的神经网络成为可能,超越了传统网络架构的限制。
     ResNet的主要创新在于残差学习的概念。传统神经网络存在梯度消失的问题,即随着梯度在多个层传播,其数值变得指数级小,从而阻碍了学习过程,限制了网络的有效训练深度。

      ResNet通过引入跳跃连接或快捷连接来解决这个问题。与直接拟合期望的映射不同,ResNet学习拟合残差映射,即期望输出与输入之间的差异。这些跳跃连接允许梯度直接在多个层之间流动,并缓解了梯度消失的问题。
       ResNet的核心构建块是残差块,它由两个卷积层、批归一化和ReLU激活函数组成。残差块接收输入张量,通过这些层,然后将输入张量和卷积层的输出相加。加法操作将原始输入与学到的残差相结合,创建了梯度流的快捷路径


    残差块

residual结构使用了一种shortcut的连接方式,也可理解为捷径。让特征矩阵隔层相加,注意F(X)和X形状要相同,所谓相加是特征矩阵相同位置上的数字进行相加

 残差块里首先有2个有相同输出通道数的3*3卷积层。 每个卷积层后接一个批量规范化层和ReLU激活函数。 然后我们通过跨层数据通路,跳过这2个卷积运算,将输入直接加在最后的ReLU激活函数前。 这样的设计要求2个卷积层的输出与输入形状一样,从而使它们可以相加。 如果想改变通道数,就需要引入一个额外的1*1卷积层来将输入变换成需要的形状后再做相加运算

 

import torch
import torch.nn as nn# Residual Block (Basic Building Block of ResNet)
class ResidualBlock(nn.Module):def __init__(self, in_channels, out_channels, stride=1):super(ResidualBlock, self).__init__()self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False)self.bn1 = nn.BatchNorm2d(out_channels)self.relu = nn.ReLU(inplace=True)self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False)self.bn2 = nn.BatchNorm2d(out_channels)self.shortcut = nn.Sequential()if stride != 1 or in_channels != out_channels:self.shortcut = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, bias=False),nn.BatchNorm2d(out_channels))def forward(self, x):residual = xout = self.conv1(x)out = self.bn1(out)out = self.relu(out)out = self.conv2(out)out = self.bn2(out)out += self.shortcut(residual)out = self.relu(out)return out# ResNet Architecture
class ResNet(nn.Module):def __init__(self, num_classes=1000):super(ResNet, self).__init__()self.in_channels = 64self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)self.bn1 = nn.BatchNorm2d(64)self.relu = nn.ReLU(inplace=True)self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)self.layer1 = self._make_layer(64, 3)self.layer2 = self._make_layer(128, 4, stride=2)self.layer3 = self._make_layer(256, 6, stride=2)self.layer4 = self._make_layer(512, 3, stride=2)self.avgpool = nn.AdaptiveAvgPool2d((1, 1))self.fc = nn.Linear(512, num_classes)def _make_layer(self, out_channels, num_blocks, stride=1):layers = []layers.append(ResidualBlock(self.in_channels, out_channels, stride))self.in_channels = out_channelsfor _ in range(1, num_blocks):layers.append(ResidualBlock(out_channels, out_channels))return nn.Sequential(*layers)def forward(self, x):out = self.conv1(x)out = self.bn1(out)out = self.relu(out)out = self.maxpool(out)out = self.layer1(out)out = self.layer2(out)out = self.layer3(out)out = self.layer4(out)out = self.avgpool(out)out = torch.flatten(out, 1)out = self.fc(out)return out# Create an instance of the ResNet model
model = ResNet(num_classes=1000)# Print the model architecture
print(model)

 ResNet通常由多个堆叠的残差块组成,深度逐渐增加。网络架构包括不同的变体,如ResNet-18、ResNet-34、ResNet-50、ResNet-101和ResNet-152,其中数字表示网络中总层数。较深的变体在图像分类、目标检测和分割等各种计算机视觉任务中表现出更好的性能。
ResNet的一个显著优势是可以训练非常深的网络而不降低性能。它使得可以训练超过100层的网络,同时仍然保持准确性和收敛性。此外,跳跃连接使得轻松实现恒等映射,意味着可以将浅层网络转变为更深的网络而不降低性能。
      ResNet对深度学习领域产生了重大影响,并成为各种计算机视觉应用中广泛采用的架构。它的残差学习概念也启发了其他使用跳跃连接的架构的发展,如DenseNet和Highway Networks。

 

 

相关文章:

用pytorch实现Resnet

ResNet(Residual Network)是一种深度卷积神经网络架构,由Kaiming He等人于2015年提出。它在计算机视觉领域引起了革命性的变革,使得训练更深的神经网络成为可能,超越了传统网络架构的限制。 ResNet的主要创新在于…...

C++类成员的访问权限以及类的封装

C通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。 Java、C# 程序员注意,C 中的 publ…...

Linux 多线程解决客户端与服务器端通信

一、一个服务器端只能和一个客户端进行通信&#xff08;单线程模式&#xff09; 客户端代码ser.c如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/socket.h> #include<netinet…...

FMX的TListBox单选列表框

TListBox功能比较全&#xff0c;对于选择项&#xff0c;有“两种”模式&#xff0c;一种就是ListItem选中&#xff08;界面上就是焦点和颜色变化&#xff09;&#xff0c;可以无&#xff0c;单选和多选。另一种是通过CheckBox来选择ListItem的选中。默认下&#xff0c;ShowChec…...

prompt工程(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 我准备想办法把这些东西整合到我的ScholarEase项目里。到时候按照分类、按照prompt生成方法列一堆选项&#xff0c;用户自己生成prompt后可以选择在ScholarEase里面聊天&#xff0c;也可以复制到别的地方&#xff08;比如ChatGPT网页版之类的&a…...

win11 docker-desktop安装记录

win11安装Docker踩坑实录 马上开始正式工作了&#xff0c;需要用到docker&#xff0c;以前在win10上安装过&#xff0c;新电脑是win11&#xff0c;心想肯定会遇到坑&#xff0c;就浅浅记录一下 首先看一下安装要求 需要wsl2 那么就先进行 wsl的更新 wsl --update注意这里网络…...

opencv特征提取、梯度计算

...

AI绘画工具MJ新功能有点东西,小白也能轻松一键换装

先看最终做出来的效果 直接来干货吧。Midjourney&#xff0c;下面简称MJ 1.局部重绘功能来袭 就在前两天&#xff0c;MJ悄咪咪上线了这个被众人期待的新功能&#xff1a;局部重绘。 对于那些追求创新和个性化的设计师来说&#xff0c;局部绘制不仅是一个实用的功能&#xff…...

java springboot sql防注入的6种方式

​在Spring Boot中&#xff0c;可以通过使用参数绑定、预处理语句和使用ORM框架等方式来防止SQL注入。以下是几种常见的方式&#xff1a; 1. 参数绑定&#xff1a;通过使用参数绑定&#xff0c;将用户输入的数据作为参数传递给SQL语句&#xff0c;而不是将其直接拼接到SQL语句中…...

深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用,该项目就像是一只智慧而敏锐的眼睛,专注地凝视着汽车世界。这个项目使用PyTorch作为强有力的工具,提供了一个深度学习的舞台,让我们能够设计和训练一个…...

Open3D(C++) 可视化(3)——批量动态可视化点云

目录 一、概述二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 拿到一个新的点云数据集,想要快速查看数据集内点云的形状特征。然而,对于动辄几千个点云的数据集而言,逐个将点云拖入…...

opencv 文档识别+UI界面识别系统

目录 一、实现和完整UI视频效果展示 主界面&#xff1a; 识别结果界面&#xff1a; 查看处理图片过程&#xff1a; 查看历史记录界面&#xff1a; 二、原理介绍&#xff1a; 将图像变换大小->灰度化->高斯滤波->边缘检测 轮廓提取 筛选第三步中的轮廓&#xf…...

下|税收大数据应用研究

上文呢&#xff0c;对于税收大数据我们已经对它有了一定程度的认知。下篇呢&#xff0c;就研究一下应用方面有哪些优势和存在的不足之处。 一、税收大数据应用的优势 1.提升征管效率和预测准确率 税收部门通过收集、分析海量数据。并建立数据分析模型来提升效率和准确率。税…...

数据库连接池druid 的jar包官网下载-最新版下载

进入官网Central Repository: com/alibaba/druid 往下滑 找到最新版点击进入 找到该jar包 点击即可下载...

2023河南萌新联赛第(六)场:河南理工大学 C - 旅游

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学 C - 旅游 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 小C喜欢旅游&#xf…...

Java | IDEA中Netty运行多个client的方法

想要运行多个client但出现这种提示&#xff1a; 解决方法 1、打开IDEA&#xff0c;右上角找到下图&#xff0c;并点击 2、勾选...

【蓝桥杯】 [蓝桥杯 2015 省 A] 饮料换购

原题链接&#xff1a;https://www.luogu.com.cn/problem/P8627 1. 题目描述 2. 思路分析 小伙伴们如果没有思路可以看看这篇文章~&#xff08;这里很详细讲解了三种方法&#xff01;&#xff09; https://blog.csdn.net/m0_62531913/article/details/132385341?spm1001.2014…...

操作系统-笔记-第三章-内存管理

&#x1f338;章节汇总 一、第一章——操作系统的概念 二、第二章——【进程】 二、第二章——【线程】​编辑 二、第二章——【进程调度】 二、第二章——【进程同步与互斥】 二、第二章——【锁】 三、第三章——内存管理 四、第四章——文件管理 五、第五章——输入输出管理…...

详解单体架构和微服务(概念,优缺点和区别)

单体架构和微服务 单体架构和微服务架构区别&#xff1f;为什么要用微服务架构&#xff1f; 单体架构的整个系统是一个War包&#xff0c;即war包走天下。微服务架构的项目是很多个war包&#xff08;一个子系统一个&#xff09;。 单体架构的优点: 架构简单开发测试部署简单…...

储能运行约束的Matlab建模方法

最近一段时间有很多人问我最优潮流计算中储能系统的建模方法。部分朋友的问题我回复了&#xff0c;有些没有回消息的&#xff0c;我就不再一一回复了&#xff0c;在这里我写一篇博客统一介绍一下。 1.储能系统介绍 首先&#xff0c;让【GPT】简单介绍一下储能系统&#xff1a;…...

跨平台实战:Windows QGC与Linux JMAVSim模拟器的局域网联调

1. 环境准备与基础概念 在开始跨平台联调之前&#xff0c;我们需要先理解几个关键组件的作用。QGroundControl&#xff08;QGC&#xff09;是无人机领域最流行的开源地面站软件&#xff0c;相当于无人车的"方向盘"&#xff1b;而PX4 JMAVSim则是基于Java开发的轻量级…...

工程定制丙级管道井门 物业机房通用款式

工程定制丙级管道井门&#xff0c;作为高层住宅、商业楼宇、物业机房强弱电井的专用消防配套设施&#xff0c;严格遵循国标消防规范生产&#xff0c;是建筑管井防火分隔、安全防护的核心产品。这款丙级管道井门采用钢制一体成型工艺&#xff0c;结构扎实不易变形&#xff0c;具…...

Boss-Key:办公隐私保护神器,一键隐藏敏感窗口的智能解决方案

Boss-Key&#xff1a;办公隐私保护神器&#xff0c;一键隐藏敏感窗口的智能解决方案 【免费下载链接】Boss-Key 老板来了&#xff1f;快用Boss-Key老板键一键隐藏静音当前窗口&#xff01;上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在当今…...

5分钟完整指南:Sabaki围棋软件打造专业级对弈环境

5分钟完整指南&#xff1a;Sabaki围棋软件打造专业级对弈环境 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki Sabaki是一款优雅的围棋棋盘和SGF编辑器&#xff0c;专为追求…...

Vigil与其他监控工具集成:构建全方位监控体系的3种方案

Vigil与其他监控工具集成&#xff1a;构建全方位监控体系的3种方案 【免费下载链接】vigil &#x1f6a6; Microservices Status Page. Monitors a distributed infrastructure and sends alerts (Slack, SMS, etc.). 项目地址: https://gitcode.com/gh_mirrors/vig/vigil …...

如何用RPG Maker多层级视差地图插件创建专业级游戏场景?

如何用RPG Maker多层级视差地图插件创建专业级游戏场景&#xff1f; 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV RPG Maker多层级视差地图插件是一个功能强大的开源工具&#xf…...

别再手动整理PDF了!用Zotero+坚果云打造你的免费文献同步工作流

Zotero与坚果云联动&#xff1a;构建无缝文献管理生态系统的终极指南 科研工作者和学生群体常面临一个普遍困境&#xff1a;如何在多台设备间高效同步和管理海量文献资料&#xff1f;传统的手动复制粘贴或依赖收费云服务不仅效率低下&#xff0c;还存在版本混乱的风险。本文将深…...

别再只盯着JWT了!手把手教你用Python解密JWE Token(附完整代码)

深入实战&#xff1a;用Python解密JWE Token的全流程指南 在当今的Web应用开发中&#xff0c;Token已成为身份验证和授权的主流方式。大多数开发者对JWT&#xff08;JSON Web Token&#xff09;已经相当熟悉&#xff0c;能够轻松地在jwt.io等工具上解码和验证。然而&#xff0c…...

从零到一:在Linux上构建USRP与GNU Radio的完整信号处理工坊

1. 环境准备&#xff1a;打造你的信号处理工坊基础 搭建信号处理工坊就像装修新房&#xff0c;得先打好地基。我强烈推荐使用Ubuntu 20.04 LTS系统&#xff0c;这个版本不仅稳定&#xff0c;而且社区支持完善。记得第一次尝试时用了最新版系统&#xff0c;结果各种依赖冲突让我…...

不止于置顶:挖掘AfloatX的隐藏玩法,调节窗口透明度让你的Mac工作流更沉浸

不止于置顶&#xff1a;挖掘AfloatX的隐藏玩法&#xff0c;调节窗口透明度让你的Mac工作流更沉浸 当大多数Mac用户还在用分屏功能机械地排列窗口时&#xff0c;一小群效率极客已经通过窗口透明度调节构建出三维工作空间。AfloatX这款免费工具提供的不仅是基础的置顶功能&#x…...