王权富贵:pytorch,残差块的写法
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,残差块的写法相关推荐
- 【深度学习】ResNet残差网络 ResidualBlock残差块实现(pytorch) | 跟着李沐学AI笔记 | ResNet18进行猫狗分类
文章目录 前言 一.卷积的相关计算公式(复习) 二.残差块ResidualBlock复现(pytorch) 三.残差网络ResNet18复现(pytorch) 四.直接调用方法 五.具体实践(ResN ...
- 王权富贵:Pytorch教学
第一部分教学代码:LianHaiMiao小哥哥写的 ps:我使用的是python3.7,pytorch1.0.1,如何查看pytorch版本? .在调试的过程中下面的代码还是有一些改动的,最好使用ub ...
- ResNet中残差块的理解(附代码)
原论文下载地址:论文 原代码下载地址:官方pytorch代码 比较完整的论文理解:ResNet论文笔记及代码剖析 这里我只讲他的核心理念,残差块,也是我理解了很久的地方,请原谅我描述的如此口语化,希望 ...
- MGF6mARice:利用分子图特征和残差块预测水稻DNAn6-甲基腺嘌呤位点
期刊:Briefings in Bioinformatics 代码链接:https://github.com/zhlSunLab/MGF6mARice 摘要 DNA N6-甲基腺嘌呤(6 mA)是由腺 ...
- ResNet 残差网络、残差块
在深度学习中,为了增强模型的学习能力,网络的层数会不断的加深,于此同时,也伴随着一些比较棘手的问题,主要包括: ①模型复杂度上升,网络训练困难 ②出现梯度消失/梯度爆炸问题 ③网络退化,即增加层数并不 ...
- 王权富贵:在树莓派上构建tensorflow
前言: 搜索了很多资料,重装了好多次系统,总结一句话"树莓派的Linux!=Linux".不是所有在Linux上装的东西在树莓派上都能装. 修改: 2018/9/28-大幅度加入了 ...
- 王权富贵:pytorch卷积神经网络的写法
目录 一.分解层构建模型部分 二.用Sequential来打包层构建网络部分 一.分解层构建模型部分 1)在__init__中把所有层以self.xxx的形式写出来 2)在forward函数中以x=池 ...
- 王权富贵:使用pytorch复现Fater-RCNN
环境配置:(以实现) GTX 1080TI CUDA 8 python 2.7 pytorch 0.4 使用master分支 训练自己的数据集时候修改 demo.py 中的 pascal_classe ...
- 王权富贵:GoogLeNet的pytorch实现
感谢kuangliu,参考自这个项目里面的一篇叫googlenet.py的文档. 先构建一个基本的Inception模块.构造如上图所示,具体代码如下所示. '''GoogLeNet with PyT ...
最新文章
- Shippable和Packet合作提供原生ARM CI/CD
- Linux优化和目录结构
- 30年前未曾发行的任天堂红白机游戏,被这个团队从21张软盘中重新恢复了,还是3D的...
- Leetcode_No.66 Plus One
- 基于corosync和NFS服务器实现LNMP的高可用
- 汉字正字表达式解决方案
- android 获取sd卡目录失败_树莓派对SD卡的大小,速度有哪些要求?
- Java继承注意事项难点理解
- 服务器可以修改cookie吗,是否可以为您拥有的网站/服务器设置Cookie?
- Cobar-Client 实现策略总结
- bootstrap栅栏系统 解决当弹窗口变小的时候变成1列问题
- 《JQuery 能干点啥~》第四讲 html() 与 text()的赋值比较
- 一小时搞定 简单VBA编程 Excel宏编程快速扫盲
- RGB色彩模式-最广的颜色系统之一
- 路由器刷OPENWRT固件的方法
- Java中Date时区的转换
- python 解决爬虫得到诸如\u65e2 unicode码转中文和字符串转json的问题
- 【PAT】 1020 发邮件(错排问题)详解
- WiFi、ZigBee、BLE用哪个?小米内部是这样选的
- 数字逻辑计算机组成,数字逻辑设计与计算机组成pdf
热门文章
- Lightroom Classic CC 2019中文直装版
- 85. Three Points On A Line
- QQ远程桌面无法连接到远程计算机,win10系统远程桌面无法连接怎么修复
- python可视化——django驾驶舱的实现(上)
- qt opengl 3d基本形状圆锥
- 新帆启航,踏浪远洋,太平洋电信股份有限公司总部盛大乔迁
- android picasso 显示本地图片,剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)...
- 2022安全员-B证特种作业证考试题库模拟考试平台操作
- 洗衣机搬家需要注意什么
- 闲暇之余做一新闻网站