So I have been working on fruits classification problem whose dataset is available on kaggle. It contains 120 classes of different fruits type and has image size of 100x100. I am doing transfer learning by fine-tuning the ResNet-50 model. I split the dataset into train, validation and test sets and after 10 epochs, it has 99.7% validation accuracy and is doing an amazing job of classifying test images as you can see here:
But when I try testing it on a few images from google, it is just predicting one class. Even when I try to use a random image from test set, it just outputs the same class. My code is here:
loader = transforms.Compose([transforms.Resize(224), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) # Since the model inputs images of size 100x100 # need to resize them before feeding them to `loader` h = 100 w = 100 img_path = test_dir + '/Dates/80_100.jpg' # img_path = 'avocado.jpg' img = Image.open(img_path) img = img.resize((h, w)) img = loader(img) img = torch.unsqueeze(img, 0) print(img.shape) model.eval() result = model(img) print(result.shape) _, preds_tensor = torch.max(result, 1) preds = np.squeeze(preds_tensor.numpy()) print(class_names[preds])
I even tried the solution discussed here but still getting the same result as above. Any help will be appreciated. Thank you in advance.