接下来,我们展开讨论如何使用pytorch自定义50层残差网络构建一个图像识别神经网络,数据集使用我自己准备的,下面是我定义好的50层残差网络:class RestNet50( nn.Module):
def __init__(self):
super(RestNet50, self).__init__()
self.relu = nn.ReLU()
self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=7, stride=2, padding=3)
self.pool1 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
self.conv2_1 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=1, stride=1, padding=0)
self.conv2_2 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1)
self.conv2_3 = nn.Conv2d(in_channels=64, out_channels=256, kernel_size=1, stride=1, padding=0)
self.downsample2 = nn.Conv2d(in_channels=64, out_channels=256, kernel_size=1, stride=1, padding=0)
self.conv2_4 = nn.Conv2d(in_channels=256, out_channels=64, kernel_size=1, stride=1, padding=0)
self.conv2_5 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1)
self.conv2_6 = nn.Conv2d(in_channels=64, out_channels=256, kernel_size=1, stride=1, padding=0)
self.conv3_1 = nn.Conv2d(in_channels=256, out_channels=128, kernel_size=1, stride=1, padding=0)
self.conv3_2 = nn.Conv2d(in_channels=128, out_channels=128, kernel_size=3, stride=2, padding=1)
self.conv3_3 = nn.Conv2d(in_channels=128, out_channels=512, kernel_size=1, stride=1, padding=0)
self.downsample3 = nn.Conv2d(in_channels=256, out_channels=512, kernel_size=1, stride=2, padding=0)
self.conv3_4 = nn.Conv2d(in_channels=512, out_channels=128, kernel_size=1, stride=1, padding=0)
self.conv3_5 = nn.Conv2d(in_channels=128, out_channels=128, kernel_size=3, stride=1, padding=1)
self.conv3_6 = nn.Conv2d(in_channels=128, out_channels=512, kernel_size=1, stride=1, padding=0)
self.conv4_1 = nn.Conv2d(in_channels=512, out_channels=256, kernel_size=1, stride=1, padding=0)
self.conv4_2 = nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, stride=2, padding=1)
self.conv4_3 = nn.Conv2d(in_channels=256, out_channels=1024, kernel_size=1, stride=1, padding=0)
self.downsample4 = nn.Conv2d(in_channels=512, out_channels=1024, kernel_size=1, stride=2, padding=0)
self.conv4_4 = nn.Conv2d(in_channels=1024, out_channels=256, kernel_size=1, stride=1, padding=0)
self.conv4_5 = nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, stride=1, padding=1)
self.conv4_6 = nn.Conv2d(in_channels=256, out_channels=1024, kernel_size=1, stride=1, padding=0)
self.conv5_1 = nn.Conv2d(in_channels=1024, out_channels=512, kernel_size=1, stride=1, padding=0)
self.conv5_2 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, stride=2, padding=1)
self.conv5_3 = nn.Conv2d(in_channels=512, out_channels=2048, kernel_size=1, stride=1, padding=0)
self.downsample5 = nn.Conv2d(in_channels=1024, out_channels=2048, kernel_size=1, stride=2, padding=0)
self.conv5_4 = nn.Conv2d(in_channels=2048, out_channels=512, kernel_size=1, stride=1, padding=0)
self.conv5_5 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, stride=1, padding=1)
self.conv5_6 = nn.Conv2d(in_channels=512, out_channels=2048, kernel_size=1, stride=1, padding=0)
self.avgpool = nn.AvgPool2d(7,1,0)
self.fc = nn.Linear(2048, 1000)
def forward(self,x):
x = self.conv1(x)
x = self.pool1(x)
identity = x
x = self.conv2_1(x)
x = self.conv2_2(x)
x = self.conv2_3(x)
identity = self.downsample2(identity)
x = x + identity
identity = x
x = self.conv2_4(x)
x = self.conv2_5(x)
x = self.conv2_6(x)
x = x + identity
identity = x
x = self.conv2_4(x)
x = self.conv2_5(x)
x = self.conv2_6(x)
x = x + identity
identity = x
x = self.conv3_1(x)
x = self.conv3_2(x)
x = self.conv3_3(x)
identity = self.downsample3(identity)
x = x + identity
identity = x
x = self.conv3_4(x)
x = self.conv3_5(x)
x = self.conv3_6(x)
x = x + identity
identity = x
x = self.conv3_4(x)
x = self.conv3_5(x)
x = self.conv3_6(x)
x = x + identity
identity = x
x = self.conv3_4(x)
x = self.conv3_5(x)
x = self.conv3_6(x)
x = x + identity
identity = x
x = self.conv4_1(x)
x = self.conv4_2(x)
x = self.conv4_3(x)
identity = self.downsample4(identity)
x = x + identity
identity = x
x = self.conv4_4(x)
x = self.conv4_5(x)
x = self.conv4_6(x)
x = x + identity
identity = x
x = self.conv4_4(x)
x = self.conv4_5(x)
x = self.conv4_6(x)
x = x + identity
identity = x
x = self.conv4_4(x)
x = self.conv4_5(x)
x = self.conv4_6(x)
x = x + identity
identity = x
x = self.conv4_4(x)
x = self.conv4_5(x)
x = self.conv4_6(x)
x = x + identity
identity = x
x = self.conv4_4(x)
x = self.conv4_5(x)
x = self.conv4_6(x)
x = x + identity
identity = x
x = self.conv5_1(x)
x = self.conv5_2(x)
x = self.conv5_3(x)
identity = self.downsample5(identity)
x = x + identity
identity = x
x = self.conv5_4(x)
x = self.conv5_5(x)
x = self.conv5_6(x)
x = x + identity
identity = x
x = self.conv5_4(x)
x = self.conv5_5(x)
x = self.conv5_6(x)
x = x + identity
x = self.avgpool(x)
x = x.view(x.size(0), -1)
x = self.fc(x)
return x
最新发布