I am getting the following error message: “mat1 and mat2 shapes cannot be multiplied (448x4 and 576x10)”.
I am trying to do Layer Wise Relevance Propagation according to this tutorial: Layer Wise Relevance Propagation In Pytorch – GiorgioML – Ph.D. Student in Computer Science, MSU
Here is the NN class:
class Cnn(nn.Module): def __init__(self): super(Cnn,self).__init__() self.layer1 = nn.Sequential( nn.Conv2d(3,16,kernel_size=3, padding=0,stride=2), nn.BatchNorm2d(16), nn.ReLU(), nn.MaxPool2d(2) ) self.layer2 = nn.Sequential( nn.Conv2d(16,32, kernel_size=3, padding=0, stride=2), nn.BatchNorm2d(32), nn.ReLU(), nn.MaxPool2d(2) ) self.layer3 = nn.Sequential( nn.Conv2d(32,64, kernel_size=3, padding=0, stride=2), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2) ) self.fc1 = nn.Linear(3*3*64,10) self.fc2 = nn.Linear(10,2) self.relu = nn.ReLU() def forward(self,x): out = self.layer1(x) out = self.layer2(out) out = self.layer3(out) out = out.view(out.size(0),-1) out = self.relu(self.fc1(out)) out = self.fc2(out) return out
I have used this to train a network to do binary classification, and am now trying to run Layer Wise Relevance Propagation on it. Here is the part of the LRP code where I am getting the error:
def LRP_individual(model, X, device): # Get the list of layers of the network layers = [module for module in model.modules() if not isinstance(module, torch.nn.Sequential)][1:] # Propagate the input L = len(layers) A = [X] + [X] * L # Create a list to store the activation produced by each layer for layer in range(L): A[layer + 1] = layers[layer].forward(A[layer]) # Rest of the LRP function
I would be very grateful for an explanation or solution to this problem.