Convolutional Neural Network Using RStudio and Tensorflow

Tania Salsabila
5 min readJun 28, 2019

--

A diagram of Convolutional Neural Networks. Source.

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

--

--