6

On pytorch website they have the following model in their tutorial

class BasicCNN(nn.Module):
    def __init__(self):
        super(BasicCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = x.permute(0, 3, 1, 2)
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

How many kernels/filters this model has? Is it two - e.g conv1 and conv2. How do I easily create many filters by specifying the number of them? For example 100 filters.

Thanks!

Wasi Ahmad
  • 35,739
  • 32
  • 114
  • 161
YohanRoth
  • 3,153
  • 4
  • 31
  • 58
  • The input and output channels are parameters of nn.Conv2d. They effectively determine the number of filters and dimensions of data volume flowing through your network. Read more here: https://pytorch.org/docs/master/generated/torch.nn.Conv2d.html I've also created an implementation of a 2D convolution on a 3D RGB image that you could use to play around with this and get some intuition. https://stackoverflow.com/a/62678843/5484902 – Gal_M Jul 02 '20 at 07:25

1 Answers1

14

Your question is a little ambiguous but let me try to answer it.

Usually, in a convolutional layer, we set the number of filters as the number of out_channels. But this is not straight-forward. Let's discuss based on the example that you provided.

What are the convolutional layer parameters?

model = BasicCNN()
for name, params in model.named_parameters():
    if 'conv' in name:
        print(name, params.size())

Output:

conv1.weight torch.Size([6, 3, 5, 5])
conv1.bias torch.Size([6])
conv2.weight torch.Size([16, 6, 5, 5])
conv2.bias torch.Size([16])

Explanation

Let's consider conv1 layer in the above model. We can say, there are 6 filters of shape 5 x 5 because we have chosen 2d Convolution. Since the number of input channels is 3, so there are in total 6 x 3 = 18 kernels.

Here, the inputs of this model are 3d like images. You can consider, we have images with shape W x H and there are 3 channels (RGB) for images. So, we can feed 3d tensors representing images to this model.


Now coming back to your question, "How do I easily create many filters by specifying the number of them? For example 100 filters.". If you want to simply use 100 filters per input channel, then just set 100 in conv1 instead of 6. This is typically what people do in computer vision!

But you can definitely modify the architecture as per your need and identify the best setting.

Wasi Ahmad
  • 35,739
  • 32
  • 114
  • 161