Issue
Hi I'm trying to visualize CNN. I've been going through https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html to study CNN by visualizing the structure. What I couldn't understand is its dimension.
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 3x3 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 3)
self.conv2 = nn.Conv2d(6, 16, 3)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 6 * 6, 120) # 6*6 from image dimension
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features
net = Net()
print(net)
So the code part is supposed to be the CNN model structure from the image. What I don't get is this.
- Convolutions happen from the input to C1 and 3*3 kernel was used. In this case, shouldn't the dimension of C1 be 30 X 30 instead of 28 X 28?
- According to the image, dimension of the input to layer F5 is 16 X 5 X 5 but the code says otherwise. It seems like layer F5 is taking an input of dimension 16 X 6 X 6.
I'm not sure whether I'm taking it incorrectly or the image is wrong.
Solution
I'm pretty sure the image is wrong.
If you check the documentation of Conv2d. Using the equation there, the first convolution layer should output (batch_size, 6, 30, 30)
. Running the model also confirms my conclusion.
The image should be modified to:
INPUT: 1 x 32 x 32
C1: 6 x 30 x 30
S2: 6 x 15 x 15
C2: 16 x 13 x 13
S2: 16 x 6 x 6
Answered By - 6etacat
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.