0% found this document useful (0 votes)
11 views

Assign 3 NN

The document defines functions for 3x3 and 1x1 convolutions and a BasicBlock class for a residual block. The BasicBlock contains two 3x3 convolution layers, batch normalization layers, and optionally downsamples the input.

Uploaded by

Muzammil Asrar
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

Assign 3 NN

The document defines functions for 3x3 and 1x1 convolutions and a BasicBlock class for a residual block. The BasicBlock contains two 3x3 convolution layers, batch normalization layers, and optionally downsamples the input.

Uploaded by

Muzammil Asrar
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

def conv3x3(in_planes: int, out_planes: int, stride: int = 1, groups: int = 1,

dilation: int = 1) -> nn.Conv2d:


"""3x3 convolution with padding"""
return nn.Conv2d(
in_planes,
out_planes,
kernel_size=3,
stride=stride,
padding=dilation,
groups=groups,
bias=False,
dilation=dilation,
)

def conv1x1(in_planes: int, out_planes: int, stride: int = 1) -> nn.Conv2d:


"""1x1 convolution"""
return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride,
bias=False)

class BasicBlock(nn.Module):
expansion: int = 1

def __init__(
self,
inplanes: int,
planes: int,
stride: int = 1,
downsample: Optional[nn.Module] = None,
groups: int = 1,
base_width: int = 64,
dilation: int = 1,
norm_layer: Optional[Callable[..., nn.Module]] = None,
) -> None:
super().__init__()
if norm_layer is None:
norm_layer = nn.BatchNorm2d
if groups != 1 or base_width != 64:
raise ValueError("BasicBlock only supports groups=1 and
base_width=64")
if dilation > 1:
raise NotImplementedError("Dilation > 1 not supported in
BasicBlock")
# Both self.conv1 and self.downsample layers downsample the input when
stride != 1
self.conv1 = conv3x3(inplanes, planes, stride)
self.bn1 = norm_layer(planes)
self.relu = nn.ReLU(inplace=True)
self.conv2 = conv3x3(planes, planes)
self.bn2 = norm_layer(planes)
self.downsample = downsample
self.stride = stride

def forward(self, x: Tensor) -> Tensor:


identity = x

out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)

out = self.conv2(out)
out = self.bn2(out)
if self.downsample is not None:
identity = self.downsample(x)

out += identity
out = self.relu(out)

return out

You might also like