# Codeblock 4b def forward(self, x): print(f'original\t\t: {x.size()}') residual = self.projection(x) #(1) print(f'residual after proj\t: {residual.size()}') x = self.conv0(x) print(f'after conv0\t\t: {x.size()}') x = x.permute(0, 2, 3, 1) print(f'after permute\t\t: {x.size()}') x = self.norm0(x) print(f'after norm1\t\t: {x.size()}') x = x.permute(0, 3, 1, 2) print(f'after permute\t\t: {x.size()}') x = self.conv1(x) print(f'after conv1\t\t: {x.size()}') x = self.gelu(x) print(f'after gelu\t\t: {x.size()}') x = self.conv2(x) print(f'after conv2\t\t: {x.size()}') x = x.permute(0, 2, 3, 1) print(f'after permute\t\t: {x.size()}') x = self.norm1(x) print(f'after norm1\t\t: {x.size()}') x = x.permute(0, 3, 1, 2) print(f'after permute\t\t: {x.size()}') x = self.downsample(x) #(2) print(f'after downsample\t: {x.size()}') x = x + residual #(3) print(f'after summation\t\t: {x.size()}') return x