# Codeblock 3 class Patcher(nn.Module): def __init__(self): super().__init__() #(1) self.unfold = nn.Unfold(kernel_size=PATCH_SIZE, stride=PATCH_SIZE) #(2) self.linear_projection = nn.Linear(in_features=IN_CHANNELS*PATCH_SIZE*PATCH_SIZE, out_features=EMBED_DIM) def forward(self, images): print(f'images\t\t: {images.size()}') images = self.unfold(images) #(3) print(f'after unfold\t: {images.size()}') images = images.permute(0, 2, 1) #(4) print(f'after permute\t: {images.size()}') features = self.linear_projection(images) #(5) print(f'after lin proj\t: {features.size()}') return features