Kelas Pattern Recognition : Eksperimen dengan MNIST Handwritten Digit Database

Kemarin sore saya memberikan tugas praktikum ke murid-murid di kelas “Introduction to Pattern Recognition” yaitu Kelas ICT semester 5 di SGU. Tugas praktikum tersebut adalah melakukan eksperimen memakai handwritten digit database MNIST untuk membangun model klasifikasi untuk pengenalan tulisan tangan.  Tujuan dari praktikum ini adalah agar mereka mencoba mempratekkan berbagai teori yang selama ini telah dipelajari memakai database riil yang cukup besar.  Selama ini mereka telah belajar beberapa teknik dasar Pattern Recognition, seperti k-Nearest Neighbor Classifier, Naive bayes, Artificial Neural Network dg backpropagation algorithm, k-Means Clustering dan Hierarchical Clustering. Di kelas, selain aspek teori, mereka saya minta juga mendevelop program dari scratch agar benar-benar memahami algoritma yang dipakainya. Sebagian memakai C, ada juga yang Java dan Python. Saya bebaskan, asal membuat dari scratch.  Tidak sekedar memakai tool, atau library yang sudah ada.

Data MNIST dapat didownload dari :  http://yann.lecun.com/exdb/mnist/
Pada situs di atas terdapat 4 file : “train-images-idx3-ubyte.gz”, “train-labels-idx1-ubyte.gz”, “t10k-images-idx3-ubyte.gz”, dan “t10k-labels-idx1-ubyte.gz”.  Data training dapat dibuat dengan memakai file “train-images-idx3-ubyte.gz” dan “train-labels-idx1-ubyte.gz”. Total sampel data training adalah 60 ribu. Sedangkan data testing dapat dibuat dari file “t10k-images-idx3-ubyte.gz”, dan “t10k-labels-idx1-ubyte.gz”. Total sampel data testing adalah 10 ribu. Tabel 1 menampilkan jumlah sampel tiap class.

Tabel 1   Jumlah sampel tiap class pada MNIST Handwritten Digit Database

Screen Shot 2017-11-11 at 10.27.16 AM

Format data MNIST dijelaskan pada situs di atas. Tiap sampel berukuran  28 pixel x 28 pixel. Karena satu pixel direpresentasikan dengan 1 byte, maka total ukuran per sampel adalah  784 bytes. File “train-images-idx3-ubyte.gz” setelah diunzip akan diperoleh file “train-images-idx3-ubyte” berukuran 47040016 bytes. File ini terdiri dari 2 bagian : header dan raw data sebanyak 60 ribu sampel. Header file  berukuran 16 byte. Sedangkan raw data berukuran : 784 bytes x 60 ribu = 47040000 bytes. Sehingga total ukuran file adalah 47040016 bytes.

File “train-labels-idx1-ubyte.gz”  setelah diunzip akan diperoleh file “train-labels-idx1-ubyte” berukuran 60008 bytes. File ini terdiri dari 2 bagian : header dan data label sebanyak 60 ribu label. Header file  berukuran 8 byte, sedangkan data label berukuran 1 byte.  Sehingga total ukuran file adalah 8 + 60 ribu = 60008 bytes.

Contoh ekstraksi tiap data citra dari data “train-images-idx3-ubyte” dan data label  “train-labels-idx1-ubyte” dijelaskan sebagai berikut.

  1. Melakukan ekstraksi tiap data citra  dari file “train-images-idx3-ubyte.gz”, label dari “train-labels-idex1-ubyte.gz”, dan menyimpan dalam tiap citra angka itu sebagai sebuah pgm file ke dalam folder sesuai dengan labelnya.
    Screenshot sourcecode “mnist-readchar.c” diupload di bagian bawah. Cara pemakaiannya adalah sebagaimana ditampilkan pada gambar berikut. Setelah selesai dijalankan, di tiap folder 0 sampai 9 terdapat ribuan pgm file yang masing-masing menampilkan angka sesuai dengan nama folder. Misalnya di dalam folder “0”, terdapat file “1.pgm”, “2.pgm”, … , “5923.pgm” yang semua memperlihatkan angka “0”. Dalam folder “1” terdapat file “1.pgm”, “2.pgm”, …, “6742.pgm”, dan seterusnya.
    Screen Shot 2017-11-10 at 10.59.28 PM
    Contoh salah satu file dalam folder “4” adalah sebagai berikut ( sudah diperbesar dari 28×28 menjadi 100×100 agar mudah terlihat)
  2. Melakukan ekstraksi tiap data citra angka dari file “train-images-idx3-ubyte.gz”, label dari “train-labels-idex1-ubyte.gz”, dan menyimpannya ke dalam csv file.
    Screenshot sourcecode “mnist-create-csv.c” diupload di bagian bawah. Cara pemakaiannya adalah sebagaimana ditampilkan pada gambar berikut
    Screen Shot 2017-11-10 at 11.03.30 PM
    Setelah selesai dijalankan, akan diperoleh file “mnist-train.csv” yang terdiri dari 60 ribu baris. Tiap baris terdiri dari 785 angka dengan rentang [0, 255] yang dipisahkan dengan koma. 784 angka pertama menunjukkan nilai intensitas tiap pixel, sedangkan angka terakhir menunjukkan labelnya. Screenshot di atas memperlihatkan cara mengecek angka pada kolom ke 785, yaitu label data, memakai command “cut” di Linux. Lima data pertama adalah angka “5”, “0”, “4”, “1” dan “9”.

Untuk ekstraksi data testing dapat dilakukan dengan cara yang sama, hanya saja perlu penyesuaian SAMPLE_NUM dari 60000 menjadi 10000, dan nama file diubah dengan “t10k-images-idx3-ubyte.gz”, dan “t10k-labels-idx1-ubyte.gz.

Screenshot Source Code (dalam bahasa C, dijalankan di Linux Ubuntu 17.04)

1. Source code filename : “mnist-readchar.c”

Screen Shot 2017-11-10 at 10.48.52 PM

2. Source code filename : “mnist-create-csv.c”

Screen Shot 2017-11-10 at 11.06.03 PM

 

Iklan

Tentang Anto Satriyo Nugroho

My name is Anto Satriyo Nugroho. I am working as research scientist at Center for Information & Communication Technology, Agency for the Assessment & Application of Technology (PTIK-BPPT : Pusat Teknologi Informasi & Komunikasi, Badan Pengkajian dan Penerapan Teknologi). I obtained my doctoral degree (Dr.Eng) from Nagoya Institute of Technology, Japan in 2003. My office is located in Serpong, Tangerang Selatan City. My research is on pattern recognition and image processing with applied field of interests on biometrics identification & development of computer aided diagnosis for Malaria. Should you want to know further information on my academic works, please visit my professional site at http://asnugroho.net
Pos ini dipublikasikan di kuliah, research. Tandai permalink.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s