深度学习小白实现残差网络resnet18 ——pytorch「建议收藏」

深度学习小白实现残差网络resnet18 ——pytorch「建议收藏」深度学习小白实现残差网络resnet18——pytorch利用闲暇时间写了resnet18的实现代码,可能存在错误,看官可以给与指正。pytorch中给与了resnet的实现模型,可以供小白调用,这里不赘述方法。下面所有代码的实现都是使用pytorch框架书写,采用python语言。网络上搜索到的resne18的网络结构图如下。resnet18只看图中左侧网络结构就可以。(ps:使用的是简书上一个博主的图,如有冒犯,请谅解)接下来,根据如图的网络结构进行搭建网络。通过观察网络结构,发现在网络结

大家好,又见面了,我是你们的朋友全栈君。

深度学习小白实现残差网络resnet18 ——pytorch

利用闲暇时间写了resnet18 的实现代码,可能存在错误,看官可以给与指正。
pytorch中给与了resnet的实现模型,可以供小白调用,这里不赘述方法。下面所有代码的实现都是使用pytorch框架书写,采用python语言。
网络上搜索到的resne18的网络结构图如下。resnet18只看图中左侧网络结构就可以。(ps:使用的是简书上一个博主的图,如有冒犯,请谅解)
在这里插入图片描述
接下来,根据如图的网络结构进行搭建网络。通过观察网络结构,发现在网络结构中存在两种不同基础块,第一种是实现标注跳跃连接的部分,如下:在这里插入图片描述在这个块中具体实现工作流程如下图:
残差模块的结构示意图实现方法如下:

import torch.nn as nn
import torch.nn.functional as F

class basic_block(nn.Module):
    '''定义了带实线部分的残差块'''
    def __init__(self,in_channels):
        super(basic_block, self).__init__()
        self.conv1 = nn.Conv2d(in_channels,in_channels,kernel_size=3,stride=1,padding=1)
        self.conv2 = nn.Conv2d(in_channels,in_channels,kernel_size=3,stride=1,padding=1)
    def forward(self, x):
        y = F.relu(self.conv1(x))
        y = self.conv2(y)
        return F.relu(x+y)

第二种是带有虚线标注的跳跃连接部分,第一种结构是在通道数不变的情况下,进行的残差结构运算,第二种的跳跃连接结构,通道数发生了改变,于是把它单独做成一个基础块,如下图:
在这里插入图片描述实现代码如下:

class basic_block2(nn.Module):
    '''定义了带虚线部分的残差块'''
    def __init__(self,in_channels,out_channels):
        super(basic_block2, self).__init__()
        self.conv1 = nn.Conv2d(in_channels,out_channels,kernel_size=1,stride=2)
        self.conv2 = nn.Conv2d(in_channels,out_channels,kernel_size=3,stride=2,padding=1)
        self.conv3 = nn.Conv2d(out_channels,out_channels,kernel_size=3,stride=1,padding=1)
    def forward(self, x):
        z = self.conv1(x)
        y = F.relu(self.conv2(x))
        y = self.conv3(y)
        return F.relu(y+z)

这样我们就有了两种残差结构块,然后按照文章开头给出的网络结构顺序连接起来就行了,实现代码如下:

class resnet_test(nn.Module):
    '''按照网络结构图直接连接,确定好通道数量就可以'''
    def __init__(self):
        super(resnet_test, self).__init__()
        self.conv1 = nn.Conv2d(3,64,kernel_size=7, stride=2, padding=3)
        self.maxp1 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.resn1 = basic_block(64)
        self.resn2 = basic_block(64)
        self.resn3 = basic_block2(64,128)
        self.resn4 = basic_block(128)
        self.rest5 = basic_block2(128,256)
        self.rest6 = basic_block(256)
        self.rest7 = basic_block2(256,512)
        self.rest8 = basic_block(512)
        self.avgp1 = nn.AvgPool2d(7)
        self.fullc = nn.Linear(512,1000)
    def forward(self,x) :
        in_size = x.size(0)
        x = self.maxp1(F.relu(self.conv1(x)))
        x = self.resn1(x)
        x = self.resn2(x)
        x = self.resn3(x)
        x = self.resn4(x)
        x = self.resn5(x)
        x = self.resn6(x)
        x = self.resn7(x)
        x = self.resn8(x)
        x = self.avgp1(F.relu(x))
        x = x.view(in_size,-1)
        x = self.fullc(x)
        return F.softmax(x,dim=1)   ###使用softmax激活函数进行得分计算

