Pengenalan Convolution Neural Network – Part 2 Klasifikasi MNIST Handwritten Digits

Pengenalan Convolution Neural Network – Part 2 Klasifikasi MNIST Handwritten Digits

Kali ini kita akan merancang Convolutional Neural Network (CNN) untuk mengenali angka 0-9 yang ditulis dengan tangan. Dataset yang akan kita gunakan adalah MNIST Handwritten Dataset. MNIST dataset memiliki 70.000 citra. semua citra dalam dataset ini berukuran 28×28 piksel. Kita akan menggunakan data-data ini sebagai inputan atau masukan dan melatih model CNN untuk dapat membedakan angka-angka tersebut.

Pertama kita perlu memanggil module-module python dengan perintah import. kita akan menggunakan framework Tensorflow dan Keras untuk merancang CNN.

Tahap berikutnya adalah memanggil MNIST Dataset dari folder keras. tiap citra dalam dataset ini merupakan Numpy Array dengan ukuran 28×28 dengan nilai piksel antara 0-255. Tiap citra juga memiliki label atau target dengan nilai integer 0-9.

Nilai piksel dari citra dalam dataset akan dinormalisasi terlebih dahulu sebelum digunakan sebagai input untuk model CNN.

Contoh citra yang ada di dalam MNIST dataset seoerti berikut.


Untuk merancang model CNN, kita perlu untuk memanggil dan mengatur atribut layer yang dibutuhkan. Dengan menggunakan framework Keras, kita dapat dengan mudah membuat layer-layer tersebut untuk merancang model CNN.

Dengan code di atas kita sudah selesai merancang CNN untuk klasifikasi citra. Tahapan selanjutnya kita akan menentukan nilai untuk memantau proses latih atau training, fungsi yang akan digunakan sebagai berikut:

  1. Loss function – berfungsi untuk menghitung nilai error atau kesalahan model CNN selama proses latih. nilai error ini akan digunakan untuk mengoptimalkan kinerja model CNN.
  2. Optimizer – fungsi ini menjalankan proses perubahan bobot yang ada di dalam model berdasarkan data atau citra yang menjadi masukan dan hasil dari loss function
  3. Metrics – Kita akan menggunakan nilai Akurasi (accuracy) yang menunjukkan perbandingan jumlah citra yang diklasifikasi dengan benar dan jumlah citra keseluruhan yang digunakan. Nilai tersebut akan kita gunakan untuk melihat kinerja CNN saat proses latih dan proses uji.

Tahapan-tahapan di dalam proses latih model CNN sebagai berikut:

  1. Membaca data latih (train_images, train_labels) sebagai input atau masukan
  2. model CNN akan mempelajari pola yang ada di dalam citra dengan label yang bersangkutan.
  3. model CNN kemudian melakukan proses klasifikasi dengan menggunakan data uji (test_images). hasil dari klasifikasi tersebut akan dicocokkan dengan hasil sebenarnya (test_labels).

untuk memulai tahapan 1 dan 2 gunakan code di bawah ini.

output di atas menampilkan hasil loss function dan akurasi selama proses latih model CNN yang telah kita rancang sebelumnya. Jika menggunakan PC atau Laptop dengan spesifikasi rendah proses latih akan membutuhkan waktu yang lebih lama. kita dapat menggunakan Google Colaboratory untuk menjalankan code yang telah kita ketik sebelumnya.

Setelah epoch 5, dapat dilihat bahwa model CNN memiliki hasil loss function sama dengan 0.0411 dan akurasi 98.69% untuk data latih. selanjutnya kita akan melakukan tahapan nomor 3 yaitu melakukan klasifikasi dengan menggunakan data uji.

model CNN yang telah kita latih mencapai akurasi 99.14% untuk klasifikasi data uji. Ini menandakan CNN yang telah kita rancang memiliki kinerja yang baik untuk mengenali data yang belum pernah sama sekali digunakan selama proses latih. Langkah selanjutnya kita akan menggunakan model CNN tersebut untuk melakukan klasifikasi frame yang ada di video berikut.

File video yang akan kita gunakan dapat didownload di situs ini

Dengan menggunakan code di atas, kita membaca frame dari video untuk mengenali angka yang muncul di frame tersebut. Code di atas menghasilkan video berikut ini.