RuntimeError: Given input size: (256x2x2). Calculated output size: (256x0x0). Output size is too small

username: khushi-411
cooked: <p>This is my code:</p>
<p>import torch<br>
import torch.nn as nn</p>
<p>class AlexNet(nn.Module):</p>
<pre><code>def __init__(self, __output_size):
    
    super(AlexNet, self).__init__()
    
    self.layer1 = nn.Sequential(
        nn.Conv2d(in_channels=1, out_channels=96, kernel_size=11, stride=4),
        nn.ReLU(inplace=True),
        nn.MaxPool2d(kernel_size=3, stride=2)
        )
    
    self.layer2 = nn.Sequential(
        nn.Conv2d(in_channels=96, out_channels=256, kernel_size=5, stride=1, padding=2),
        nn.ReLU(inplace=True),
        nn.MaxPool2d(kernel_size=3, stride=2)
        )
    
    self.layer3 = nn.Sequential(
        nn.Conv2d(in_channels=256, out_channels=384, kernel_size=3, stride=1, padding=1),
        nn.ReLU(inplace=True)
        )
    
    self.layer4 = nn.Sequential(
        nn.Conv2d(in_channels=384, out_channels=384, kernel_size=3, stride=1, padding=1),
        nn.ReLU(inplace=True)
        )
    
    self.layer5 = nn.Sequential(
        nn.Conv2d(in_channels=384, out_channels=256, kernel_size=3, stride=1, padding=1),
        nn.ReLU(inplace=True),
        nn.MaxPool2d(kernel_size=3, stride=1)
        )
    
    self.layer6 = nn.Sequential(
        nn.Dropout(p=0.5)
        )
    
    #self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
    
    self.layer7 = nn.Sequential(
        nn.Linear(in_features=4096, out_features=4096, bias=True),
        nn.ReLU()
        )
    
    self.layer8 = nn.Sequential(
        nn.Dropout(p=0.5)
        )
    
    self.layer9 = nn.Sequential(
        nn.Linear(in_features=4096, out_features=4096, bias=True),
        nn.ReLU()
        )
    
    self.layer10 = nn.Sequential(
        nn.Linear(in_features=4096, out_features=1000, bias=True),
        nn.Softmax()
        )
    
    
def forward(self, x):
    
    _output = self.layer1(x)
    _output = self.layer2(_output)
    _output = self.layer3(_output)
    _output = self.layer4(_output)
    _output = self.layer5(_output)
    _output = self.layer6(_output)
   # _output = self.avgpool(_output)
    _output = torch.flatten(_output, 1)
    _output = self.layer7(_output)
    _output = self.layer8(_output)
    _output = self.layer9(_output)
    _output = self.layer10(_output)
    
    return _output
</code></pre>
<p>This is my training part:</p>
<p>def train(_train_loader, _model, _num_epochs, _device, _criterion, _optimizer):</p>
<pre><code>try:
    
    _total_steps = len(_train_loader)
    
    for _epochs in range(_num_epochs):
        
        for i, (_images, _labels) in enumerate(_train_loader):
            
            _images = _images.to(_device)
            _labels = _labels.to(_device)
            
            # forward pass
            _outputs = _model(_images)
            _loss = _criterion(_outputs, _labels)
        
            # backward pass and optimization
            _optimizer.zero_grad()
            _loss.backward()
            _optimizer.step()
            
            if (i+1) % 100 == 0:
                print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}' .format(_epochs+1, _num_epochs, i+1, _total_steps, _loss.item()))
    
except Exception as error:
    print("An error occured while training")
    print(error)
    raise error
</code></pre>
<p>Initially I was getting:</p>
<p>RuntimeError: Given groups=1, weight of size [96, 3, 11, 11], expected input[100, 1, 28, 28] to have 3 channels, but got 1 channels instead</p>
<p>Then I changed the number of channels to 1, I got the above mentioned error. Please help me out to resolve this error!</p>

username: ptrblck
cooked: <p>The error is raised, if the spatial size of the input (and thus an intermediate activation) is too small for the model architecture.<br>
It seems you are using an input of <code>28x28</code> pixels, which would be too small for an AlexNet-like model, which was initially using inputs of <code>224x224</code>, so you would have to either resize the inputs to a larger size or modify the model (e.g. by removing layers).</p>

username: khushi-411
cooked: <p>Thanks, I understood!</p>