Week 04
Week 04
IoT Applications
AI on Embedded Device
Woojin Jeong
CNN (Convolutional Neural Network)
2
Convolutional Neural Network (CNN or ConvNet)
Source : https://en.wikipedia.org/wiki/Convolutional_neural_network
https://bdtechtalks.com/2020/01/06/convolutional-neural-ne
tworks-cnn-convnets/
3
CNN : LeNet-5
Source : http://vision.stanford.edu/cs598_spring07/papers/Lecun98.pdf
4
CNN : AlexNet
Source :
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolut
ional-neural-networks.pdf
5
CNN Structure
Source : https://developersbreach.com/convolution-neural-network-deep-learning/ 6
CNN : Differences
7
CNN : Layers
● Convolutional Layer
● Pooling Layer
● Fully-Connected Layer (Regular NN)
8
CNN : Convolutional Layers
● Convolution
data kernel/filter
Source : https://mlnotebook.github.io/post/CNN1/
9
CNN : Convolutional Layers
● Convolution
Source : https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
10
CNN : Convolutional Layers
● Convolution
Source : https://mlnotebook.github.io/post/CNN1/
11
CNN : Convolutional Layers
● Convolution for Multiple channels
Source : https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
12
CNN : Convolutional Layers
● Convolution for Multiple channels
Source : https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
13
CNN : Convolutional Layers
● Convolution for Multiple channels
Source : https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
14
CNN : Multiple Convolutional Layers
Source : https://bdtechtalks.com/2020/01/06/convolutional-neural-networks-cnn-convnets/
15
CNN : Multiple Convolutional Layers
Source : https://bdtechtalks.com/2020/01/06/convolutional-neural-networks-cnn-convnets/
16
CNN : Pooling Layers
● To progressively reduce the spatial size of the representation to reduce the
amount of parameters and computation in the network.
Source : https://bdtechtalks.com/2020/01/06/convolutional-neural-networks-cnn-convnets/
17
CNN : Pooling Layers
Source : https://cs231n.github.io/convolutional-networks/
18
CNN : Pooling Layers
max pooling
Source : https://cs231n.github.io/convolutional-networks/
19
CNN : Pooling Layers
max pooling
Source : https://cs231n.github.io/convolutional-networks/
20
CNN : Pooling Layers
max pooling
Source : https://cs231n.github.io/convolutional-networks/
21
CNN : Pooling Layers
Source : https://cs231n.github.io/convolutional-networks/
22
CNN
● CNN : https://cs231n.github.io/convolutional-networks/
23
CIFAR-10, CNN, Keras, Tensorflow
24
CIFAR-10
25
CIFAR-10
Source : http://www.cs.toronto.edu/~kriz/cifar.html
26
CIFAR-10 with CNN in Tensorflow & Keras
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images=train_images/255.0
test_images=test_images/255.0
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
SparseCategoricalCrossentropy(from_logits=True),
model.compile(optimizer='adam', loss=tf.keras.losses.
metrics=['accuracy'])
history=model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
27
CIFAR-10 with CNN in Tensorflow & Keras
import tensorflow as tf
Import modules
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images=train_images/255.0
test_images=test_images/255.0
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(
from_logits=True),
metrics=['accuracy'])
history=model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
28
CIFAR-10 with CNN in Tensorflow & Keras
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images=train_images/255.0
Prepare data for training
test_images=test_images/255.0
& testing
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history=model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
29
CIFAR-10 with CNN in Tensorflow & Keras
30
CIFAR-10 with CNN in Tensorflow & Keras
class_names = ['airplains', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
plt.figure(figsize=(10,10))
for i in range(25) :
plt.subplot(5,5,i+1) Display first 25 images
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i][0]])
plt.show()
31
CIFAR-10 with CNN in Tensorflow & Keras
class_names = ['airplains', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
plt.figure(figsize=(10,10))
for i in range(25) :
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([]) Display first 25 images
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i][0]])
plt.show()
32
CIFAR-10 with CNN in Tensorflow & Keras
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images=train_images/255.0
test_images=test_images/255.0 Normalization
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history=model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
33
CIFAR-10 with CNN in Tensorflow & Keras
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images=train_images/255.0
test_images=test_images/255.0
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
Build network model
model.add(layers.Conv2D(64, (3,3), activation='relu'))
architecture
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history=model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
34
CIFAR-10 with CNN in Tensorflow & Keras
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
Build network model
model.add(layers.Conv2D(64, (3,3), activation='relu'))
architecture
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
35
CIFAR-10 with CNN in Tensorflow & Keras
Convolutional Layers
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
36
CIFAR-10 with CNN in Tensorflow & Keras
37
CIFAR-10 with CNN in Tensorflow & Keras
Shape of filter(kernel)
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
38
CIFAR-10 with CNN in Tensorflow & Keras
39
CIFAR-10 with CNN in Tensorflow & Keras
40
CIFAR-10 with CNN in Tensorflow & Keras
41
CIFAR-10 with CNN in Tensorflow & Keras
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.summary()
42
CIFAR-10 with CNN in Tensorflow & Keras
43
CIFAR-10 with CNN in Tensorflow & Keras
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10)) Full connected layers (Regular NN)
44
CIFAR-10 with CNN in Tensorflow & Keras
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.summary()
45
CIFAR-10 with CNN in Tensorflow & Keras
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
46
CIFAR-10 with CNN in Tensorflow & Keras
47
CIFAR-10 with CNN in Tensorflow & Keras
48
CIFAR-10 with CNN in Tensorflow & Keras
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images=train_images/255.0
test_images=test_images/255.0
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D(2,2))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(
from_logits=True),
metrics=['accuracy'])
history=model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
Training
49
CIFAR-10 with CNN in Tensorflow & Keras
50
CIFAR-10 with CNN in Tensorflow & Keras
51
CIFAR-10 with CNN in Tensorflow & Keras
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')
52
CIFAR-10 with CNN in Tensorflow & Keras
53
Assignment
54
Assignment
● Make CIFAR-10 CNN in this material
○ Train it 10 epochs → You will get similar accuracy & loss with this material
○ Train it 50 epochs
■ Get the training accuracy & validation accuracy graph.
■ Get the test loss & accuracy
■ SUBMIT : Training accuracy & validation accuracy graph screenshot
■ SUBMIT : Test accuracy screenshot
55
Assignment
● Zip all files in one zip file, due date Apr. 2(Tue).
● Do not submit early!!!
● Test & evaluate as may as possible models you can create.
● Assignment will be open from Monday!!! (Do not email me!!)
56