# Codeblock 4a class ConvNeXtBlockTransition(nn.Module): def __init__(self, in_channels, out_channels): #(1) super().__init__() hidden_channels = out_channels * 4 self.projection = nn.Conv2d(in_channels=in_channels, #(2) out_channels=out_channels, kernel_size=1, stride=2, padding=0) self.conv0 = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=7, stride=1, padding=3, groups=in_channels) self.norm0 = nn.LayerNorm(normalized_shape=out_channels) self.conv1 = nn.Conv2d(in_channels=out_channels, out_channels=hidden_channels, kernel_size=1, stride=1, padding=0) self.gelu = nn.GELU() self.conv2 = nn.Conv2d(in_channels=hidden_channels, out_channels=out_channels, kernel_size=1, stride=1, padding=0) self.norm1 = nn.LayerNorm(normalized_shape=out_channels) #(3) self.downsample = nn.Conv2d(in_channels=out_channels, #(4) out_channels=out_channels, kernel_size=2, stride=2)