So i have a network for image classification, for now there are just 2 classes, here is my network
class ActionNet(Module):
    def __init__(self, num_class=4):
        super(ActionNet, self).__init__()
        
        self.cnn_layer = Sequential(
            #conv1
            Conv2d(in_channels=1, out_channels=32, kernel_size=1, bias=False),
            BatchNorm2d(32),
            PReLU(num_parameters=32),
            MaxPool2d(kernel_size=3),
            #conv2
            Conv2d(in_channels=32, out_channels=64, kernel_size=1, bias=False),
            BatchNorm2d(64),
            PReLU(num_parameters=64),
            MaxPool2d(kernel_size=3),
            #flatten
            Flatten(),
            Linear(576, 128),
            BatchNorm1d(128),
            ReLU(inplace=True),
            Dropout(0.5),
            Linear(128, num_class)
        )
    
    def forward(self, x):
        x = self.cnn_layer(x)
        return x

then i train with 600 images without augmentation , 300 images each class. i split the data to 8:2 train:test. the result is good enough i get 87% accuracy for test data but the training loss and validation loss is far.
i trained data with cross entropy loss function with learning rate 0.001 and 50 epoch training.
here is my example training data
a01556×720 83 KB
class: A
s06505×720 80.9 KB
class: B
when i try to test with new data like this image (it should be non of those class):
ates413×546 49 KB
the result of output model is
tensor([[1.5626, 0.2562]], device='cuda:0', grad_fn=<AddmmBackward>)
which is 1.56 for class A and 0.25 class B, of course the result is class A but it should be non of them.
any advice for this would be appreciate, thank you