According to the equation here . The output from maxpool2d should be 24 in my case, but i am not getting that result. Am i missing something here?
class mnist_conv2d(nn.Module):
def __init__(self,classes):
super(mnist_conv2d,self).__init__()
self.conv1 = nn.Conv2d(in_channels=1,out_channels=16,kernel_size=3) # 1 in channel as the are greyscale
self.conv2 = nn.Conv2d(in_channels=16,out_channels=32,kernel_size=3)
self.drop = nn.Dropout2d()
self.fc1 = nn.Linear(in_features=128,out_features=50)
self.fc2 = nn.Linear(in_features=50,out_features=classes)
def forward(self, x):
print("Original: ", x.size())
x = self.conv1(x)
print("Conv2d: ", x.size())
#x size = (28+2*0-1*(3-1)-1)/1 + 1 = 26
x = F.max_pool2d(x,kernel_size=3)
print("Maxpool: ", x.size())
#x size = 26-(3-1)-1/1 + 1 = 24
x = F.relu(x)
print("Relu: ", x.size())
x = self.conv2(x)
print("Conv2d: ",x.size())
#x size = 24-(3-1)-1/1 + 1 = 22
x = self.drop(x)
print("Dropout: ",x.size())
x = F.max_pool2d(x,kernel_size=3)
print("Maxpool: ",x.size())
#x size = 24-(3-1)-1/1 + 1 = 20
x = F.relu(x)
print("Relu: ",x.size())
x = x.view(x.shape[0],-1)
print("Flattened: ",x.size())
x = self.fc1(x)
x = F.relu(x)
x = self.fc2(x)
x = F.log_softmax(x,dim=1)
return x
Passing a 1,1,28,28 image or tensor to this model results in this output:
Original: torch.Size([1, 1, 28, 28])
Conv2d: torch.Size([1, 16, 26, 26])
Maxpool: torch.Size([1, 16, 8, 8])
Relu: torch.Size([1, 16, 8, 8])
Conv2d: torch.Size([1, 32, 6, 6])
Dropout: torch.Size([1, 32, 6, 6])
Maxpool: torch.Size([1, 32, 2, 2])
Relu: torch.Size([1, 32, 2, 2])
Flattened: torch.Size([1, 128])
Shouldnt the output from the maxpool layers be of size 24x24 and not 8x8?