Pytorch - Inferring linear layer in_features

I am building a toy model to take in some images and give me a classification. My model looks like:

conv2d -> pool -> conv2d -> linear -> linear.

My issue is that when we create the model, we have to calculate the size of the first linear layer in_features based on the size of the input image. If we get new images of different sizes, we have to recalculate in_features for our linear layer. Why do we have to do this? Can't it just be inferred?


Why do you expect the linear layer to infer its input size? What if you intentionally want to change this size (i.e., the conv layer output channels or whatever). I believe your work should be parameterized (i.e., controlled by well-defined parameters). A workaround is to always transform the input images into a defined shape. But, I do not recommend so since this may heavily affect your model's accuracy because transforming includes losing pixels (i.e., the features of your input).


As of 1.8, PyTorch now has LazyLinear which infers the input dimension:

A torch.nn.Linear module where in_features is inferred.