Deskripsi
Pada praktikum ini kita akan membuat model klasifikasi CNN sederhana pada kasus citra kucing dan anjing.
Dataset
Dataset merupakan data citra anjing dan kucing yang telah dibagi menjadi data training dan data testing. Dikarenakan data cukup besar, pastikan koneksi Anda sebelum mengunduh dataset.
DOWNLOAD
Langkah 1 - Import Library
Copy import tensorflow as tf
from keras . preprocessing . image import ImageDataGenerator
Langkah 2 - Pra Pengolahan Data
Pada tahap ini kita akan sedikit melakukan manipulasi pada citra yang digunakan. Manipulasi yang dilakukan diantaranya adalah normalisasi nilai piksel, koreksi kemiringan, pembesaran (zoom), dan flip.
Langkah 2.1. Pra Pengolahan Data Training
Copy train_datagen = ImageDataGenerator (rescale = 1 . / 255 ,
shear_range = 0.2 ,
zoom_range = 0.2 ,
horizontal_flip = True )
training_set = train_datagen . flow_from_directory ( 'dataset/training_set' ,
target_size = ( 64 , 64 ),
batch_size = 32 ,
class_mode = 'binary' )
Langkah 2.2. Pra Pengolahan Data Testing
Copy test_datagen = ImageDataGenerator (rescale = 1 . / 255 )
test_set = test_datagen . flow_from_directory ( 'dataset/test_set' ,
target_size = ( 64 , 64 ),
batch_size = 32 ,
class_mode = 'binary' )
Langkah 3 - Pembuatan Model CNN
Langkah 3.1. - Inisiasi Model CNN
Copy cnn = tf . keras . models . Sequential ()
Langkah 3.2. - Pembuatan Layer Konvolusi 1
Copy cnn . add (tf.keras.layers. Conv2D (filters = 32 , kernel_size = 3 , activation = 'relu' , input_shape = [ 64 , 64 , 3 ]))
Langkah 3.3 - Pembuatan Layer Pooling 1
Copy cnn . add (tf.keras.layers. MaxPool2D (pool_size = 2 , strides = 2 ))
Langkah 3.4 - Pembuatan Layer Konvolusi 2 dan Pooling 2
Copy cnn . add (tf.keras.layers. Conv2D (filters = 32 , kernel_size = 3 , activation = 'relu' ))
cnn . add (tf.keras.layers. MaxPool2D (pool_size = 2 , strides = 2 ))
Langkah 3.5 - Flattening
Copy cnn . add (tf.keras.layers. Flatten ())
Langkah 3.6 - Fully Connected Layer 1 (Input)
Copy cnn . add (tf.keras.layers. Dense (units = 128 , activation = 'relu' ))
Langkah 3.7 - Fully Connected Layer 2 (Output)
Copy cnn . add (tf.keras.layers. Dense (units = 1 , activation = 'sigmoid' ))
Langkah 3.8 - Compile Model CNN
Copy cnn . compile (optimizer = 'adam' , loss = 'binary_crossentropy' , metrics = [ 'accuracy' ])
Penggunaan loss function binary crossentropy dikarenakan kita hanya melakukan klasifikasi pada dua kelas, yaitu kucing dan anjing.
Langkah 4 - Fit CNN
Copy cnn . fit (x = training_set, validation_data = test_set, epochs = 25 )
Langkah 5 - Prediksi dengan 1 Citra
Pada langkah ini, kita akan mencoba melakukan prediksi pada 1 citra anjing dan kucing.
Copy import numpy as np
from keras . preprocessing import image
test_image = image . load_img ( 'dataset/single_prediction/cat_or_dog_1.jpg' , target_size = ( 64 , 64 ))
test_image = image . img_to_array (test_image)
test_image = np . expand_dims (test_image, axis = 0 )
result = cnn . predict (test_image)
training_set . class_indices
if result [ 0 ] [ 0 ] == 1 :
prediction = 'dog'
else :
prediction = 'cat'