前言
在搭建网络的时候,发现relu函数用几种不同的用法,对于不同的用法,并不会改变可训练参数的数量,但是所占用的计算机资源却不同,但是各有利弊,相面详细介绍。
可以对比这篇文章一起看,实在这篇文章基础上进行修改的。
pytorch从零实现resnet_两只蜡笔的小新的博客-CSDN博客_pytorch使用resnet
如果手头里面没有好用的GPU服务器:推荐一下下面这个链接:
注册 - 极链AI云平台
一、残差块的不同实现
【版本1】
def BasicBlock(in_ch,out_ch,stride):
return nn.Sequential(
nn.Conv2d(in_ch, out_ch, 3, stride, padding=1, bias=False),
nn.BatchNorm2d(out_ch),
nn.ReLU(inplace=True),
nn.Conv2d(out_ch, out_ch, 3, stride=1, padding=1, bias=False),
nn.BatchNorm2d(out_ch),
nn.ReLU(inplace=True),
)
class ResidualBlock_old(nn.Module):
def __init__(self, in_ch, out_ch, stride=1, shortcut=None):
super(ResidualBlock_old, self).__init__()
self.BasicBlock = BasicBlock(in_ch,out_ch,stride)
self.downsample = shortcut
def forward(self, x):
out = self.BasicBlock(x)
residual = x if