Here is the code for model… And it would be really helpful if you give a little information on my error.

```
class CNN(nn.Module):
def __init__(self, out_1=13, out_2=32):
super(CNN, self).__init__()
self.cnn1 = nn.Conv2d(in_channels=3, out_channels=out_1, kernel_size=3, padding=1)
self.relu1 = nn.ReLU()
self.maxpool1 = nn.MaxPool2d(kernel_size=2)
self.cnn2 = nn.Conv2d(in_channels=out_1, out_channels=out_2, kernel_size=5, stride=1, padding=0)
self.relu2 = nn.ReLU()
self.maxpool2 = nn.MaxPool2d(kernel_size=2)
self.fc1 = nn.Linear(out_2 * 23 * 23, 2)
def forward(self, x):
print(x.shape)
out = self.cnn1(x)
print(out.shape)
out = self.relu1(out)
out = self.maxpool1(out)
out = self.cnn2(out)
out = self.relu2(out)
out = self.maxpool2(out)
#print(out.shape)
out = out.view(out.size(0), -1)
out = self.fc1(out)
return out
def activations(self, x):
z1 = self.cnn1(x)
a1 = self.relu1(z1)
out = self.maxpool1(a1)
z2 = self.cnn2(out)
a2 = self.relu2(z2)
out = self.maxpool2(a2)
out = out.view(out.size(0),-1)
return z1, a1, z2, a2, out
```

If required this is the method by which I have trained the model…

```
n_epochs=3
loss_list=[]
accuracy_list=[]
N_test=len(validation_dataset)
def train_model(n_epochs):
for epoch in range(n_epochs):
for x, y in train_loader:
optimizer.zero_grad()
z = net(x)
loss = criterion(z, y)
loss.backward()
optimizer.step()
correct=0
#perform a prediction on the validation data
for x_test, y_test in validation_loader:
z = net(x_test)
_, yhat = torch.max(z.data, 1)
correct += (yhat == y_test).sum().item()
accuracy = correct / N_test
accuracy_list.append(accuracy)
loss_list.append(loss.data)
train_model(n_epochs)
```

Additional Information

2 classes each having 624 images and shape 3x100x100