PyTorch实现ResNet

pytorch实践(更改resnet50全连接层,重新训练,用于二分类) 背景交代(很杂乱,可跳过): 最开始的目的是完成和SAN论文里一样,用把四种风格图片当做四种标签,在原来的权重基础上,整体重新训练resnet50两轮(原文中是resnet101),下图为resnet网络结构 改变了最后的全连接层,从头开始重新训练,结果不太对,训练日志部分如下,一直不是等于100就是0 Training dir : D:\postgraduate\major_rela... 阅读详情
import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
import torch.nn.functional as F

定义残差模块

def conv3x3(in_channel, out_channel, stride=1):
    return nn.Conv2d(in_channel, out_channel, 3, stride=stride, padding=1, bias=False)
class residual_block(nn.Module):
    def __init__(self, in_channel, out_channel, same_shape=True):
        super(residual_block,self).__init__()
        self.same_shape = same_shape
        stride = 1 if self.same_shape else 2
        
        self.conv1 = conv3x3(in_channel, out_channel, stride=stride)
        self.bn1 = nn.BatchNorm2d(out_channel)
        
        self.conv2 = conv3x3(out_channel, out_channel)
        self.bn2 = nn.BatchNorm2d(out_channel)
        if not self.same_shape:
            self.conv3 = nn.Conv2d(in_channel, out_channel, 1, stride=stride)
    def forward(self, x):
        out = self.conv1(x)
        out = F.relu(self.bn1(out), True)
        out = self.conv2(out)
        out = F.relu(self.bn2(out), True)
        
        if not self.same_shape:
            x = self.conv3(x)
        return F.relu(x+out, True)

残差模块中,体现残差的地方在于最后的 out + x。如果残差模块输入与输出相同,则 out 和 x 可以直接相加,如果输入与输出不相同,则需要通过卷积运算conv3改变维数,才能相加。

测试残差模块

(1)输入输出形状相同时

test_net = residual_block(32, 32)
test_x = Variable(torch.zeros(1, 32, 96, 96))
print('input: {}'.format(test_x.shape))
test_y = test_net(test_x)
print('input: {}'.format(test_y.shape))
input: torch.Size([1, 32, 96, 96])
input: torch.Size([1, 32, 96, 96])

(2)输入与输出形状不相同

test_net = residual_block(32, 32, False)
test_x = Variable(torch.zeros(1, 32, 96, 96))
print('input: {}'.format(test_x.shape))
test_y = test_net(test_x)
print('input: {}'.format(test_y.shape))

输出:

input: torch.Size([1, 32, 96, 96])
input: torch.Size([1, 32, 48, 48])

搭建ResNet模型

class resnet(nn.Module):
    def __init__(self, in_channel, num_classes, verbose=False):
        super(resnet, self).__init__()
        self.verbose = verbose
        self.block1 = nn.Conv2d(in_channel, 64, 7, 2)
        
        self.block2 = nn.Sequential(
            nn.MaxPool2d(3, 2),
            residual_block(64, 64),
            residual_block(64, 64)
        )
        
        self.block3 = nn.Sequential(
            residual_block(64, 128, False),
            residual_block(128, 128)
        )
            
        self.block4 = nn.Sequential(
            residual_block(128, 256, False),
            residual_block(256, 256)
        )
            
        self.block5 = nn.Sequential(
            residual_block(256, 512, False),
            residual_block(512, 512),
            nn.AvgPool2d(3)
        )
            
        self.classifier = nn.Linear(512, num_classes)
            
    def forward(self, x):
        x = self.block1(x)
        if self.verbose:
            print('block 1 output: {}'.format(x.shape))
        x = self.block2(x)
        if self.verbose:
            print('block 2 output: {}'.format(x.shape))
        x = self.block3(x)
        if self.verbose:
            print('block 3 output: {}'.format(x.shape))
        x = self.block4(x)
        if self.verbose:
            print('block 4 output: {}'.format(x.shape))
        x = self.block5(x)
        if self.verbose:
            print('block 5 output: {}'.format(x.shape))
        x = x.view(x.shape[0], -1)
        x = self.classifier(x)
        return x       
