Convolutional Neural Network Using RStudio and Tensorflow
Assalamualaikum guys!
Kali ini saya akan melakukan pengaplikasian CNN menggunakan RStudio dan Tensorflow. sebelum itu, saya akan memberi tahu terlebih dahulu apa itu Convolutional Neural Network itu apa?
Convolutional Neural Network
Convolutional Neural Network istilah yang kerap disingkat CNN adalah sebuah kelas dalam Deep Neural Networks, yang biasanya digunakan untuk menganalisis gambaran visual. Convolutional Neural Network merupakan salah satu jenis algoritme Deep Learning yang dapat menerima input berupa gambar, menentukan aspek atau obyek apa saja dalam sebuah gambar yang bisa digunakan mesin untuk “belajar” mengenali gambar, dan membedakan antara satu gambar dengan yang lainnya.
Arsitektur CNN terbilang mirip dengan pola koneksi neuron atau sel saraf dalam otak manusia. CNN terinspirasi dari Visual Cortex, yaitu bagian pada otak yang bertugas untuk memroses informasi dalam bentuk visual.
Setelah mengetahui maksud dari CNN, ayo kita mengaplikasikannya dengan RStudio dan Tensorflow.
Berikut data yang akan saya gunakan, data tersebut terdiri dari 6 gambar baju dan 6 gambar laptop, data tersebut saya simpan di folder percobaan.
buka RStudio, lalu install package dibawah ini
#Install Packages
install.packages(“keras”)
install.packages(“tensorflow”)
install.packages(“BiocManager”)
BiocManager::install(“EBImage”)#Aktifkan Packages
library(keras)
library(tensorflow)
library(EBImage)
setting working directory atau menentukan di folder mana yang akan bekerja dengan perintah setwd. Lalu mendefinisikan objek yang berisi folder gambar hasil resize yang akan dilakukan
setwd(“D://percobaan/”)
save_in=(“D://percobaanhasil/”)
Selanjutnya lihat detail dari gambar dengan cara klik kanan pada gambar > Properties > Details
Seperti yang dapat dilihat, gambar baju_01 memiliki ukuran 225x225 pixels. Gambar laptop_01 memiliki ukuran 300x168 pixels. Dari sini dapat diketahui bahwa ukuran masing-masing gambar yakni berbeda, dengan demikian perlu dilakukan resize agar ukuran masing-masing gambar menjadi sama. buat folder dengan nama percobaanhasil. lalu jalankan syntax dibawah ini
gambar<-list.files()
w<-300
h<-300
Kemudian melakukan resize ukuran masing-masing gambar,
for(i in 1:length(gambar))
{result<-tryCatch({
imgname<-gambar[i]
img<-readImage(imgname)
img_resized<-resize(img, w=w, h=w)
path<-paste(save_in, imgname, sep=” “)
writeImage(img_resized, path, quality = 70)
print(paste(“done”, i, sep = “ “))
},
error=function(e) {print(e)}
)}
jika berhasil maka pada output bertuliskan done namun apabila tidak berhasil maka akan ditampilkan bagian error-nya
untuk mengecek apakah gambar telah sama ukurannya silahkan cek di folder percobaanhasil
lakukan setting working directory pada folder gambar hasil resize.
setwd(“D://percobaanhasil/”)
gambar2<-list.files()
gambar2
Selanjutnya, membaca gambar hasil rezise dan melihat strukturnya.
gambar2<-lapply(gambar2, readImage)
str(gambar2)
output
Dari output di atas dapat diketahui struktur dari ke-12 gambar, diantaranya yaitu ukuran dari ke-12 gambar yang sama yakni 300x300 dan channelnya 3 karena merupakan gambar berwarna.
Untuk melihat salah satu gambar, berikut contoh gambar nomor 5 dan dimensinya
display(gambar2[[5]]) #tampilkan gambar no 5
dim(gambar2[[5]]) #dimensi gambar
Lalu mendefinisikan data training yang terdiri dari 4 gambar baju (gambar 1–4) dan 4 gambar laptop (gambar 7–10), Kemudian sisanya merupakan data testing
train<-gambar2[c(1:4,7:10)]
test<-gambar2[c(5:6,11:12)]
melihat representasi data train nomor 3 yang berupa gambar kedalam bentuk excel
train[[3]] #lihat detail (1:5) dari gambar train no 3
display(train[[3]])
write.csv(train[[3]], (“D://datatrain.csv”))
menampilkan gambar data training secara terurut dimana terdapat 2 baris dengan 4 gambar pada masing-masing baris
par(mfrow=c(2,4))
for(i in 1:8) plot(train[[i]])
Melakukan resize pada gambar yang ada di data train dan data testing agar berukuran kecil sehingga dapat mempercepat proses pengenalan gambar. Adapun ukurannya yaitu 32x32 pixels.
for(i in 1:8){train[[i]]<-resize(train[[i]], 32, 32)}
for(i in 1:4){test[[i]]<-resize(test[[i]], 32, 32)}
Melakukan kombinasi pada semua gambar yang ada di data train, lalu mengikatnya ke dalam 1 letak yang sama agar tidak berganti-ganti urutannya serta melihat hasil kombinasi gambar yang telah diikat
train<-combine(train)
x<-tile(train, 8)
display(x, title=’Mantul Picture’)
Melakukan kombinasi pada semua gambar yang ada di data testing, lalu mengikatnya ke dalam 1 letak yang sama agar tidak berganti-ganti urutannya serta melihat hasil kombinasi gambar yang telah diikat
test<-combine(test)
y<-tile(test, 4)
display(y, title=’Mantul Picture’)
Melihat dimensi data Training dan data Testing
dim(train)
dim(test)
Menyusun dimensi pada data training dan data testing agar sesuai dengan apa yang diinginkan oleh CNN yang dibawa oleh keras dan tensorflow. Adapun urutannya yaitu dimensi ke-4 menjadi urutan pertama, dimensi pertama menjadi yg ke-2, dan seterusnya.
train<-aperm(train, c(4,1,2,3))
test<-aperm(test, c(4,1,2,3))
dim(train)
dim(test)
Seperti yang dapat dilihat, dimensi data training dan data testing telah berubah. Dari output tersebut diperoleh informasi bahwa pada data training memiliki 8 gambar dengan ukuran 32x32 serta memiliki 3 channel. Sedangkan pada data testing memiliki 4 gambar dengan ukuran 32x32 serta memiliki 3 channel.
Membuat data target yang merupakan klasifikasi dari gambar. Dimisalkan 0 yaitu Baju dan 1 yaitu laptop.
trainy<-c(rep(0,4), rep(1,4))
trainy
testy<-c(rep(0,2), rep(1,2))
testy
Membuat label dari data target agar sesuai dengan klasifikasi yang digunakan di dalam library keras dan tensorflow yaitu data kategorik
trainlabels<-to_categorical(trainy)
testlabels<-to_categorical(testy)
Sekian untuk materi Convolutional Neural Network (CNN). Semoga bermanfaat dan selamat mencoba😊
wassalamualaikum