这样我们就得到了自己手敲的一个resnet18网络,虽然步骤繁冗,但是小白级别的初学者容易看懂,欢迎交流,第一次写博文,不喜勿喷。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146145.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python重复执行10次_卡bug

    python重复执行10次_卡bugpy3Fdfs修复几个bugpy3Fdfs2.2.0TypeError:typeobjectargumentafter**mustbeamapping,notstrdownload_to_file(local_filename,remote_file_id),提示mustbebytes[],notstrPython3struct格式化下载30k文件出现sock…

    2022年10月21日
  • SQL中使用SUBSTRING截取字符串「建议收藏」

    SQL中使用SUBSTRING截取字符串「建议收藏」SUBSTRING返回字符、binary、text     或     image     表达式的一部分。有关可与该函数一起使用的有效     Microsoft®     SQL     Server™     数据类型的更多信息,请参见数

    2022年5月23日
  • EtherCAt总线运动控制_运动控制器ethercat

    EtherCAt总线运动控制_运动控制器ethercat运动控制器作为数控系统的核心部件,在高端机器人、数控机床、工业自动化等领域得到了广泛的应用。本文以实际工程应用为背景,以研制高效、高可靠性、功能丰富的运动控制器为目标,对运动控制器及运动控制算法进行了研究与分析,对于实现高速、高效、高精度的运动控制具有重要的理论意义和实际应用价值。基于ARM+FPGA的硬件架构,提出了硬件设计的总体方案。设计了运动控制器的硬件电路及主控制板和扩展板,搭建了三维运动控制平台。提出了运动控制器软件设计的总体方案,基于MODBUS协议,设计了串口通

    2022年10月14日
  • SpringBoot框架_skynet框架详解

    SpringBoot框架_skynet框架详解SpringBoot框架详解1.SpringBoot概述1.1springboot简介1.2SpringBoot特点1.3Spring官网解读2.SpringBoot入门2.1系统要求2.2创建项目2.3引入依赖2.4创建测试2.5测试验证3.SpringBoot配置原理3.1SpringBoot特点3.2容器功能3.3自动配置原理入门3.4开发小技巧1.SpringBoot概述1.1springboot简介springboot之所以能使用广泛也基于微服务分布式的的崛

    2022年8月21日
  • osx安装失败_OSX

    osx安装失败_OSX目录1.MacPorts是什么2.MacPorts安装方法2.1使用安装器安装2.2源码安装2.3同步repositorytree和获取最新package3.更新失败的解决方法4.ports使用…

    2022年9月14日
  • 一种基于Linux文件系统的数据恢复方法_武汉病例轨迹

    一种基于Linux文件系统的数据恢复方法_武汉病例轨迹问题阶段起因:昨天晚上思路不是很清晰(上了一天班回来有点蒙),还是强忍着疲惫想搞事情,结果悲剧了……本来想拿SD卡做一张linux烧录卡,烧录脚本是很久以前写的,有git记录,一直不成功,就回退了几次提交,然后执行的时候没有给脚本传参(/dev/sd**),结果脚本中默认磁盘设备为/dev/sdb,在现在电脑上是一块数据磁盘,执行到一半的时候由于某些原因意外退出,但还是有一些命令执行,比

    2022年11月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号