test_net = resnet(3, 10, True)
test_x = Variable(torch.zeros(1, 3, 96, 96))
test_y = test_net(test_x)
print('input: {}'.format(test_y.shape))

输出:

block 1 output: torch.Size([1, 64, 45, 45])
block 2 output: torch.Size([1, 64, 22, 22])
block 3 output: torch.Size([1, 128, 11, 11])
block 4 output: torch.Size([1, 256, 6, 6])
block 5 output: torch.Size([1, 512, 1, 1])
input: torch.Size([1, 10])
ResNet网络详解及Pytorch代码实现(超详细帮助你掌握ResNet原理及实现) 目录1. ResNet解决了什么问题2. ResNet原理及结构2.1 BasicBlock结构2.2 BottleNeck结构2.3 ResNet结构3. ResNet代码详解(Pytorch)3.1 BasicBlock代码块3.2 BottleNeck代码块3.3 ResNet代码 博客中的ResNet内容来自何凯明大神在CVPR2016发表的文章《Deep Residual Learning for Image Recognition》,ResNet代码部分来自Pytorch官方实现的ResNet源 阅读详情

相关推荐

resnet PyTorch 官方实现

resnet PyTorch官方实现 resnet 通过构造和一般网络单向传播的多层网络不同,resblock中添加了将输入直接”加“到输出的捷径。这样每层网络就只需要学习残差,这样就让特别深的神经网络成为了可能。 “We hypothesize that it is easier to optimize the residual mapping than to optimize the ori...

Evan Programming 1713

ResNet详解+PyTorch实现

1.Resnet简介 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,由于其在公开数据上展现的优势,作者何凯明也因此摘得CVPR2016最佳论文奖。 Resnet是残差网络(Residual Network)的缩写,该系列网络广泛用于目标分类等领域以及作为计算机视觉任务主干经典神经网络的一部分,典型的网络有resnet50, resnet101等。Resnet网络证明网络能够向更深(包含更多隐藏层)的方向发展。 解决问题:网络退化 从经验来看

frighting_ing的博客 2万+

【PyTorch】:ResNet34实现

# Pytorch 0.4.0 ResNet34实现cifar10分类. # @Time: 2018/6/17 # @Author: xfLi import torchvision as tv import torch as t import torchvision.transforms as transforms from torch import nn from torch.utils.da...

晓峰博客笔记 3496

ResNet代码复现+超详细注释(PyTorch)

ResNet代码复现(PyTorch),每一行都有超详细注释,新手小白都能看懂,亲测可运行

路人贾的博客 1万+

基于Pytorch 实现残差网络ResNet

基于Pytorch 实现残差网络ResNet (一)残差? “数理统计中残差是指实际观察值与估计值(拟合值)之间的差。如果回归模型正确的话, 可以将残差看作误差的观测值。” “统计学上把数据点与它在回归直线上相应位置的差异称残差” 简单地说,已知函数f(x),想得到f(x0)=b时x0的取值,x0未知,给定一个x0的估计值x1,可以根据b-f(x1)可以求得残差。(与误差x1-x0区别:可以在x0未知的情况下取得) (二)残差网络 1)Idea起源: 神经网络随着层数的增加可能会出现两个问题:

labixiaoxinliuxinmei的博客 5384

pytorch实现基于resnet的Unet

resnet可以作为Unet的编码模块,只要把最后的全连接层去掉即可,其它无需改变。 Unet网络的整体结构为编码模块,和解码模块。解码模块要将每个stage模块的中间输出保存下来,以便与对应的解码模块的stage相连接。 Unet的创新之处在于它的解码模块,所以代码实现的时候尤其要关注每个模块的输入输出信道数,解码模块中间几个模块的处理过程相同,可以用for循环处理,而作为解码模块的输入和输出...

weixin_38410551的博客 5603

pytroch【ResNet架构复现】

