Let's get used to the sensorflow framework and understand how CNN is work!
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
cifar10 = tf.keras.datasets.cifar10
#bring CIFAR10 dataset from tensorflow
(train_images,train_labels),(test_images,test_labels) = cifar10.load_data()
#load data separately in to train_images,train_label,test_images,test_data
#check each dataset shape and number of data size
print(train_images.shape)
print(len(train_images))
print(test_images.shape)
print(len(test_images))
#data visualization
plt.figure(figsize=(3,3)) # draw figure
for i in range(9):
plt.subplot(3,3,i+1) # subplot into 3*3 array shape
plt.imshow(train_images[i])
plt.colorbar()
plt.grid(False)
plt.show()
#model building
model = tf.keras.Sequential([
tf.keras.layers.experimental.preprocessing.Rescaling(1./255),
# normalize dataset values to between 0-1
tf.keras.layers.Conv2D(32, 3, activation='relu'),
# convolutional layer with 32 many and 3*3 sized kernels , use ReLu for activation function
tf.keras.layers.MaxPooling2D(),
# maxpooling layers
tf.keras.layers.Conv2D(64, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(128, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
# flatten layers from n dimension array form to 1 dimension
tf.keras.layers.Dense(128, activation='relu'),
# connect 128 nodes using dense layer
tf.keras.layers.Dense(10)
# because we want 10 different classes to be defined connect to 10 nodes
])
#model.summary()
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# compile model using 'adam' for optimizer, crossentropy for loss function
model.fit(train_images, train_labels, epochs=15)
# actually train model epochs(=15) times
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
# check the result value of loss and accuracy
print('\nTest accuracy:', test_acc)