CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/main/009_CNN_002_Image_Classification_With_ANN.ipynb
Views: 47
CNN 2 - Training image classification models with ANNs
Important - Training image classifiers with plain ANNs isn't a good idea. We're training a model anyway just to see how good of a model we can get. You should never use ANNs for image classification.
Dataset:
Watch the previous video if you don't have the folder structure ready:
We'll need a quite a bit of imports:
Let's load in an arbitrary image:
Here's the shape (width, height, color channels):
If flattened, it would result in this many features:
We can reduce the number by a factor of 3 by grayscaling the image
We still know it's a cat, no matter if we lose the color info:
It's still a lot, so let's resize the image to something smaller
Let's say 96x96:
Much less features:
This is how you can flatten the image and store it as an array:
The values aren't in an ideal range (0-255)
Neural network model prefers 0-1 range
Let's transform it:
Finally, let's implement all of this in a single function:
And let's test it:
It works as expected, so let's apply the same logic to the entire dataset next.
Process the entire dataset
Let's declare a function that will process all images in a given folder
The function returns processed images as a Pandas DataFrame
We'll add an additional column just so we know the class:
And now let's build ourselves training, validation, and test sets
We'll start with the training set
Process both cat and dog images
Concatenate the two datasets
Save them in a pickle format, just so you don't have to go through the entire process again
Now for the test set:
And finally for the validation set:
Additional processing
Datasets now contain images of cats first, followed by images of dogs
We want to shuffle those datasets, so a neural network goes through the images in a random order:
Separate the features from the target:
We need to factorize the target variable
For example, if our classes are ['cat', 'dog'], the function will convert them to integers [0, 1]
Then, each instance is represented as follows:
Cat: [1, 0]
Dog: [0, 1]
Training the model
The architecture and parameters are completely random
Set it to whatever you want
We have two nodes at the output layer
Represents two classes - cat and dog
We're using Categorical Crossentropy as a loss function because we have two categories - cat and dog
The model is trained for 100 epochs with a batch size of 128:
Inspecting performance
It doesn't look like the best model, as ANNs aren't the best tool for image data
Let's visualize training loss vs. validation loss and training accuracy vs. validation accuracy
The performance is terrible
60% accuracy for a binary classifier is almost useless
Convolutions can help, and you'll see how in the following notebook