def conv3x3(in_ , out_ , stride = 1 , initialzero = False) : bn = nn . BatchNorm2d(out_) #需要进行判断,要对BN进行0初始化吗?

芊樱烛渊的博客 325

西门子PLC新手必看:200SMART与1200/1500的MODBUS RTU通讯实战(附完整配置流程)

本文详细解析了西门子PLC中S7-200 SMART与S7-1200/1500之间实现MODBUS RTU通讯的完整实战流程。内容涵盖硬件接线、软件配置及程序编写,重点讲解了200SMART作为从站、1200/1500作为主站的典型架构,并提供了关键功能块的使用方法和常见问题排查技巧,帮助新手快速打通不同系列PLC间的数据交换。

weixin_29214559的博客 398

利用Pytorch实现ResNet网络

ResNet在2015年由微软实验室提出,获得当年ImageNet竞赛中分类任务、目标检测第一名;获得COCO数据集目标检测、图像分割第一名

AdjsWsgz的博客 5286

AI辅助游戏开发实战:Kimi K3提升Unity开发效率与代码质量

在游戏开发领域,有限状态机(FSM)是构建角色AI行为逻辑的核心设计模式,它通过定义明确的状态和转换条件,使游戏实体能够智能地响应环境变化。其原理在于将复杂的行为分解为离散的状态节点,并通过事件驱动状态切换,从而实现清晰、可维护的AI架构。这项技术的价值在于显著提升了游戏角色的行为真实感和开发效率,被广泛应用于NPC行为控制、角色动画管理、UI流程等场景。随着AI编程助手的兴起,开发者现在可以借助如Kimi K3这类工具,通过自然语言指令快速生成和优化FSM等复杂系统的代码框架,将更多精力投入到核心玩法与性

weixin_30430677的博客 409

智能驾驶域控(ADCU)方案介绍

本文主要对智能驾驶域控(ADCU)方案相关知识进行总结,以加深理解,及方便后续查漏补缺。

liuxu324的博客 1577

pytorch实现Resnet

pytorch实现Resnet 标签: pytorch resnet 网络结果及其基本单元 对于Resnet来说基本,只要把其基本结构抽离出来即可,其他的其实和以前我们的普通卷积神经网络很像。而Resnet中最基本的结构就是一个残差块如下: 可以看出一个残差块分为左右两部分,左边其实就是普通卷积操作,而右边什么都没有(不过在实际中会有一个卷积),然后输出就是两个的和。 所以一个对于一个输入x ...

CoderWangSon 4064

yolov8的Detect层详解(输出维度改动)

对于部署端需要拿到onnx的output进行后处理,但是基于anchor_free的yolov8输出是1*(4+cls)*8400,不是我们常见的ncwh格式,所以对Detect层进行了学习,分享一下体会。

yjcccccc的博客 2万+

PyTorch实现的ResNet50、ResNet101和ResNet152

PyTorch实现的ResNet50、ResNet101和ResNet152 import torch import torch.nn as nn import torchvision print("PyTorch Version: ",torch.__version__) print("Torchvision Version: ",torchvision.__version__)

mingo_敏 6万+

手把手教你为ArduPilot添加自定义飞行模式:以自动巡检航线为例

本文详细介绍了如何为开源飞控ArduPilot添加自定义飞行模式,并以自动巡检航线为例,提供了从状态机设计、代码实现到地面站集成的完整开发指南。通过七步法手把手教学,帮助开发者深入理解飞控核心逻辑,实现无人机自主执行复杂巡检任务,满足行业应用定制需求。

weixin_29306875的博客 137

YOLOv11改进 | 损失函数改进篇 | MPDIoU、InnerMPDIoU助力细节涨点(二次创新 + 代码解析)

