I don't think there is anything wrong with the code I have written, there appears to be duplicate images in the dataset. So my validation and test data is getting the same images, hence why the accuracy is so high.