Hi all,
I’m trying to work with and modify VGG for a different task, but I’m struggling to figure out where these values are coming from and how I can determine the ones that I need when I make modifications to the network layers.
class VGG(nn.Module):

    def __init__(self, features, num_classes=1000):
        super(VGG, self).__init__()
        self.features = features
        self.classifier = nn.Sequential(
            nn.Linear(512 * 7 * 7, 4096),
            nn.ReLU(True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(True),
            nn.Dropout(),
            nn.Linear(4096, num_classes),
        )
        self._initialize_weights()

    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size(0), -1)
        x = self.classifier(x)
return x

What is “nn.Linear(512 * 7 * 7, 4096)”? Where do we get these values from?
I’m attempting to make VGG an encoder-docoder network, and so I am trying to learn how to properly use ConvTranspose2d as a deconvolutional layer. I understand that the Linear layer wants to accept 512 as the input value, but I do not understand 512 * 7 * 7 or where 4096 is coming from. Any changes (like saying “512 * 5 * 5”) for example) predictably give me a size mismatch error such as
Traceback (most recent call last):
  File "smallEDNetwork2.py", line 218, in <module>
    num_epochs=2)
  File "smallEDNetwork2.py", line 165, in train_model
    outputs = model(inputs)
  File "/home/nic/.conda/envs/my_root/lib/python3.6/site-packages/torch/nn/modules/module.py", line 325, in __call__
    result = self.forward(*input, **kwargs)
  File "smallEDNetwork2.py", line 75, in forward
    x = self.classifier(x)
  File "/home/nic/.conda/envs/my_root/lib/python3.6/site-packages/torch/nn/modules/module.py", line 325, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/nic/.conda/envs/my_root/lib/python3.6/site-packages/torch/nn/modules/container.py", line 67, in forward
    input = module(input)
  File "/home/nic/.conda/envs/my_root/lib/python3.6/site-packages/torch/nn/modules/module.py", line 325, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/nic/.conda/envs/my_root/lib/python3.6/site-packages/torch/nn/modules/linear.py", line 55, in forward
    return F.linear(input, self.weight, self.bias)
  File "/home/nic/.conda/envs/my_root/lib/python3.6/site-packages/torch/nn/functional.py", line 835, in linear
    return torch.addmm(bias, input, weight.t())
RuntimeError: size mismatch at /opt/conda/conda-bld/pytorch_1512386481460/work/torch/lib/THC/generic/THCTensorMathBlas.cu:243

Thanks for your help!