When creating new neural net from scratch, how does one statically define what the size of the a flatten layer is not at runtime?
def __init__(self,H,W,C, nb_filters1,nb_filters2, kernel_size1,kernel_size2, nb_units_fc1,nb_units_fc2,nb_units_fc3):
    super(BoixNet, self).__init__()
    self.conv1 = nn.Conv2d(3,nb_filters1, kernel_size1) #(in_channels, out_channels, kernel_size)
    self.conv2 = nn.Conv2d(nb_filters1,nb_filters2, kernel_size2)
    CHW = ((H-kernel_size1+1)-kernel_size2+1)*(W-kernel_size1+1)-kernel_size2+1)*nb_filters2
    self.fc1 = nn.Linear(CHW, nb_units_fc1)
    self.fc2 = nn.Linear(nb_units_fc1,nb_units_fc2)
    self.fc3 = nn.Linear(nb_units_fc2,nb_units_fc3)