ResNet34网络构建:主体结构是

# 我们这里以 ResNets34 为例子# 先实现一个Block
class Block(nn.Module):def __init__(self, in_channel, out_channel, strides=1, same_shape=True):super(Block, self).__init__()self.same_shape = same_shapeif not same_shape:strides = 2self.strides = stridesself.block = nn.Sequential(nn.Conv2d(in_channel, out_channel, kernel_size=3, stride=strides, padding=1, bias=False),nn.BatchNorm2d(out_channel),nn.ReLU(inplace=True),nn.Conv2d(out_channel, out_channel, kernel_size=3, padding=1, bias=False),nn.BatchNorm2d(out_channel))if not same_shape:self.conv3 = nn.Conv2d(in_channel, out_channel, kernel_size=1, stride=strides, bias=False)self.bn3 = nn.BatchNorm2d(out_channel)def forward(self, x):out = self.block(x)if not self.same_shape:x = self.bn3(self.conv3(x))return F.relu(out + x)# 开始实现 ResNets34
class ResNet34(nn.Module):def __init__(self, num_classes=10):super(ResNet34, self).__init__()# 最开始的几层self.pre = nn.Sequential(nn.Conv2d(3, 64, 7, 2, 3, bias=False),nn.BatchNorm2d(64),nn.ReLU(inplace=True),nn.MaxPool2d(3, 2, 1))# 从论文的图中,可以看到,我们有3,4,6,3个blockself.layer1 = self._make_layer(64, 64, 3)self.layer2 = self._make_layer(64, 128, 4, stride=2)self.layer3 = self._make_layer(128, 256, 6, stride=2)self.layer4 = self._make_layer(256, 512, 3, stride=2)# 分类用的全连接self.fc = nn.Linear(512, num_classes)def _make_layer(self,  in_channel, out_channel, block_num, stride=1):layers = []if stride != 1:layers.append(Block(in_channel, out_channel, stride, same_shape=False))else:layers.append(Block(in_channel, out_channel, stride))for i in range(1, block_num):layers.append(Block(out_channel, out_channel))return nn.Sequential(*layers)# 在jupyter notebook中,可以尝试输出每一层的size,来查看每一层的输入、输出是否正确。def forward(self, x):x = self.pre(x)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)x = F.avg_pool2d(x, 7)x = x.view(x.size(0), -1)return self.fc(x)

ResNet-50/101/152网络构建:主体结构是

# 先实现一个Block
class Bottleneck(nn.Module):def __init__(self, in_channel, out_channel, strides=1, same_shape=True, bottle=True):super(Bottleneck, self).__init__()self.same_shape = same_shapeself.bottle = bottleif not same_shape:strides = 2self.strides = stridesself.block = nn.Sequential(nn.Conv2d(in_channel, out_channel, kernel_size=1, bias=False),nn.BatchNorm2d(out_channel),nn.ReLU(inplace=True),nn.Conv2d(out_channel, out_channel, kernel_size=3, stride=strides, padding=1, bias=False),nn.BatchNorm2d(out_channel),nn.Conv2d(out_channel, out_channel*4, kernel_size=1, bias=False),nn.BatchNorm2d(out_channel*4))if not same_shape or not bottle:self.conv4 = nn.Conv2d(in_channel, out_channel*4, kernel_size=1, stride=strides, bias=False)self.bn4 = nn.BatchNorm2d(out_channel*4)print(self.conv4)def forward(self, x):print(x.size())out = self.block(x)print(out.size())if not self.same_shape or not self.bottle:x = self.bn4(self.conv4(x))return F.relu(out + x)

