PaddlePaddle复现ResNet34,疑问?

摘要:import paddle.nn as nn class ResidualBlock(nn.Layer): def __init__(self, in_channels, out_channels, stride = 1, downsamp
import paddle.nn as nn class ResidualBlock(nn.Layer): def __init__(self, in_channels, out_channels, stride = 1, downsample = None): super(ResidualBlock, self).__init__() self.conv1 = nn.Sequential( nn.Conv2D(in_channels, out_channels, kernel_size = 3, stride = stride, padding = 1), nn.BatchNorm2D(out_channels), nn.ReLU()) self.conv2 = nn.Sequential( nn.Conv2D(out_channels, out_channels, kernel_size = 3, stride = 1, padding = 1), nn.BatchNorm2D(out_channels)) self.downsample = downsample self.relu = nn.ReLU() self.out_channels = out_channels def forward(self, x): residual = x out = self.conv1(x) out = self.conv2(out) if self.downsample: residual = self.downsample(x) out += residual out = self.relu(out) return out class ResNet(nn.Layer): def __init__(self, block, layers, num_classes = 1000): super(ResNet, self).__init__() self.inplanes = 64 self.conv1 = nn.Sequential( nn.Conv2D(3, 64, kernel_size = 7, stride = 2, padding = 3), nn.BatchNorm2D(64), nn.ReLU()) self.maxpool = nn.MaxPool2D(kernel_size = 3, stride = 2, padding = 1) self.layer0 = self._make_layer(block, 64, layers[0], stride = 1) self.layer1 = self._make_layer(block, 128, layers[1], stride = 2) self.layer2 = self._make_layer(block, 256, layers[2], stride = 2) self.layer3 = self._make_layer(block, 512, layers[3], stride = 2) self.avgpool = nn.AvgPool2D(7, stride=1) self.fc = nn.Linear(2048, num_classes) def _make_layer(self, block, planes, blocks, stride=1): downsample = None if stride != 1 or self.inplanes != planes: downsample = nn.Sequential(
阅读全文