Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory

Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory - Hallo sahabat pawang bisnis, Pada sharing INFO TEKNIK berjudul Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory, saya telah menulis sebuah artikel. mudah-mudahan isi postingan dapat bermanfaat dan mudah anda pahami. okelah, ini dia isi contennya.

Artikel : Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory
Judul : Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory


Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory

Artikel Tugas Kuliah,
        Assalamu'alaikum Wr. Wb. pada kesempatan kali ini saya ingin membagikan tutorial membuat program deep learning menggunakan metode CNN pada Google Colaboratory dengan bahasa pemrograman Python. Program yang dibuat pada tutorial ini digunakan untuk melakukan klasifikasi dari tiga varietas beras, yaitu Beras Basmathi, IR-64, dan Ketan. Framework (kerangka kerja) yang digunakan pada tutorial ini menggunakan Keras dan TensorFlow yang dapat diimpor secara langsung pada Google Colab. Arsitektur CNN yang digunakan adalah MobileNetV1 dengan metode Feature Extraction. Feature Extraction itu sendiri adalah teknik mentransfer hasil pelatihan dari arsitektur CNN yang sudah dilatih sebelumnya (pada kasus ini arsitektur MobileNet yang dilatih pada dataset ImageNet). Metode tersebut saya pilih karena dataset yang saya gunakan jumlahnya sangat sedikit.
        Sebelum lanjut ke pembuatan programnya, kita harus tahu terlebih dahulu bagaimana cara menyimpan dataset pada Github dan mengambil dataset tersebut ke tempat penyimpanan sementara yang disediakan oleh Google Colab. Dataset yang kita buat disimpan pada Github agar tidak perlu meng-upload ulang dari awal ke penyimpanan sementara pada Google Colab melainkan hanya menyalin dataset dari Github ke penyimpanan sementara Google Colab tersebut. Jika Anda belum mengerti cara menyimpan dataset pada Github, Anda dapat membuka link tutorial membuat repositori di Github. Jika sudah mengerti langsung saja menuju langkah-langkah pembuatannya.
  1. Pertama buka Google Colab dan login ke akun Google milik Anda, jika sudah masuk maka klik "New Notebook" seperti pada tampilan di bawah ini.
  2. Jika Anda ingin mengubah tampilannya menjadi dark mode/gelap maka dapat diubah dengan cara klik menu "Tools" kemudian pilih "Settings".
  3. Pada jendela pop up "Settings" ubah pengaturannya seperti pada gambar berikut.
  4. Tampilan awal dari Google Colaboratory akan tampil seperti berikut.
  5. Agar proses jalannya program dapat berjalan dengan lebih cepat maka dapat diganti pengaturan jenis runtime-nya menjadi GPU seperti pada gambar.
  6. Kemudian pilih GPU pada Hardware Accelerator dan klik "SAVE".
  7. Selanjutnya klik ikon "+ Text" untuk menambahkan baris sel teks/nootebok baru.
  8. Setelah muncul baris sel teks baru maka Anda dapat mengetik catatan secara langsung.
  9. Untuk mengubah level heading tulisan dapat dilakukan dengan klik menu heading pada toolbar format text pada baris sel teks atau dengan mengetik "#" pada sel tersebut.
  10. Untuk memindahkan posisi baris selnya dapat dilakukan dengan klik ikon panah atas untuk menggeser ke atas atau bawah untuk menggeser ke bawah satu baris. Notebook baris sel teks 1 :
    1. # **Klasifikasi 3 Varietas Beras**
  11. Kemudian dilanjutkan membuat program untuk mengambil dataset dari Github pada baris sel kode program, maka tampilannya akan seperti berikut. Notebook baris sel teks 2 :
    1. # Mengambil *Dataset* dari *Github*
    Source code program baris sel kode program 1 :
    1. !apt-get install subversion > /dev/null
    2. !svn export https://github.com/Soedirman-Machine-Learning/rice-varieties-classification/trunk/data > /dev/null
  12. Setelah program tersebut dijalankan maka seluruh dataset yang sudah disimpan di Github akan disalin pada browser direktori penyimpanan sementara Google Colab.
  13. Setelah itu menambah baris sel kode baru di bawahnya dengan klik ikon "+ Code" untuk mengimpor library yang dibutuhkan, setelah dijalankan maka hasil output dari program tersebut akan ditampilkan di bagian bawah tiap baris programnya. Notebook Subheading Persiapan :
    1. Program ini dibuat untuk membedakan 3 varietas beras yaitu :

    2. 1.   Varietas Beras Basmathi
    3. 2.   Varietas Beras IR 64
    4. 3.   Varietas Beras Ketan

    5. Pada program ini menggunakan metode *Convolutional Neural Network* (CNN) untuk melakukan klasifikasinya.
    Source code program untuk mengimpor library yang dibutuhkan :
    1. from __future__ import absolute_import, division, print_function, unicode_literals

    2. try:
    3.   # The %tensorflow_version magic only works in colab.
    4.   %tensorflow_version 2.x
    5. except Exception:
    6.   pass
    7. import numpy as np 
    8. import math, os, sys
    9. import itertools

    10. import matplotlib.pyplot as plt
    11. plt.style.use('default')
    12. from scipy import ndimage

    13. from skimage import measure, morphology
    14. from skimage.io import imsave, imread
    15. from skimage.filters import threshold_otsu
    16. from skimage.transform import resize

    17. import tensorflow as tf
    18. from sklearn import svm, datasets
    19. from sklearn.metrics import confusion_matrix
    20. import pandas as pd
  14. Selanjutnya menampilkan list file gambar dataset berformat ".jpg" yang diimpor
    1. #Perintah di bawah ini untuk melihat list bagian dari file yang sudah diunduh dari Github
    2. !ls data/image
    3. !ls data/image/train
    4. !ls data/image/train/Basmathi
    5. !ls data/image/train/IR64
    6. !ls data/image/train/Ketan
  15. Source code selanjutnya untuk menampilkan sebuah gambar dari data train
    1. #Perintah untuk memvisualisasikan satu gambar dari data train
    2. image = imread("data/image/train/IR64/I17.jpg")
    3. plt.figure(figsize=(3,3))
    4. plt.imshow(image)
  16. Memuat dataset pelatihan, dataset validasi dan dataset pengujian
    1. #Memuat semua gambar ke memori untuk pertama kali

    2. #Memuat dataset pelatihan
    3. IMAGE_SIZE = 224
    4. BATCH_SIZE = 128
    5. base_dir = os.path.join('data/image/train')

    6. datagen = tf.keras.preprocessing.image.ImageDataGenerator(
    7.     rescale=1./255, 
    8.     validation_split=0.2)

    9. train_generator = datagen.flow_from_directory(
    10.     base_dir,
    11.     target_size=(IMAGE_SIZE, IMAGE_SIZE),
    12.     batch_size=BATCH_SIZE, 
    13.     subset='training')

    14. val_generator = datagen.flow_from_directory(
    15.     base_dir,
    16.     target_size=(IMAGE_SIZE, IMAGE_SIZE),
    17.     batch_size=BATCH_SIZE, 
    18.     subset='validation')

    19. #Memuat dataset pengujian
    20. X_test = []
    21. y_test = []
    22. labels = ['Basmathi', 'IR64', 'Ketan']

    23. for i,label in enumerate(labels):
    24.     folder = os.path.join("data/image/test",label)
    25.     files = sorted(os.listdir(folder))
    26.     files = [x for x in files if x.endswith(".jpg")]
    27.     for k,file in enumerate(files):
    28.         image_path = os.path.join(folder, file)
    29.         
    30.         image = imread(image_path)/255.
    31.         image = resize(image,(224,224))
    32.         X_test.append(image)
    33.         category = os.path.split(folder)[-1]
    34.         y_test.append(i)

    35. X_test = np.array(X_test)
    36. y_test = np.array(y_test)

    37. #Menampilkan bentuk dari masing-masing dataset
    38. for image_batch, label_batch in train_generator:
    39.   break
    40. print("Bentuk array dari dataset train (pelatihan) adalah:", image_batch.shape,label_batch.shape)
    41. for image_batch, label_batch in val_generator:
    42.   break
    43. print("Bentuk array dari dataset validation (validasi) adalah:", image_batch.shape,label_batch.shape)
    44. print("Bentuk array dari dataset test (pengujian) adalah:", X_test.shape,y_test.shape)
  17. Menyimpan label varietas beras secara berurutan dalam format file ".txt"
    1. print (train_generator.class_indices)

    2. labels_txt = '\n'.join(sorted(train_generator.class_indices.keys()))

    3. with open('labels.txt', 'w') as f:
    4.   f.write(labels_txt)
    1. !cat labels.txt
  18. Membuat Model dari Jaringan CNN yang Sudah dipelajari Sebelumnya (pre-trained convnets). Pada tutorial ini menggunakan arsitektur MobileNet, jika Anda ingin menggunakan arsitektur yang lain dapat mengunjungi https://keras.io/applications/.
    1. IMG_SHAPE = (224, 224, 3)
    2. # Membuat model dasar (base model) dari pre-trained model MobileNet
    3. base_model = tf.keras.applications.MobileNet(input_shape=IMG_SHAPE,
    4.                                               include_top=False, 
    5.                                               weights='imagenet')
  19. Notebook Metode Feature Extraction (Transfer Learning)
    1. Menggunakan model pre-trained untuk ekstraksi fitur (feature extraction) : Ketika bekerja dengan dataset kecil, adalah umum untuk mengambil keuntungan dari fitur yang dipelajari oleh model yang dilatih pada dataset yang lebih besar dalam domain yang sama. Ini dilakukan dengan membuat contoh model pre-trained dan menambahkan classifier yang sepenuhnya terhubung di atas. Model pre-trained adalah "beku" dan hanya bobot pengklasifikasi yang diperbarui selama pelatihan. Dalam hal ini, basis konvolusional mengekstraksi semua fitur yang terkait dengan setiap gambar dan Anda baru saja melatih classifier yang menentukan kelas gambar mengingat set fitur yang diekstraksi.
    Source code Feature Extraction
    1. base_model.trainable = False
    2. base_model.summary()
  20. Mengelompokkan Klasifikasi Tiga Jenis Beras dengan Deep learning Menggunakan Metode Convolutional Neural Network (CNN).
  21. Notebook klasifikasi 3 varietas beras dengan CNN :
    1. Sesudah mengimpor dataset, kita akan menggunakan CNN, salah satu arsitektur Deep Learning yang dapat menghandle gambar. Dengan menggunakan Deep CNN, kita dibebaskan dari pendefinisian fitur yang cocok dan hanya memberikan gambar-gambar ke jaringan. CNN akan menentukan fitur yang paling cocok untuk pengklasifikasian.
    Library untuk klasifikasi 3 kelas varietas beras :
    1. import keras
    2. from keras import backend as K
    3. from keras.models import Sequential
    4. from keras import layers
    5. from keras.utils.np_utils import to_categorical

    6. from sklearn.model_selection import train_test_split
  22. Mempersiapkan Data Masukkan Pengujian
    1. y_test2 = to_categorical(y_test)
    2. X_test3, y_test3 = (X_test, y_test2)
  23. Pembuatan Model (Menambah Model untuk Melakukan Klasifikasi)
    1. model = tf.keras.Sequential([
    2.     base_model,    
    3.     tf.keras.layers.Conv2D(32, 3, activation='relu'),
    4.     #tf.keras.layers.Dropout(0.2),
    5.     tf.keras.layers.GlobalAveragePooling2D(),
    6.     tf.keras.layers.Dense(3, activation='softmax')
    7. ])

    8. model.compile("adam",loss="categorical_crossentropy",metrics=["acc"])
    9. model.summary()
  24. Pelatihan Model Arsitektur CNN yang dibuat pada Dataset Pelatihan dan Validasi
    1. #from keras.callbacks import EarlyStopping, ModelCheckpoint

    2. #Menyimpan file model bobot yang terbaik selama pelatihan (dalam format keras ".h5")
    3. #ckpt = ModelCheckpoint("Klasifikasi Beras Tumpukan.h5", monitor='val_loss', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
    4. history = model.fit_generator(train_generator, 
    5.                     epochs=100, 
    6.                     validation_data=val_generator)
    7. #history = model.fit(x = X_train3, y = y_train3, batch_size=120, epochs= 100,validation_data=(X_valid3,y_valid3),callbacks = [ckpt])
  25. Menggambarkan Hasil Pelatihan dalam Bentuk Grafik yang dilakukan Selama 100 Epochs
    1. plt.plot(history.history["acc"],label="Akurasi Pelatihan")
    2. plt.plot(history.history["val_acc"],label="Validasi Akurasi")
    3. plt.legend()
    4. plt.show()

    5. plt.plot(history.history["loss"],label="Kesalahan Pelatihan")
    6. plt.plot(history.history["val_loss"],label="Validasi Kesalahan")
    7. plt.legend()
    8. plt.show()
  26. Menggunakan Model untuk Melihat Hasil Pelatihan antara Dataset Pelatihan dan Validasi.
  27. Source code model hasil pelatihan :
    1. #Prediksi Label Validasi dengan Pelatihan
    2. n = 44
    3. input_image = image_batch[n][np.newaxis,...]
    4. print("Labelnya adalah: ", label_batch[n])

    5. predictions = model.predict(input_image)
    6. print("Prediksinya adalah",predictions[0])
    Notebook model hasil pelatihan :
    1. Hasil tersebut merupakan hasil prediksi dari training dari 3 jenis data pelatihan yaitu jenis beras Basmathi, IR 64, dan Ketan. Menggunakan inputan gambar dengan piksel 224 x 224, 1 filter dengan fungsi aktivasi relu, dan 1 layer output dengan fungsi aktivasi softmax
  28. Evaluasi Model Hasil Pelatihan dengan Dataset Pengujian
    1. #Memeriksa matriks model
    2. print(model.metrics_names)
    3. #Evaluasi data test
    4. print(model.evaluate(x= X_test3, y = y_test3))
    1. #Menampilkan matriks yang benar dan matriks hasil prediksi

    2. #Label yang benar
    3. y_true = np.argmax(y_test2,axis=1)

    4. #Label prediksi
    5. Y_pred = model.predict(X_test)
    6. y_pred = np.argmax(Y_pred, axis=1)

    7. print(y_true)
    8. print(y_pred)
  29. Hasil Prediksi dari setiap Gambar Dataset Pengujian
    1. n = 44 #Jangan melampaui (nilai dari gambar test - 1)

    2. plt.imshow(X_test[n])
    3. plt.show()

    4. true_label = np.argmax(y_test2,axis=1)[n]
    5. print("Label yang benar adalah:",true_label,":",labels[true_label])
    6. prediction = model.predict(X_test[n][np.newaxis,...])[0]
    7. print("Nilai yang diprediksi adalah:",prediction)
    8. predicted_label = np.argmax(prediction)
    9. print("Label yang diprediksi adalah:",predicted_label,":",labels[predicted_label])

    10. if true_label == predicted_label:
    11.     print("Prediksi benar")
    12. else:
    13.     print("Prediksi salah")
  30. Confusion Matrix dari Hasil Pengujian Setiap Dataset Varietas Beras
    1. from sklearn.metrics import confusion_matrix
    2. from sklearn.utils.multiclass import unique_labels

    3. def plot_confusion_matrix(y_true, y_pred, classes,
    4.                           normalize=False,
    5.                           title=None,
    6.                           cmap=plt.cm.Blues):
    7.     """
    8.     This function prints and plots the confusion matrix.
    9.     Normalization can be applied by setting `normalize=True`.
    10.     """
    11.     if not title:
    12.         if normalize:
    13.             title = 'Normalized confusion matrix'
    14.         else:
    15.             title = 'Confusion matrix, without normalization'

    16.     # Compute confusion matrix
    17.     cm = confusion_matrix(y_true, y_pred)
    18.     # Only use the labels that appear in the data
    19.     #classes = classes[unique_labels(y_true, y_pred)]
    20.     if normalize:
    21.         cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
    22.         print("Normalized confusion matrix")
    23.     else:
    24.         print('Confusion matrix, without normalization')

    25.     print(cm)

    26.     fig, ax = plt.subplots(figsize=(5,5))
    27.     im = ax.imshow(cm, interpolation='nearest', cmap=cmap)
    28.     #ax.figure.colorbar(im, ax=ax)
    29.     # We want to show all ticks...
    30.     ax.set(xticks=np.arange(cm.shape[1]),
    31.            yticks=np.arange(cm.shape[0]),
    32.            # ... and label them with the respective list entries
    33.            xticklabels=classes, yticklabels=classes,
    34.            title=title,
    35.            ylabel='Label Benar',
    36.            xlabel='Label Prediksi')

    37.     # Rotate the tick labels and set their alignment.
    38.     plt.setp(ax.get_xticklabels(), rotation=45, ha="right",
    39.              rotation_mode="anchor")

    40.     # Loop over data dimensions and create text annotations.
    41.     fmt = '.2f' if normalize else 'd'
    42.     thresh = cm.max() / 2.
    43.     for i in range(cm.shape[0]):
    44.         for j in range(cm.shape[1]):
    45.             ax.text(j, i, format(cm[i, j], fmt),
    46.                     ha="center", va="center",
    47.                     color="white" if cm[i, j] > thresh else "black")
    48.     fig.tight_layout()
    49.     return ax


    50. np.set_printoptions(precision=2)

    51. plot_confusion_matrix(y_true, y_pred, classes=labels, normalize=True,
    52.                       title='Normalized confusion matrix')
  31. Menyimpan Hasil Model Pelatihan dan Konversi ke TensorFlow Lite.
  32. Notebook konversi model ke ".tflite"
    1. Menyimpan model menggunakan tf.saved_model.save dan kemudian mengonversi model tersimpan ke format yang kompatibel tf lite.
    Source code konversi model ke ".tflite"
    1. saved_model_dir = 'save/model'
    2. tf.saved_model.save(model, saved_model_dir)

    3. converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
    4. tflite_model = converter.convert()

    5. with open('Klasifikasi_3_Varietas_Beras_MobileNet.tflite', 'wb') as f:
    6.   f.write(tflite_model)
  33. Jika Anda ingin menjalankan seluruh program tersebut dari awal sampai akhir maka dapat menggunakan cara seperti berikut.
  34. Setelah seluruh program tersebut dijalankan maka akan didapat model hasil pelatihannya yang sudah dikonversi ke dalam format TensorFlow Lite beserta labelnya.
  35. Untuk menyimpan model dan labelnya dapat dilakukan dengan cara klik kanan pada file model dan labelnya kemudian pada pop up pilih "Download".
  36. Untuk menyimpan program beserta ouput-nya pada Github dapat dilakukan dengan cara membuka menu "File" kemudian pilih "Save a copy in Github".
  37. Selanjutnya Anda akan diminta masuk ke akun Github milik Anda.
  38. Masukkan kode verifikasi dari e-mail atau nomor HP Anda (jika ada).
  39. Kemudian pada jendela pop up "Copy to Github" pilih lokasi repositori Anda dan isi nama file ".ipynb" sesuai keinginan kemudian klik "OK".
  40. Selesai !!
Catatan :
  1. Bingkai textbox yang berwarna oranye merupakan isi pada baris sel Notebook, sedangkan yang berwarna ungu adalah Source code program yang dibuat pada baris sel kode Google Colab.
  2. Penulisan Notebook yang Anda buat dapat berbeda sesuai dengan keinginan.
  3. Untuk source code lengkapnya dapat dilihat di sini.
Video tutorial hasil pelatihannya dapat dilihat di bawah.

Terima kasih atas kunjungannya :)))
Tutorial selanjutnya adalah menerapkan model hasil pelatihan CNN di postingan ini pada perangkat Android pada link berikut.


Demikianlah Artikel Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory

Sekian Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory, mudah-mudahan bisa memberi manfaat untuk anda semua.

Anda sedang membaca artikel Deep Learning dengan Convolutional Neural Network (CNN) pada Google Colaboratory dan artikel ini url permalinknya adalah https://pawang-bisnis.blogspot.com/2020/02/deep-learning-dengan-convolutional.html Semoga artikel ini bisa bermanfaat.

Tag : ,