RuntimeError: Given groups=1, weight of size [128, 1, 5], expected input[2, 32, 187] to have 1 channels, but got 32 channels instead

My CNN model is as follows:

class ConvNormPool(nn.Module):
“”“Conv Skip-connection module”""
def init(
self,
input_size,
hidden_size,
kernel_size,
norm_type=‘bachnorm’
):
super().init()

    self.kernel_size = kernel_size
    self.conv_1 = nn.Conv1d(
        in_channels=input_size,
        out_channels=hidden_size,
        kernel_size=kernel_size
    )
    self.conv_2 = nn.Conv1d(
        in_channels=hidden_size,
        out_channels=hidden_size,
        kernel_size=kernel_size
    )
    self.conv_3 = nn.Conv1d(
        in_channels=hidden_size,
        out_channels=hidden_size,
        kernel_size=kernel_size
    )
    self.swish_1 = Swish()
    self.swish_2 = Swish()
    self.swish_3 = Swish()
    if norm_type == 'group':
        self.normalization_1 = nn.GroupNorm(
            num_groups=8,
            num_channels=hidden_size
        )
        self.normalization_2 = nn.GroupNorm(
            num_groups=8,
            num_channels=hidden_size
        )
        self.normalization_3 = nn.GroupNorm(
            num_groups=8,
            num_channels=hidden_size
        )
    else:
        self.normalization_1 = nn.BatchNorm1d(num_features=hidden_size)
        self.normalization_2 = nn.BatchNorm1d(num_features=hidden_size)
        self.normalization_3 = nn.BatchNorm1d(num_features=hidden_size)
        
    self.pool = nn.MaxPool1d(kernel_size=2)
    
def forward(self, input):
    #print("INPUT SHAPE SKIP")
    #print(input.shape)
    conv1 = self.conv_1(input)
    x = self.normalization_1(conv1)
    x = self.swish_1(x)
    x = F.pad(x, pad=(self.kernel_size - 1, 0))
    
    x = self.conv_2(x)
    x = self.normalization_2(x)
    x = self.swish_2(x)
    x = F.pad(x, pad=(self.kernel_size - 1, 0))
    
    conv3 = self.conv_3(x)
    x = self.normalization_3(conv1+conv3)
    x = self.swish_3(x)
    x = F.pad(x, pad=(self.kernel_size - 1, 0))   
    
    x = self.pool(x)
    return x

class CNN(nn.Module):
def init(
self,
input_size = 1,
hid_size = 256,
kernel_size = 5,
num_classes = 5,
):

    super().__init__()
    
    self.conv1 = ConvNormPool(
        input_size=input_size,
        hidden_size=hid_size,
        kernel_size=kernel_size,
    )
    self.conv2 = ConvNormPool(
        input_size=hid_size,
        hidden_size=hid_size//2,
        kernel_size=kernel_size,
    )
    self.conv3 = ConvNormPool(
        input_size=hid_size//2,
        hidden_size=hid_size//4,
        kernel_size=kernel_size,
    )
    self.avgpool = nn.AdaptiveAvgPool1d((1))
    self.fc = nn.Linear(in_features=hid_size//4, out_features=num_classes)
    ***self.softmax = nn.LogSoftmax(dim=1)***
    
def forward(self, input):
    #print("INPUT SHAPE is ")
    #print(input.shape)
    #print("INPUT SHAPE is ")
    #print(input.shape)
    #input = input.unsqueeze(1)
    #input = input.unsqueeze(0)
    x = self.conv1(input)
    x = self.conv2(x)
    x = self.conv3(x)
    x = self.avgpool(x)        
    # print(x.shape) # num_features * num_channels log_
    x = x.view(-1, x.size(1) * x.size(2)) 
    x = F.softmax(self.fc(x), dim=1) #x = F.softmax(self.fc(x), dim=1) x = F.log_softmax(self.fc(x), dim=1)
    return x

m1=CNN(m1=CNN(num_classes=5, hid_size=128).to(device)
n I call summary(m1,(32,187))
It gives error :slightly_smiling_face:
RuntimeError: Given groups=1, weight of size [128, 1, 5], expected input[2, 32, 187] to have 1 channels, but got 32 channels instead

How Can I remove this??

However when I use:
summary(m1, (1,187),32):
I get summary as:

Layer (type) Output Shape Param #

        Conv1d-1             [32, 128, 183]             768
   BatchNorm1d-2             [32, 128, 183]             256
         Swish-3             [32, 128, 183]               0
        Conv1d-4             [32, 128, 183]          82,048
   BatchNorm1d-5             [32, 128, 183]             256
         Swish-6             [32, 128, 183]               0
        Conv1d-7             [32, 128, 183]          82,048
   BatchNorm1d-8             [32, 128, 183]             256
         Swish-9             [32, 128, 183]               0
    MaxPool1d-10              [32, 128, 93]               0
 ConvNormPool-11              [32, 128, 93]               0
       Conv1d-12               [32, 64, 89]          41,024
  BatchNorm1d-13               [32, 64, 89]             128
        Swish-14               [32, 64, 89]               0
       Conv1d-15               [32, 64, 89]          20,544
  BatchNorm1d-16               [32, 64, 89]             128
        Swish-17               [32, 64, 89]               0
       Conv1d-18               [32, 64, 89]          20,544
  BatchNorm1d-19               [32, 64, 89]             128
        Swish-20               [32, 64, 89]               0
    MaxPool1d-21               [32, 64, 46]               0
 ConvNormPool-22               [32, 64, 46]               0
       Conv1d-23               [32, 32, 42]          10,272
  BatchNorm1d-24               [32, 32, 42]              64
        Swish-25               [32, 32, 42]               0
       Conv1d-26               [32, 32, 42]           5,152
  BatchNorm1d-27               [32, 32, 42]              64
        Swish-28               [32, 32, 42]               0
       Conv1d-29               [32, 32, 42]           5,152
  BatchNorm1d-30               [32, 32, 42]              64
        Swish-31               [32, 32, 42]               0
    MaxPool1d-32               [32, 32, 23]               0
 ConvNormPool-33               [32, 32, 23]               0

AdaptiveAvgPool1d-34 [32, 32, 1] 0
Linear-35 [32, 5] 165

Total params: 269,061
Trainable params: 269,061
Non-trainable params: 0

Input size (MB): 0.02
Forward/backward pass size (MB): 74.56
Params size (MB): 1.03
Estimated Total Size (MB): 75.61

IS MY MODEL CORRECT??
HAVE I PUT ALL LAYERS IN PLACE?
How do I corect the 1st error?

ALSO, self.softmax = nn.LogSoftmax(dim=1) needs to be inserted??I am using CROSSENTROPYLOSS

Just change your input size to 32.