王权富贵:pytorch,残差块的写法相关推荐

  1. 【深度学习】ResNet残差网络 ResidualBlock残差块实现(pytorch) | 跟着李沐学AI笔记 | ResNet18进行猫狗分类

    文章目录 前言 一.卷积的相关计算公式(复习) 二.残差块ResidualBlock复现(pytorch) 三.残差网络ResNet18复现(pytorch) 四.直接调用方法 五.具体实践(ResN ...

  2. 王权富贵:Pytorch教学

    第一部分教学代码:LianHaiMiao小哥哥写的 ps:我使用的是python3.7,pytorch1.0.1,如何查看pytorch版本? .在调试的过程中下面的代码还是有一些改动的,最好使用ub ...

  3. ResNet中残差块的理解(附代码)

    原论文下载地址:论文 原代码下载地址:官方pytorch代码 比较完整的论文理解:ResNet论文笔记及代码剖析 这里我只讲他的核心理念,残差块,也是我理解了很久的地方,请原谅我描述的如此口语化,希望 ...

  4. MGF6mARice:利用分子图特征和残差块预测水稻DNAn6-甲基腺嘌呤位点

    期刊:Briefings in Bioinformatics 代码链接:https://github.com/zhlSunLab/MGF6mARice 摘要 DNA N6-甲基腺嘌呤(6 mA)是由腺 ...

  5. ResNet 残差网络、残差块

    在深度学习中,为了增强模型的学习能力,网络的层数会不断的加深,于此同时,也伴随着一些比较棘手的问题,主要包括: ①模型复杂度上升,网络训练困难 ②出现梯度消失/梯度爆炸问题 ③网络退化,即增加层数并不 ...

  6. 王权富贵:在树莓派上构建tensorflow

    前言: 搜索了很多资料,重装了好多次系统,总结一句话"树莓派的Linux!=Linux".不是所有在Linux上装的东西在树莓派上都能装. 修改: 2018/9/28-大幅度加入了 ...

  7. 王权富贵:pytorch卷积神经网络的写法

    目录 一.分解层构建模型部分 二.用Sequential来打包层构建网络部分 一.分解层构建模型部分 1)在__init__中把所有层以self.xxx的形式写出来 2)在forward函数中以x=池 ...

  8. 王权富贵:使用pytorch复现Fater-RCNN

    环境配置:(以实现) GTX 1080TI CUDA 8 python 2.7 pytorch 0.4 使用master分支 训练自己的数据集时候修改 demo.py 中的 pascal_classe ...

  9. 王权富贵:GoogLeNet的pytorch实现

    感谢kuangliu,参考自这个项目里面的一篇叫googlenet.py的文档. 先构建一个基本的Inception模块.构造如上图所示,具体代码如下所示. '''GoogLeNet with PyT ...

最新文章

  1. Shippable和Packet合作提供原生ARM CI/CD
  2. Linux优化和目录结构
  3. 30年前未曾发行的任天堂红白机游戏,被这个团队从21张软盘中重新恢复了,还是3D的...
  4. Leetcode_No.66 Plus One
  5. 基于corosync和NFS服务器实现LNMP的高可用
  6. 汉字正字表达式解决方案
  7. android 获取sd卡目录失败_树莓派对SD卡的大小,速度有哪些要求?
  8. Java继承注意事项难点理解
  9. 服务器可以修改cookie吗,是否可以为您拥有的网站/服务器设置Cookie?
  10. Cobar-Client 实现策略总结
  11. bootstrap栅栏系统 解决当弹窗口变小的时候变成1列问题
  12. 《JQuery 能干点啥~》第四讲 html() 与 text()的赋值比较
  13. 一小时搞定 简单VBA编程 Excel宏编程快速扫盲
  14. RGB色彩模式-最广的颜色系统之一
  15. 路由器刷OPENWRT固件的方法
  16. Java中Date时区的转换
  17. python 解决爬虫得到诸如\u65e2 unicode码转中文和字符串转json的问题
  18. 【PAT】 1020 发邮件(错排问题)详解
  19. WiFi、ZigBee、BLE用哪个?小米内部是这样选的
  20. 数字逻辑计算机组成,数字逻辑设计与计算机组成pdf

热门文章

  1. Lightroom Classic CC 2019中文直装版
  2. 85. Three Points On A Line
  3. QQ远程桌面无法连接到远程计算机,win10系统远程桌面无法连接怎么修复
  4. python可视化——django驾驶舱的实现(上)
  5. qt opengl 3d基本形状圆锥
  6. 新帆启航,踏浪远洋,太平洋电信股份有限公司总部盛大乔迁
  7. android picasso 显示本地图片,剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)...
  8. 2022安全员-B证特种作业证考试题库模拟考试平台操作
  9. 洗衣机搬家需要注意什么
  10. 闲暇之余做一新闻网站