I’ve trained a simple CNN until the training accuracy is >99% (so it overfits but for now I’m testing m,y ability to push test images through a pretrained network).
However when I reuse an image from the training data to look at the output it’s the same classification for every image I try with the same ‘probabilities’ when using softmax.
The code looks as below (I’ve tried to simplify it to it’s key points to see if I’m missing something really obvious).
tester = torch.load(IMG_PATH+'CategoricalNet.pt')
print(tester)
CategoricalNet(
(feature_extractor): Sequential(
(0): Conv2d(1, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(1): ReLU()
(2): Conv2d(64, 128, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(3): ReLU()
(4): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(6): Conv2d(128, 256, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(7): ReLU()
(8): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(classifier): Sequential(
(0): Dropout(p=0.25)
(1): Linear(in_features=65536, out_features=256, bias=True)
(2): ReLU()
(3): Dropout(p=0.25)
(4): Linear(in_features=256, out_features=10, bias=True)
)
)
test = fits.open("E:/Documents/Python_Scripts/CNN/TRAINING/EXAMPLE_DATA.fits")
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize([0], [1])])
data = transform(d.reshape(*d.shape, 1)).unsqueeze(0).float().cuda()
output = torch.nn.functional.softmax(tester(data),dim=1).cpu().detach().numpy()
print('TRUE LABEL=',test2[0].header['LABEL'])
print(output)
TRUE LABEL= 5
[[0.10622309 0.1435124 0.05875074 0.0495275 0.06827779 0.03227602
0.17474921 0.17845923 0.15276037 0.03546367]]
TEST LABEL= 7
And similarly for another test case:
TRUE LABEL= 0
[[0.10622309 0.1435124 0.05875074 0.0495275 0.06827779 0.03227602
0.17474921 0.17845923 0.15276037 0.03546367]]
TEST LABEL= 7
I’ve checked that the image transformation matches that in the training:
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize([0], [1])])
So I’m not sure why the predictions would be the same for every test case, any help on this matter would be greately appreciated!