I want to get the output of the first linear layer and defined a model like this:
model = CatAndDogConvNet()
CatAndDogConvNet(
(conv1): Conv2d(3, 16, kernel_size=(5, 5), stride=(2, 2), padding=(1, 1))
(maxpool_1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(relu_1): ReLU()
(conv2): Conv2d(16, 32, kernel_size=(5, 5), stride=(2, 2), padding=(1, 1))
(maxpool_2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(relu_2): ReLU()
(conv3): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(maxpool_3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(relu_3): ReLU()
(fc1): Linear(in_features=2304, out_features=500, bias=True)
(fc2): Linear(in_features=500, out_features=50, bias=True)
(fc3): Linear(in_features=50, out_features=2, bias=True)
)
And a new model like this
model_new = torch.nn.Sequential(*list(model.children())[:10)
model_new
Sequential(
(0): Conv2d(3, 16, kernel_size=(5, 5), stride=(2, 2), padding=(1, 1))
(1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(2): Conv2d(16, 32, kernel_size=(5, 5), stride=(2, 2), padding=(1, 1))
(3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(4): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(6): Linear(in_features=2304, out_features=500, bias=True)
)
But when I pass my images through it,
res_4 = []
model_new = torch.nn.Sequential(*list(model.children())[:10])
for i in range(len(imgs)):
temp = model_new(imgs[i][0])
res_4.append([temp, imgs[i][1]])
I get the following error:
RuntimeError Traceback (most recent call last)
/tmp/ipykernel_95235/516937314.py in
2 model_new = torch.nn.Sequential(*list(model.children())[:7])
3 for i in range(len(imgs)):
----> 4 temp = model_new(imgs[i][0])
5 res_4.append([temp, imgs[i][1]])~/anaconda3/envs/torch/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
1188 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
1189 or _global_forward_hooks or _global_forward_pre_hooks):
→ 1190 return forward_call(*input, **kwargs)
1191 # Do not call functions when jit is used
1192 full_backward_hooks, non_full_backward_hooks = [], []~/anaconda3/envs/torch/lib/python3.8/site-packages/torch/nn/modules/container.py in forward(self, input)
202 def forward(self, input):
203 for module in self:
→ 204 input = module(input)
205 return input
206~/anaconda3/envs/torch/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
1188 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
1189 or _global_forward_hooks or _global_forward_pre_hooks):
…
→ 114 return F.linear(input, self.weight, self.bias)
115
116 def extra_repr(self) → str:RuntimeError: mat1 and mat2 shapes cannot be multiplied (384x6 and 2304x500)
This is what I am getting for the model when I pass the image
summary(model_new, (1, 3, 224, 224))
==========================================================================================
Layer (type:depth-idx) Output Shape Param #
==========================================================================================
Sequential -- --
├─Conv2d: 1-1 [1, 16, 111, 111] 1,216
├─MaxPool2d: 1-2 [1, 16, 55, 55] --
├─Conv2d: 1-3 [1, 32, 27, 27] 12,832
├─MaxPool2d: 1-4 [1, 32, 13, 13] --
├─Conv2d: 1-5 [1, 64, 13, 13] 18,496
├─MaxPool2d: 1-6 [1, 64, 6, 6] --
==========================================================================================
Total params: 32,544
Trainable params: 32,544
Non-trainable params: 0
Total mult-adds (M): 27.46
==========================================================================================
Input size (MB): 0.60
Forward/backward pass size (MB): 1.85
Params size (MB): 0.13
Estimated Total Size (MB): 2.58