UNIVERSITAS GUNADARMA
FAKULTAS TEKNOLOGI INDUSTRI
SKRIPSI
JAKARTA
2018
Pernyataan Orisinalitas dan
Publikasi
ii
Lembar Pengesahan
Komisi Pembimbing
Tanggal Sidang: 03 November 2018
No. Nama Kedudukan
1. Dr. Irwan Bastian, SKom., MM Ketua
2. Anggota
3. Anggota
Panitia Ujian
Tanggal Lulus:
No. Nama Kedudukan
1. Dr. Ravi A. Salim Ketua
2. Prof. Dr. Wahyudi Priyono Sekretaris
3. Dr. Irwan Bastian, SKom., MM Anggota
4. Dr. Aqwam Rosadi, SKom., MM Anggota
5. Dr. Desti Riminarsih, SKom, MSi Anggota
MENGETAHUI
iii
Abstraksi
iv
Kata Pengantar
Segala puji dan syukur penulis naikkan ke hadirat Allah S.W.T yang Maha
Kuasa yang telah memberikan berkat, anugerah dan karunia yang melimpah,
sehingga penulis dapat menyelesaikan Tugas Akhir ini pada waktu yang telah
ditentukan.
Tugas Akhir ini disusun guna melengkapi sebagian syarat untuk mem-
peroleh gelar Sarjana Teknik Informatika Universitas Gunadarma. Adapun
judul Tugas Akhir ini adalah "Identifikasi Sel Darah Dengan Menggunakan
Metode Convolutional Neural Networks".
Walaupun banyak kesulitan yang penulis harus hadapi ketika menyusun
Tugas Akhir ini, namun berkat bantuan dan dorongan dari berbagai pihak,
akhirnya Tugas Akhir ini dapat diselesaikan dengan baik. Untuk itu penulis
tidak lupa mengucapkan terima kasih kepada:
1. Prof. Dr. E.S. Margianti, SE, MM, selaku Rektor Universitas Gunadar-
ma.
4. Dr. Edi Sukirman, MM, selaku Bagian Sidang Ujian, Universitas Guna-
darma.
6. Kedua orang tua dan kedua kakak tercinta yang selalu mendukung dan
terus memberikan motivasi.
v
7. Seluruh rekan seperjuangan di Universitas Gunadarma yang telah ba-
nyak membantu penulis.
9. Adrian Faisal, S.T. ,Muhammad Zakir, S.Kom, dan Abdul Ghoni Abba-
si yang telah memberikan dukungan materi pembelajaran dan saran
sehingga penelitian yang dilakukan dapat berjalan dengan lancar.
10. Ali Nursyamsi Lingga, Amd.AK dan Rina Aryani, Amd.AK yang telah
memberikan materi pembelajaran dan saran sehingga penelitian yang
dilakukan dapat berjalan dengan lancar.
12. Semua pihak yang tidak tersebutkan yang telah membantu penyele-
saian Tugas Akhir ini, penulis ucapkan juga terima kasih atas segala
bantuan dan sarannya.
Sebagai manusia biasa yang tak luput dari kesalahan, maka penulis memin-
ta maaf atas segala kekurangan dan keterbatasan dalam penyusunan Tugas
Akhir ini.
Akhir kata, hanya kepada Tuhan jualah segalanya dikembalikan dan pe-
nulis sadari bahwa penulisan ini masih jauh dari sempurna, disebabkan ka-
rena berbagai keterbatasan yang penulis miliki. Untuk itu penulis mengha-
rapkan kritik dan saran yang bersifat membangun untuk menjadi perbaikan
di masa yang akan datang.
Semoga apa yang ada pada penulisan Tugas Akhir ini dapat bermanfaat
bagi kita semua. Amin.
vi
Daftar Isi
Halaman Judul i
Lembar Orisinalitas ii
Abstraksi iv
Kata Pengantar v
Daftar Isi ix
Daftar Gambar x
Daftar Tabel xi
1 PENDAHULUAN 1
1.1 Latar Belakang Masalah . . . . . . . . . . . . . . . . . . . . . 1
1.2 Ruang Lingkup . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Tujuan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Metode Penelitian . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5 Sistematika Penulisan . . . . . . . . . . . . . . . . . . . . . . 3
2 TINJAUAN PUSTAKA 5
2.1 Sel Darah . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Leukosit . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Deep Learning . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.1 Neural Networks . . . . . . . . . . . . . . . . . . . . . 6
2.2.1.1 Backpropagration . . . . . . . . . . . . . . . 7
2.2.1.2 Fungsi aktivasi . . . . . . . . . . . . . . . . . 7
vii
viii
2.2.1.3 Optimizer . . . . . . . . . . . . . . . . . . . . 8
2.2.2 Convolutional Neural Networks . . . . . . . . . . . . . 9
2.2.3 Lapisan Konvolusi . . . . . . . . . . . . . . . . . . . . 10
2.2.4 Lapisan Pooling . . . . . . . . . . . . . . . . . . . . . . 11
2.2.5 Lapisan Fully-connected . . . . . . . . . . . . . . . . . 12
2.3 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Confusion Matrix . . . . . . . . . . . . . . . . . . . . . . . . . 14
3 METODOLOGI PENELITIAN 15
3.1 Gambaran Umum . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 Pengambilan Citra . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3 Pra-pemrosesan . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3.1 Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3.2 Normalisasi Citra . . . . . . . . . . . . . . . . . . . . . 18
3.4 Rancangan Model Convolutional Neural Networks . . . . . . 18
5 PENUTUP 43
5.1 Kesimpulan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.2 Saran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
DAFTAR PUSTAKA 47
LAMPIRAN 48
ix
Daftar Gambar
x
Daftar Tabel
xi
Daftar Algoritma
xii
Bab 1
PENDAHULUAN
1
2
5. Citra yang digunakan untuk pelatihan berjumlah 1000 citra pada setiap
sel.
6. Citra yang digunakan untuk pengujian berjumlah 600 citra pada setiap
sel.
1.3 Tujuan
Tujuan penelitian ini adalah untuk menerapkan algoritma convolutional
neural networks untuk mengidentifikasi sel darah.
BAB I PENDAHULUAN
Bab ini memuat penjelasan mengenai latar belakang masa-
lah, rumusan masalah, batasan masalah, tujuan penelitian,
metode penelitian dan sistematika penulisan.
BAB II LANDASAN TEORI
Bab ini memuat teori yang mendasari penelitian yakni, iden-
tifikasi sel darah, convolutional neural networks, Python dan
Tensorflow Frameworks.
4
TINJAUAN PUSTAKA
2.1.1 Leukosit
Leukosit berasal dari kata leukos yang berarti putih dan kytos yang ber-
arti ruang sel. Leukosit berinti, bahkan pada basofil, netrofil, dan eosinofil
intinya lebih dari 1 lobus sehingga disebut polimorfphonuclear (PMN), se-
dang monosit dan limfosit berinti satu lobus. Pada orang dewasa terdapat
5000- 10000/cc [2].
Leukosit bersifat fagosit (pemakan) benda asing atau kuman yang masuk
ke dalam tubuh, menghancurkan sel abnormal yang muncul di tubuh dan
membersihkan debris sel. Terdapat 5 jenis sel darah putih yaitu :
5
6
• Monosit, berinti satu, berbentuk kepal kuda atau ginjal dengan ukur-
an diameter 12-20 mikron, bersifat fagosit, setelah keluar dari tubuh,
kemudian berdiam di jaringan dan membesar untuk menjadi fagosit
jaringan yang dikenal sebagai makrofag.
2.2.1.1 Backpropagration
• ReLU
• Sigmoid
Fungsi sigmoid merupakan fungsi matematika yang memiliki kurva
berbentuk huruf “S” atau biasa disebut dengan kurva Sigmoid. Fungsi
sigmoid ini memiliki rentang 0 hingga 1. Fungsi ini biasa di guanakan
untuk melakukan pengklasifikasian atau pengelompokkan data [32].
8
1 ex
S(x) = = (2.2)
1 + e−x ex + 1
• Softmax
Fungsi softmax biasa digunakan pada layer terakhir dari neural ne-
tworks sebagai pengklasifikasi. Fungsi softmax digunakan untuk meng-
klasifikasi atau mengelompokkan lebih dari 2 kelas [20].
ezj
σ(z)j = PK (2.3)
k=1 e zk
Dimana σ adalah probabilitas input yang mempresentasikan kelas dan
j merupakan salah satu dari kelas yang ada. Fungsi ini hanya menor-
malkan eksponen dari fungsi pre-aktivasi.
2.2.1.3 Optimizer
n
X
w := w − η∇Q(w) = w − η ∇Qi (w)/n (2.5)
i=1
X X
S(i, j) = (I × K)(i, j) = m n (m, n)K(i − m, j − n) (2.8)
– jumlah filter D
– ukuran filter F
– stride S
– jumlah zero-padding P
– W 2 = (W 1 − F + 2P )/S + 1
– H 2 = (H 1 − F + 2P )/S + 1
– D2 = K
pooling tersebut dinamakan Max Pooling. Bentuk umum lapisan pooling ada-
lah sebuah filter ukuran 2 × 2 yang digeser sebanyak 2 tinggi dan 2 lebar.
Jika menggunakan operasi maksimum pada filter 2 × 2 , pooling mengambil
nilai terbesar di antara 4 elemen.
Pada lapisan ini juga berlaku perhitungan keluaran seperti lapisan kon-
volusi. Hanya saja, pada lapisan ini tidak ada penggunaan zero-padding.
Sehingga rumusnya menjadi (W − F )/S + 1
Dapat disimpulkan, pada lapisan pooling:
– ukuran filter F
– stride S
– W 2 = (W 1 − F )/S + 1
– H 2 = (H 1 − F )/S + 1
– D2 = D1
2.3 Python
Python adalah bahasa pemrograman interpretatif multiguna dengan fi-
losofi perancangan yang berfokus pada tingkat keterbacaan kode. Python
diklaim sebagai bahasa yang menggabungkan kapabilitas, kemampuan, de-
ngan sintaksis kode yang sangat jelas, dan dilengkapi dengan fungsionalitas
pustaka standar yang besar serta komprehensif. Python juga didukung oleh
komunitas yang besar.
Python mendukung multi paradigma pemrograman, pemrograman bero-
rientasi objek, pemrograman imperatif, dan pemrograman fungsional. Salah
satu fitur yang tersedia pada python adalah sebagai bahasa pemrograman di-
namis yang dilengkapi dengan manajemen memori otomatis. Seperti halnya
pada bahasa pemrograman dinamis lainnya, python umumnya digunakan
sebagai bahasa skrip meski pada praktiknya penggunaan bahasa ini lebih
luas mencakup konteks pemanfaatan yang umumnya tidak dilakukan de-
ngan menggunakan bahasa skrip. Python dapat digunakan untuk berbagai
keperluan pengembangan perangkat lunak dan dapat berjalan di berbagai
platform sistem operasi [33].
2.4 Keras
Keras adalah library neural network yang open source dan di tulisankan
menggunakan bahasa python dan dapat berjalan diatas TensorFlow, CNTK,
atau Theano. Dirancang agar dapat bereksperimen dengan cepat dalam deep
learning, berfokus agar dapat digunakan dengan mudah, modularitas, mu-
dah untuk diperpanjang, dan berjalan pada python [18].
• Mudah digunakan
Keras dirancang untuk manusia bukan mesin. Keras memberikan ump-
an balik yang jelas dalam menindak lanjuti kesalahan yang ada.
14
• Modularitas
Sebuah model yang dapat dipahami sebagai urutan modul yang dapat
dikonfigurasi sepenuhnya. Khususnya pada lapisan saraf, cost function,
optimizer, fungsi aktivasi merupakan modul yang mandiri dimana kita
dapat menggabungkan untuk membuat sebuah model baru.
• Mudah diperpanjang
Model baru dapat dengan mudah di tambahkan dan modul yang ada
memberikan banyak contoh. Dapat dengan mudah membuat modul
baru, membuat keras cocok untuk penelitian lebih lanjut.
METODOLOGI PENELITIAN
15
16
Gambar 3.2 merupakan sampel citra dari setiap kelas yang terdapat pada
dataset. Dikarenakan komputer mengalami kehabisan memori saat melakuk-
an perhitungan, maka data tersebut dibatasi menjadi 1000 citra untuk setiap
sel atau kelas yang ada.
17
3.3 Pra-pemrosesan
Sebelum data dapat digunakan, diperlukan pra-pemrosesan terlebih da-
hulu agar data siap pakai dan sesuai dengan model arsitektur yang diba-
ngun. Pra-pemrosesan yang dilakukan yakni, scaling terhadap ukuran citra
dan konversi citra menjadi biner.
3.3.1 Scaling
Scaling adalah proses pengubahan ukuran citra menjadi lebih besar atau
lebih kecil dari ukuran aslinya. Proses ini dilakukan untuk menyamakan
dan memperkecil ukuran citra asli karena data dalam BCCD memiliki ukur-
an yang cukup besar sehingga proses perhitungan menjadi lebih lama dan
penggunaan memori yang besar. Masukan yang tidak terlalu besar mem-
percepat proses latihan karena data yang diolah sedikit dan mengurai peng-
gunaan memori. Masukan dengan ukuran yang lebih kecil memudahkan
pengontrolan keluaran dari tiap lapisan pada model.
Ukuran citra diubah menjadi 160 × 120 pixel. Ukuran ini tidak terlalu
kecil ataupun terlalu besar. Jika ukuran citra terlalu kecil dikhawatirkan
fitur yang didapat dari citra semakin sedikit sehingga memperlambat proses
latihan oleh model. Selain dari pada itu ukuran tersebut lebih menghemat
memori yang digunakan dalam proses latihan.
Ww = (W 1 − F + 2P )/S + 1 (3.1)
19
Ww = (157)/1 + 1 (3.3)
Ww = 158 (3.4)
Wh = (W 2 − F + 2P )/S + 1 (3.5)
Wh = (117)/1 + 1 (3.7)
Wh = 118 (3.8)
Ww = (W 1 − F + 2P )/S + 1 (3.9)
Ww = (155)/1 + 1 (3.11)
Ww = 156 (3.12)
20
Wh = (W 2 − F + 2P )/S + 1 (3.13)
Wh = (115)/1 + 1 (3.15)
Wh = 116 (3.16)
Pada gambar 3.5 merupakan rangkuman dari semua layer yang terdapat
pada model, disertai dengan ukuran dari setiap layer dan jumlah parameter
yang dibuat dari model.
Gambar 3.6 merupakan visualisasi dari setiap lapisan yang terdapat pa-
da model yang dibuat. Pada lapisan konvolusi terdapat k3n32s1 ataupun
k3n64s1 yang memiliki arti bahwa k menunjukkan kanal dan angka selan-
jutnya adalah ukuran kanal yang dibuat yaitu tiga (3 × 3), n menunjukkan
filter atau neuron dan angka selanjutnya adalah jumlah filter yang digunak-
an yaitu 32 dan 64, s menunjukkan strides pada layer tersebut dan angka
selanjutnya adalah ukuran strides yang digunakan yaitu satu.
Pada lapisan max pool terdapat k2 dimana k merupakan kanal dan ang-
ka selanjutnya adalah ukuran kanal yang digunakan (2 × 2). Pada lapisan
dropout terdapat r0.25 dan r0.5 dimana r merupakan rate yang dimiliki pada
lapisan tersebut dan ukuran selanjutnya merupakan ukuran rate yang digu-
nakan yaitu 0.25 .
Selanjutnya adalah lapisan dense atau lapisan fully-connected terdapat
22
4.1 Pelatihan
Pada saat proses pelatihan menggunakan stochastic gradient descent se-
bagai optimizer. Menggunakan crossentropy untuk menghitung nilai loss. Ke-
mudian proses pelatihan sebanyak 200 kali perulangan kemudian bobot di-
simpan. Selanjutnya bobot tersebut di lakukan pelatihan kembali sebanyak
50 kali perulangan. Sehingga tingkat pembelajaran pada model yang diba-
ngun bernilai 4.72% untuk nilai loss dan 49.08% untuk nilai validasi loss
yang berjalan secara fluktuatif. Nilai tersebut didapat setelah melakukan
kurang lebih 250 iterasi.
23
24
1. Monocyte
2. Monocyte
3. Lymphocyte
4. Lymphocyte
5. Lymphocyte
26
1. Monocyte Monocyte
2. Monocyte Monocyte
3. Lymphocyte Lymphocyte
4. Lymphocyte Neutrophil
5. Lymphocyte Neutrophil
• TFN (Total False Negative ) merupakan jumlah prediksi salah dari kelas
negatif untuk setiap kelas.
n
X
T F Ni = Xij (4.1)
j=1,j6=i
• TFP (Total False Positive ) merupakan jumlah prediksi salah dari kelas
positif.
n
X
T F Pi = Xji (4.2)
j=1,j6=i
• TTN (Total True Negative ) merupakan jumlah prediksi benar dari kelas
negatif.
n
X n
X
T T Ni = Xjk (4.3)
j=1,j6=ik=1,k6=i
• TTP (Total True Positive ) merupakan jumlah prediksi benar dari kelas
positif.
n
X
T T Pall = Xij (4.4)
j=1
Untuk melakukan perhitungan presisi (P), recall (R), dan akurasi pada
setiap kelas berikut merupakan persamaannya.
28
T T Pall
Pi = (4.5)
T T Pall + T F Pi
T T Pall
Ri = (4.6)
T T Pall + T F Ni
T T Pall
Akurasi = (4.7)
JumlahDataP engujian
Pada pengujian ini, TFN menunjukkan banyaknya sel darah yang bukan
termasuk dari sel darah i dan teridentifikasi sebagai bukan sel darah i ter-
sebut. TFP menunjukkan banyaknya sel darah yang bukan termasuk dari
sel darah i dan teridentifikasi sebagai sel darah i tersebut. TTN merupak-
an banyaknya sel darah yang termasuk dalam sel darah i dan teridentifikasi
sebagai bukan sel darah i tersebut. TTP merupakan banyaknya sel darah
yang termasuk dari sel darah i dan teridentifikasi sebagai sel darah i terse-
but. Berikut merupakan hasil confusion matrix dari pengujian pada setiap sel
darah.
29
• Neutrophil
n
X
T F N1 = Xij (4.8)
j=1,j6=1
T F N1 = 305 + 12 + 60 (4.10)
T F N1 = 377 (4.11)
• Eosinophil
n
X
T F N2 = Xij (4.12)
j=1,j6=1
T F N2 = 234 + 17 + 60 (4.14)
T F N2 = 311 (4.15)
30
• Monocyte
n
X
T F N3 = Xij (4.16)
j=1,j6=1
T F N3 = 67 + 89 + 7 (4.18)
T F N3 = 163 (4.19)
• Lymphocyte
n
X
T F N4 = Xij (4.20)
j=1,j6=1
T F N4 = 298 (4.23)
• Neutrophil
n
X
T F P1 = Xji (4.24)
j=1,j6=1
T F P1 = 420 (4.27)
• Eosinophil
n
X
T F P2 = Xji (4.28)
j=1,j6=1
T F P2 = 550 (4.31)
• Monocyte
n
X
T F P3 = Xji (4.32)
j=1,j6=1
T F P3 = 12 + 17 + 23 (4.34)
T F P3 = 52 (4.35)
• Lymphocyte
n
X
T F P4 = Xji (4.36)
j=1,j6=1
T F P4 = 60 + 60 + 7 (4.38)
33
T F P4 = 127 (4.39)
• Neutrophil
n
X n
X
T T N1 = Xjk (4.40)
j=1,j6=1k=1,k6=1
T T N1 = X22 + X23 + X24 + X32 + X33 + X34 + X42 + X43 + X44 (4.41)
T T N1 = 1443 (4.43)
• Eosinophil
n
X n
X
T T N2 = Xjk (4.44)
j=1,j6=ik=1,k6=i
34
T T N2 = X11 + X13 + X14 + X31 + X33 + X34 + X41 + X43 + X44 (4.45)
T T N2 = 1314 (4.47)
• Monocyte
n
X n
X
T T N3 = Xjk (4.48)
j=1,j6=ik=1,k6=i
T T N3 = X11 + X12 + X14 + X21 + X22 + X24 + X41 + X42 + X44 (4.49)
T T N3 = 1815 (4.51)
• Lymphocyte
n
X n
X
T T N4 = Xjk (4.52)
j=1,j6=ik=1,k6=i
T T N4 = X11 + X12 + X13 + X21 + X22 + X23 + X31 + X32 + X33 (4.53)
35
T T N4 = 1740 (4.55)
• Total TTN
n
X
T T Nall = T T Ni (4.56)
i=1
T T Nall = T T N1 + T T N2 + T T N3 + T T N4 (4.57)
n
X
T T Pall = Xij (4.60)
j=1
• Neutrophil
T T Pall
R1 = (4.64)
T T Pall + T F Ni
1338
R1 = (4.65)
1338 + T F N1
1338
R1 = (4.66)
1338 + 377
R1 = 0.78 (4.67)
• Eosinophil
T T Pall
R2 = (4.68)
T T Pall + T F Ni
37
1338
R2 = (4.69)
1338 + T F N2
1338
R2 = (4.70)
1338 + 311
R2 = 0.81 (4.71)
• Monocyte
T T Pall
R3 = (4.72)
T T Pall + T F Ni
1338
R3 = (4.73)
1338 + T F N3
1338
R3 = (4.74)
1338 + 163
R3 = 0.89 (4.75)
• Lymphocyte
T T Pall
R4 = (4.76)
T T Pall + T F Ni
1338
R4 = (4.77)
1338 + T F N4
38
1338
R4 = (4.78)
1338 + 298
R4 = 0.817 (4.79)
Berdasarkan hasil recall dari data uji diatas dapat disimpulkan bahwa sen-
sitivitas atau proporsi benar yang dapat diidentifikasi dengan benar oleh mo-
del yang dibuat adalah sel neutrophil 78%, eosinophil 81%, monocyte 89%,
dan lymphocyte 81.7%.
• Neutrophil
T T Pall
P1 = (4.80)
T T Pall + T F Pi
1338
P1 = (4.81)
1338 + T F P1
1338
P1 = (4.82)
1338 + 420
39
P1 = 0.76 (4.83)
• Eosinophil
T T Pall
P2 = (4.84)
T T Pall + T F Pi
1338
P2 = (4.85)
1338 + T F P2
1338
P2 = (4.86)
1338 + 550
P2 = 0.708 (4.87)
• Monocyte
T T Pall
P3 = (4.88)
T T Pall + T F Pi
1338
P3 = (4.89)
1338 + T F P3
1338
P3 = (4.90)
1338 + 52
P3 = 0.96 (4.91)
40
• Lymphocyte
T T Pall
P4 = (4.92)
T T Pall + T F Pi
1338
P4 = (4.93)
1338 + T F P4
1338
P4 = (4.94)
1338 + 127
P4 = 0.91 (4.95)
Berdasarkan hasil presisi dari data uji diatas dapat disimpulkan bahwa
prediktif positif dari data uji yang dapat diidentifikasi dengan benar oleh
model yang dibuat adalah sel neutrophil 76%, eosinophil 70.8%, monocyte
96%, dan lymphocyte 91%.
T T Pall
Akurasi = (4.96)
JumlahDataP engujian
41
1338
Akurasi = (4.97)
2487
2
F1 = 1 1 (4.99)
R
+ P
R·P
F1 = 2 · (4.100)
R+P
Dari persamaan diatas R merupakan nilai recall dan P merupakan nilai
presisi. Berikut merupakan nilai F1 dari setiap kelas.
• Neutrophil
R1 · P1
F1 = 2 · (4.101)
R1 + P1
0.76 · 0.78
F1 = 2 · (4.102)
0.76 + 0.78
F1 = 0.769 (4.103)
• Eosinophil
R2 · P2
F1 = 2 · (4.104)
R2 + P2
0.708 · 0.81
F1 = 2 · (4.105)
0.708 + 0.81
F1 = 0.75 (4.106)
42
• Monocyte
R3 · P3
F1 = 2 · (4.107)
R3 + P3
0.96 · 0.89
F1 = 2 · (4.108)
0.96 + 0.89
F1 = 0.92 (4.109)
• Lymphocyte
R4 · P4
F1 = 2 · (4.110)
R4 + P4
0.91 · 0.817
F1 = 2 · (4.111)
0.91 + 0.817
F1 = 0.86 (4.112)
R̄ · P̄
F1 = 2 · (4.113)
R̄ + P̄
0.83 · 0.82
F1 = 2 · (4.114)
0.83 + 0.82
F1 = 0.82 (4.115)
Berdasarkan pengukuran F1 pada setiap kelas yang ada dan dari rerata
presisi dan recall berikut merupakan hasil pengukuran F1 .
Dari perhitungan diatas kita mendapat hasil F1 dari rerata presisi dan
recall adalah 82%, dimana nilai itu menunjukkan bahwa terdapat keharmo-
nisan yang baik antara nilai presisi dan recall.
Bab 5
PENUTUP
5.1 Kesimpulan
Hasil dari pelatihan terhadap model, yakni nilai loss sebesar 49.08% me-
nunjukkan bahwa algoritma convolutional neural networks dapat diterapkan
untuk mengidentifikasi sel-sel darah dengan akurasi 83% pada saat pelatih-
an. Berdasarkan hasil perhitungan recall menghasilkan nilai rerata 83% dan
presisi menghasilkan nilai rerata 82%. Dari nilai rerata presisi dan recall
menghasilkan nilai F1 menghasilkan nilai 82% nilai tersebut menunjukkan
bahwa keharmonisan yang baik antara nilai presisi dan recall.
Dapat dilihat dari empat pengukuran tersebut, algoritma convolutional
neural networks dapat digunakan untuk mengidentifikasi dan memverifika-
si sel darah. Tetapi, nilai akurasi untuk mengukur performa model belum
begitu besar bernilai 53.7%. Beberapa faktor yang mungkin membuat hal
tersebut terjadi adalah kurang detailnya pra-pemrosesan yang dilakukan, la-
pisan pada model yang terlalu sedikit atau terlalu banyak, besar filter pada
setiap lapisan terlalu kecil atau terlalu besar, kurangnya data yang digunakan
untuk melatih model.
5.2 Saran
Berikut adalah beberapa saran yang dapat dilakukan untuk penelitian
terkait convolutional neural networks dan metode identifikasi sel darah.
43
44
[1] Arianda, D. (2013). Buku Saku Analis Kesehatan. Analis Muslim Publi-
sher.
45
46
[12] Goodfellow, I., Bengio, Y., Courville, A., and Bengio, Y. (2016). Deep
learning, volume 1. MIT press Cambridge.
[18] Keras (2018). Keras: The python deep learning libary. URL: https:
//keras.io. 2018-10-11.
[20] Li, W., Zhao, R., Xiao, T., and Wang, X. (2014). Deepreid: Deep filter
pairing neural network for person re-identification. In The IEEE Conference
on Computer Vision and Pattern Recognition (CVPR).
[23] Nair, V. and Hinton, G. E. (2010). Rectified linear units improve restri-
cted boltzmann machines. In Proceedings of the 27th international confe-
rence on machine learning (ICML-10), pages 807–814.
[30] Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., and Salakhutdi-
nov, R. (2014). Dropout: a simple way to prevent neural networks from
overfitting. The Journal of Machine Learning Research, 15(1):1929–1958.
[32] YIN, X., GOUDRIAAN, J., LANTINGA, E. A., VOS, J., and SPIERTZ,
H. J. (2003). A flexible sigmoid function of determinate growth. Annals
of Botany, 91(3):361–371.
A u t o m a t i c a l l y g e n e r a t e d by C o l a b o r a t o r y .
Original f i l e i s located at
h t t p s : / / c o l a b . r e s e a r c h . g oo gl e . com/ d r i v e /
1cYwOHz84jP6DHktV−8nwTlMD6FUhV−vE
"""
import numpy as np
import pandas as pd
from k e r a s . models import S e q u e n t i a l
from k e r a s . l a y e r s import Dense , Dropout , A c t i v a t i o n , F l a t t e n ,
Conv2D , MaxPooling2D , Lambda , MaxPool2D , B a t c h N o r m a l i z a t i o n
from k e r a s . u t i l s import n p _ u t i l s
from k e r a s . p r e p r o c e s s i n g . image import ImageDataGenerator
from k e r a s . o p t i m i z e r s import RMSprop
from s k l e a r n . p r e p r o c e s s i n g import LabelEncoder
from s k l e a r n . c r o s s _ v a l i d a t i o n import t r a i n _ t e s t _ s p l i t
from s k l e a r n . m e t r i c s import c o n f u s i o n _ m a t r i x
from s k l e a r n . m e t r i c s import a c c u r a c y _ s c o r e
import xml . e t r e e . ElementTree as ET
import s k l e a r n
import i t e r t o o l s
import cv2
import s c i p y
import os
import c s v
48
49
import m a t p l o t l i b . p y p l o t as p l t
# %m a t p l o t l i b i n l i n e
d i c t _ c h a r a c t e r s = { 1 : ’ NEUTROPHIL ’ , 2 : ’ EOSINOPHIL ’ ,
3 : ’MONOCYTE’ , 4 : ’ LYMPHOCYTE ’ }
import os
p r i n t ( os . l i s t d i r ( ’ . ’ ) )
! ls
! unzip blood−c e l l s . z i p
p r i n t ( counts )
f i g , ax = p l t . s u b p l o t s ( )
p l t . bar ( l i s t ( range ( 5 ) ) , c o u n t s )
ax . s e t _ x t i c k l a b e l s ( ( ’ ’ , ’ B a s o p h i l ’ , ’ E o s i n o p h i l ’ ,
’ Lymphocyte ’ , ’ Monocyte ’ , ’ N e u t r o p h i l ’ ) )
ax . s e t _ y l a b e l ( ’ Counts ’ )
! p i p i n s t a l l tqdm
from tqdm import tqdm
def get_data ( f o l d e r ) :
"""
Load t h e data and l a b e l s
from t h e g i v e n f o l d e r and r e s i z e them .
"""
X = []
y = []
f o r wbc_type i n os . l i s t d i r ( f o l d e r ) :
i f not wbc_type . s t a r t s w i t h ( ’ . ’ ) :
i f wbc_type i n [ ’ NEUTROPHIL ’ ] :
label = 0
e l i f wbc_type i n [ ’ EOSINOPHIL ’ ] :
label = 1
e l i f wbc_type i n [ ’MONOCYTE’ ] :
label = 2
e l i f wbc_type i n [ ’ LYMPHOCYTE ’ ] :
label = 3
f o r image_filename i n tqdm ( os . l i s t d i r
( f o l d e r + wbc_type ) ) :
i m g _ f i l e = cv2 . imread (
f o l d e r + wbc_type
+ ’ / ’ + image_filename )
i f i m g _ f i l e i s not None :
i m g _ f i l e = s c i p y . misc . i m r e s i z e ( a r r=
img_file ,
s i z e =(160 , 120 , 3 ) )
img_arr = np . a s a r r a y ( i m g _ f i l e )
51
X . append ( img_arr )
y . append ( l a b e l )
X = np . a s a r r a y (X)
y = np . a s a r r a y ( y )
return X, y
X _ t r a i n , y _ t r a i n = g e t _ d a t a ( ’ blood−c e l l s / d a t a s e t 2 −master
/ d a t a s e t 2 −master / images /TRAIN / ’ )
X _ t e s t , y _ t e s t = g e t _ d a t a ( ’ blood−c e l l s / d a t a s e t 2 −master
/ d a t a s e t 2 −master / images /TEST / ’ )
def real_data ( f o l d e r ) :
"""
Load t h e data and l a b e l s
from t h e g i v e n f o l d e r with t h e same s i z e .
"""
X = []
y = []
f o r wbc_type i n os . l i s t d i r ( f o l d e r ) :
i f not wbc_type . s t a r t s w i t h ( ’ . ’ ) :
i f wbc_type i n [ ’ NEUTROPHIL ’ ] :
label = 0
e l i f wbc_type i n [ ’ EOSINOPHIL ’ ] :
label = 1
e l i f wbc_type i n [ ’MONOCYTE’ ] :
label = 2
e l i f wbc_type i n [ ’ LYMPHOCYTE ’ ] :
label = 3
f o r image_filename i n tqdm ( os . l i s t d i r
( f o l d e r + wbc_type ) ) :
i m g _ f i l e = cv2 . imread (
f o l d e r + wbc_type + ’ / ’ + image_filename )
i f i m g _ f i l e i s not None :
img_arr = np . a s a r r a y ( i m g _ f i l e )
52
X . append ( img_arr )
y . append ( l a b e l )
X = np . a s a r r a y (X)
y = np . a s a r r a y ( y )
return X, y
X _ t r a i n=np . a r r a y ( X _ t r a i n )
X _ t r a i n=X _ t r a i n /255.0
y_trainHot = to_categorical ( y_train )
X _ t e s t=np . a r r a y ( X _ t e s t )
X _ t e s t=X _ t e s t /255.0
y_testHot = to_categorical ( y_test )
max( y _ t r a i n )
n um_classes = l e n ( y _ t r a i n H o t [ 0 ] )
print ( len ( y_trainHot [0]))
! pip i n s t a l l keras
import k e r a s
53
epoch = 200
i n p u t _ s h a p e = (160 , 120 , 3)
model = S e q u e n t i a l ( )
model . summary ( )
from s k l e a r n . m o d e l _ s e l e c t i o n import t r a i n _ t e s t _ s p l i t
x_train , x_test , y_train , y _ t e s t = t r a i n _ t e s t _ s p l i t ( X_train ,
y _ t r a i n H o t , t e s t _ s i z e =0.3)
y _ t r a i n H o t . shape
h i s t . h i s t o r y . keys ( )
p l t . p l o t ( h i s t . h i s t o r y [ ’ acc ’ ] )
54
p l t . plot ( h i s t . h i s t o r y [ ’ val_acc ’ ] )
p l t . legend ( [ ’ Acc ’ , ’ Val_acc ’ ] )
p l t . show ( )
model . l o a d _ w e i g h t s ( ’ model1 . h5 ’ )
plt . p l o t ( h i s t . h i s t o r y [ ’ acc ’ ] )
plt . plot ( h i s t . h i s t o r y [ ’ val_acc ’ ] )
plt . legend ( [ ’ Acc ’ , ’ Val_acc ’ ] )
plt . show ( )
t e s t _ b a r u = x _ t e s t . copy ( )
l a b e l _ t e s t = y _ t e s t H o t [ : 2 8 0 0 ] . copy ( )
t e s t _ b a r u . shape
l a b e l _ t e s t . shape
p r e d i c t e d = model . p r e d i c t ( t e s t _ b a r u )
p r e d i c t e d [ −2:]
predicted [:3]
y _ t r a i n H o t . shape
l a b e l _ t e s t = [ np . argmax ( l a b e l ) f o r l a b e l i n l a b e l _ t e s t ]
label_test [:3]
l a b e l _ t e s t [ −2:]
from s k l e a r n . m e t r i c s import c o n f u s i o n _ m a t r i x
cm = c o n f u s i o n _ m a t r i x ( y _ t r a i n H o t , x _ t r a i n )
t e s t _ p r e d i c t i o n s = model . p r e d i c t ( x _ t e s t )
t e s t _ p r e d i c t i o n s = np . round ( t e s t _ p r e d i c t i o n s )
d e f p l o t _ c o n f u s i o n _ m a t r i x (cm , c l a s s e s ,
n o r m a l i z e=F a l s e ,
t i t l e =’ Confusion matrix ’ ,
cmap=p l t . cm . B l u e s ) :
"""
T h i s f u n c t i o n p r i n t s and p l o t s t h e c o n f u s i o n m a t r i x .
N o r m a l i z a t i o n can be a p p l i e d by s e t t i n g ‘ n o r m a l i z e=True ‘ .
"""
p l t . f i g u r e ( f i g s i z e = (10 ,10))
p l t . imshow (cm , i n t e r p o l a t i o n =’ n e a r e s t ’ , cmap=cmap )
plt . t i t l e ( t i t l e )
pl t . colorbar ()
t i c k _ m a r k s = np . arange ( l e n ( c l a s s e s ) )
p l t . x t i c k s ( t i c k _ m a r k s , c l a s s e s , r o t a t i o n =90)
p l t . y t i c k s ( tick_marks , c l a s s e s )
i f normalize :
56
t h r e s h = cm . max ( ) / 2 .
f o r i , j i n i t e r t o o l s . p r o d u c t ( range (cm . shape [ 0 ] ) ,
range (cm . shape [ 1 ] ) ) :
p l t . t e x t ( j , i , cm[ i , j ] ,
h o r i z o n t a l a l i g n m e n t =" c e n t e r " ,
c o l o r =" white " i f cm[ i , j ] > t h r e s h e l s e " b l a c k " )
plt . grid ( ’ off ’ )
pl t . tight_layout ()
p l t . y l a b e l ( ’ True l a b e l ’ )
plt . xlabel ( ’ Predicted label ’ )
Y_pred = model . p r e d i c t ( X _ t e s t )
Y _ p r e d _ c l a s s e s = np . argmax ( Y_pred , a x i s = 1)
Y _ t r u e = np . argmax ( y _ t e s t H o t , a x i s = 1)
co nfusion_mtx = c o n f u s i o n _ m a t r i x ( Y_true , Y _ p r e d _ c l a s s e s )
p l o t _ c o n f u s i o n _ m a t r i x ( confusion_mtx ,
c l a s s e s = l i s t ( dict_characters . values ()))
model . s a v e _ w e i g h t s ( ’ m o d e l _ f i x . h5 ’ )
! ls
from g oo gl e . c o l a b import f i l e s
f i l e s . download ( ’ m o d e l _ f i x . h5 ’ )
predicted_label = []
f o r i i n range ( l e n ( Y _ p r e d _ c l a s s e s ) ) :
l a b e l = Y _ p r e d _ c l a s s e s [ i ] +1
p r e d i c t e d _ l a b e l . append ( l a b e l )
dict_characters
i in predicted_label ]
s t r _ p r e d i c t e d _ l a b e l [ −5:]
true_label = []
f o r i i n range ( l e n ( Y _ t r u e ) ) :
T _ l a b e l = Y _ t r u e [ i ] +1
t r u e _ l a b e l . append ( T _ l a b e l )
p l t . imshow ( X _ t e s t [ 0 ] )
plt . grid ( ’ off ’ )
plt . axis ( ’ off ’ )
p l t . imshow ( X _ t e s t [ 1 ] )
plt . grid ( ’ off ’ )
plt . axis ( ’ off ’ )
p l t . imshow ( X _ t e s t [ 2 ] )
plt . grid ( ’ off ’ )
plt . axis ( ’ off ’ )
len ( X_test )
p l t . imshow ( X _ t e s t [2486])
plt . grid ( ’ off ’ )
plt . axis ( ’ off ’ )
p l t . imshow ( X _ t e s t [2485])
plt . grid ( ’ off ’ )
plt . axis ( ’ off ’ )