本文为读者详细介绍了YOLOv11模型的最新改进,带来的改进机制是最新的损失函数MPDIoU和融合了最新的Inner思想的InnerMPDIoU(效果打爆之前的所有的损失函数提升检测精度和处理细节方面的作用。通过深入探讨MPDIoU和InnerMPDIoU(全网首发)的工作原理和实际代码实现,本文旨在指导读者如何将这些先进的损失函数技术应用到YOLOv11模型中,以提高其性能和准确性。文章内容涵盖从理论基础、代码实现,到实际教你如何添加本文的机制到你的模型中。

Snu77的博客 4026

Pytorch实现ResNet

Pytorch实现ResNet 一、ResNet网络介绍 ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。由于它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域里得到广泛的应用。 ResNet残差结构图: ResNet网络结构参数列表: ResNet网络的高点 提出residual结构(残差结构)

qq_51778415的博客 6840

(八)DDR_PHY架构及功能——(PUB组成、初始化及Training流程、Clock关系)

文章目录一、DDR_PHY结构组成1.1、DDR Memory子系统1.2、DDR_PHY架构组成1.3、PUB模块功能实现流程1.3.1、DDR系统初始化流程1.3.2、PLL初始化流程 一、DDR_PHY结构组成 1.1、DDR Memory子系统   Memory子系统主要由DDR Controller和DDR_PHY(含DDR_IO)两个部分组成。DDR Controller主要承担其它子系统(如CPU)与Memory子系统进行数据交互时的传输效率及调度,DDR_PHY主要负责数据交互过程中的传输速

Mr.翟的博客 1万+

pytorch实现简单的ResNet并对MNIST进行分类

问题说明 利用pytorch实现简单的ResNet(2个ResidualBlock) 以MNIST数据集为例进行分类任务 模块设计 1.ResidualBlock的结构 本例中实现的ResidualBlock的结构如下图所示: 其中Weight Layer是一个卷积层。这个ResidualBlock的一个特点是在最后进行第二次的激活时,将第二次卷积的结果加上原始的ResidualBlock的输入x,最后再进行relu激活。 原因:主要是为了避免梯度消失。在进行求导时,d(H(x))=d(F(x)) +

Sword的博客 6415

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

pytorch对resnet的官方实现

地址:https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py import torch.nn as nn import torch.utils.model_zoo as model_zoo __all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet...

华仔的博客 1693

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

利用Pytorch实现ResNet34网络

利用Pytorch实现ResNet34网络 利用Pytorch实现ResNet网络 主要是为了学习Pytorch构建神经网络的基本方法,参考自«深度学习框架Pytorch:入门与实践»一书,作者陈云 1.什么是ResNet网络 ResNet(Deep Residual Network)深度残差网络,是由Kaiming He等人提出的一种新的卷积神经网络结构,其最重要的特点就是网络大部分是由如图...

weixin_30326745的博客 614

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

pytorch中resnet_通过Pytorch实现ResNet18

对于像我这样刚刚入门深度学习的同学来说,可能接触学习了一个开发工具,却没有通过运用来熟练的掌握它。而ResNet是深度学习里面一个非常重要的backbone,并且ResNet18实现起来又足够简单,所以非常适合拿来练手。我们这里的开发环境是:python 3.6.10pytorch 1.5.0torchvision 0.6.0cudatoolkit 10.2.89cudnn 7.6.5首先,我们需...

weixin_32014283的博客 2112

pytorch中resnet_pytorch resnet实现

官方github上已经有了pytorch基础模型的实现,链接但是其中一些模型,尤其是resnet,都是用函数生成的各个层,自己看起来是真的难受!所以自己按照caffe的样子,写一个pytorch的resnet18模型,当然和1000分类模型不同,模型做了一些修改,输入48*48的3通道图片,输出7类。import torch.nn as nnimport torch.nn.functional a...

weixin_39805529的博客 193

ResNet pytorch 官方实现

[ResNet pytorch 官方实现] (https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py)

u010403079的博客 1120

PyTorch ResNet 实现图片分类

PyTorch ResNet 实现图片分类. 百年风雨, 金戈铁马. 忆往昔, 岁月峥嵘; 看今朝, 灿烂辉煌.

我是小白呀的博客 8304
上一篇: PyTroch报错NotImplementedError:
下一篇: PyTorch实现GoogLeNet(InceptionNet)
mingxiaod
博客等级 码龄9年 90粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值