I am trying to build a CNN with the following depth and parameters:

Convolution Layer 1: 3 input channels, 16 output channels, 3x3 kernel
Convolution Layer 2: 16 input channels, 24 output channels, 4x4 kernel
Convolution Layer 3: 24 input channels, 32 output channels, 4x4 kernel
Fully connected Layer 1: * input channels, 512 output
Fully connected Layer 2: 512 input channels, 10 output channels

() - The input size of the first connected layer is calculated to be 2929*32 (flattened previous layer).
Each convolution layer is followed by a ReLU and a max-pool operation with kernel size 2x2. After each sequence of convolution, ReLU and max-pool, a dropout operation with p=0.3 is added.
I have written the following code, however I am not entirely sure whether I have correctly implemented the design described above.
class ConvNet(nn.Module):

    def __init__(self, num_classes=10):
        super(ConvNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3)
        self.conv2 = nn.Conv2d(16, 24, 4)
        self.conv3 = nn.Conv2d(24, 32, 4)
        self.maxPool = nn.MaxPool2D(2)
        self.dropout = nn.Dropout2D(p=0.3)
        self.relu = nn.ReLU()
        self.fc1 = nn.Linear(29*29*32,512)
        self.fc2 = nn.Linear(512, num_classes)
        self.final = nn.Softmax(dim=1)

    def forward(self, x):
        x = self.conv1(x)
        x = self.relu(self.conv1(x))
        x = self.maxPool(x)
        x = self.dropout(x)
        x = self.conv2(x)
        x = self.relu(self.conv2(x))
        x = self.maxPool(x)
        x = self.dropout(x)
        x = self.conv3(x)
        x = self.relu(self.conv3(x))
        x = self.maxPool(x)
        x = self.dropout(x)
        x = x.reshape(x.size(0), -1)
        x = self.fc1(x)
        x = self.fc2(x)
        x = self.final(x)
        return x

Any advice would be greatly appreciated as although I have prior Python experience, I am very inexperienced in AI/ML methods.