Friday, January 11, 2019

Image Classification Twitter And Traveloka With Convolutional Neural Network + Script RStudio

Tags



Halo semua kembali lagi dengan saya, pada kesempatan ini saya mau berbagi ilmu sedikit yang baru saya pelajari yaitu tentang klarifikasi gambar twitter dan traveloka dengan menggunakan CNN.
Sebelumnya seperti biasa udah pada tahu belum tentang Image Classification? Terus CNN itu apa? Kalau belum tau, saya akan menjelaskan sedikit tentang Image Classification. Image Classification yaitu membedakan antara gambar pertama maupun gambar kedua dan pasti kita juga bingung dengan membedakan kedua logo twitter dan traveloka karena kalau di lihat dari sekilas itu hampir mirip dari segi warna maupun gambar burung yang hanya terbalik arahnya. Disini saya menggunakan CNN atau Convolutional Neural Network yaitu salah satu jenis neural network yang biasa digunakan pada data image. CNN bisa digunakan untuk mendeteksi dan mengenali object pada sebuah image. Secara garis besar CNN tidak jauh beda dengan neural network biasanya. Oke kita langsung aja langkah-langkanya
  • Langkah pertama install dulu library
Library(keras)
Library(tensorflow)
Library(EBImage)
  • Langkah kedua cari lokasi data gambar dan hasil gambar di simpan.
setwd(“D://image”) #Lokasi gambar disimpan
save_in<-(“E://hasil”) # Lokasi hasil proses gambar
  • Langkah Ketiga menyamakan ukuran gambar
gambar<-list.files()
w<-100
h<-100
for (i in 1:length(gambar))
{result<-tryCatch({
 imgname<-gambar[i]
 img<-readImage(imgname)
 img_resized<-resize(img,w=w,h=h)
 path<-paste(save_in,imgname,sep=” “)
 writeImage(img_resized,path,quality=70)
 print(paste(“done”,i,sep=””))
},
error=function(e){print(e)}
)}
  • Langkah selanjutnya mengidentifikasi gambar baris pertama dan kedua untuk membedakan antara gambar twitter dan gambar traveloka dengan menggunakan sebagai training dan testing. dengan perbandingan 3:1 .
train<-gambar2[c(1:6,9:14)]
test<-gambar2[c(7:8,15:16)]

train[[5]]
display(train[[5]])
write.csv(train[[5]],”D://image//datatrain.csv”)
display(train[[2]])

par(mfrow=c(2,4))
for (i in 1:12) plot(train[[i]])
for (i in 1:12){train[[i]]<-resize(train[[i]],32,32)}
for(i in 1:4){test[[i]]<-resize(test[[i]],32,32)}
train<-combine(train)
x<-tile(train,12)
display(x,title=’gambar’)
dim(train)
test<-combine(test)
y<-tile(test,4)
dim(test)
  • Dirubah letak dim nya
train<-aperm(train,c(4,1,2,3))
test<-aperm(test,c(4,1,2,3))
dim(train)
dim(test)
trainy<-c(rep(0,4),rep(1,4))
testy<-c(rep(0,2),rep(1,2))
trainy
testy
  • Kombinasi gambar antara twitter dan traveloka
  • Penentuan Model CNN
model=keras_model_sequential()
model%>%
 layer_conv_2d(filters=32,
 kernel_size = c(3,3),
 activation = “relu”,
  • Relu=rectivied linear unit. mengambil nilai tertinggi untuk aktivasi
input_shape = c(32,32,3))%>%
layer_conv_2d(filters = 32,
kernel_size = c(3,3),
activation = “relu”)%>%
 layer_max_pooling_2d(pool_size = c(2,2))%>%
  • Untuk regularisasi pada node yang punya nilai kecil tidak akan diteruskan/dikerjakan
layer_dropout(rate=0.01) %>% #untuk regularisasi pada node yang punya nilai kecil tidak akan diteruskan/dikerjakan
layer_conv_2d(filters = 64,
kernel_size = c(3,3),
activation = “relu”)%>%
layer_max_pooling_2d(pool_size = c(2,2))%>%
layer_dropout(rate=0.01) %>%
  • Merubah menjadi vektor
layer_flatten()%>%
 layer_dense(units=256, activation = “relu”)%>%
 layer_dropout(rate=0.01) %>%
  • Unit=banyak objek yg akan di klasifikasi, softmax=hampir mirip dgn relu
layer_dense(units=3,activation = “softmax”)%>%
compile(loss=”categorical_crossentropy”,
optimizer = optimizer_sgd(lr=0.01,decay = 1e-06,
momentum = 0.9,
nesterov=T),
  • sgd=stokastik gladiand descend (secara stokastik random memilih mana yg dengan cepat menuju global optimum)
summary(model)
metrics=c(‘accuracy’))
  • Uji Coba antara gambar twitter dan traveloka
proses=model%>%
 fit(train,
 trainLabels,
 epoch=50,
 batch_size = 32,
 validation_split = 0.2)
plot(proses)
model%>%evaluate(train, trainLabels)
pred=model%>%predict_classes(train)
pred
table(predicted=pred, actual=trainy)
prob=model%>%predict_proba(train)
cbind(prob,predict_classes=pred,actual=trainy)
model%>%evaluate(test,testLabels)
pred=model%>%predict_classes(test)
pred
table(predicted=pred, actual=testy)
prob=model%>%predict_proba(test)
cbind(prob,predict_classes=pred,actual=testy)
pred=model%>%predict_classes(test)
pred
table(predicted=pred, actual=testy)

Script Rstudio

library(keras)
library(tensorflow)
library(EBImage)
setwd(“D://image”)
save_in<-(“E://hasil”)
gambar<-list.files()
w<-100
h<-100
for (i in 1:length(gambar))
{result<-tryCatch({
 imgname<-gambar[i]
 img<-readImage(imgname)
 img_resized<-resize(img,w=w,h=h)
 path<-paste(save_in,imgname,sep=” “)
 writeImage(img_resized,path,quality=70)
 print(paste(“done”,i,sep=””))
},
error=function(e){print(e)}
)}
setwd(“D://image/”)
gambar2<-list.files()
gambar2
gambar2<-lapply(gambar2,readImage)
str(gambar2)
display(gambar2[[3]]) #melihat gambar
dim(gambar2[[3]])
train<-gambar2[c(1:6,9:14)]
test<-gambar2[c(7:8,15:16)]
####
train[[5]]
display(train[[5]])
write.csv(train[[5]],”D://image//datatrain.csv”)
display(train[[2]])
####
par(mfrow=c(2,4))
for (i in 1:12) plot(train[[i]])
for (i in 1:12){train[[i]]<-resize(train[[i]],32,32)}
for(i in 1:4){test[[i]]<-resize(test[[i]],32,32)}
train<-combine(train)
x<-tile(train,12)
display(x,title=’gambar’)
dim(train)
test<-combine(test)
y<-tile(test,4)
dim(test)
#dirubah letak dim nya
train<-aperm(train,c(4,1,2,3))
test<-aperm(test,c(4,1,2,3))
dim(train)
dim(test)
trainy<-c(rep(0,4),rep(1,4))
testy<-c(rep(0,2),rep(1,2))
trainy
testy
trainLabels<-to_categorical(trainy)
testLabels<-to_categorical(testy)
trainLabels
testLabels
model=keras_model_sequential()
model%>%
 layer_conv_2d(filters=32,
 kernel_size = c(3,3),
 activation = “relu”,
 input_shape = c(32,32,3))%>% #relu=rectivied linear unit. mengambil nilai tertinggi untuk aktivasi
 layer_conv_2d(filters = 32,
 kernel_size = c(3,3),
 activation = “relu”)%>%
 layer_max_pooling_2d(pool_size = c(2,2))%>%
 layer_dropout(rate=0.01) %>% #untuk regularisasi pada node yang punya nilai kecil tidak akan diteruskan/dikerjakan
 layer_conv_2d(filters = 64,
 kernel_size = c(3,3),
 activation = “relu”)%>%
 layer_max_pooling_2d(pool_size = c(2,2))%>%
 layer_dropout(rate=0.01) %>%
 layer_flatten()%>% #merubah menjadi vektor
 layer_dense(units=256, activation = “relu”)%>%
 layer_dropout(rate=0.01) %>%
 layer_dense(units=3,activation = “softmax”)%>% #unit=banyak objek yg akan di klasifikasi, softmax=hampir mirip dgn relu
 compile(loss=”categorical_crossentropy”,
 optimizer = optimizer_sgd(lr=0.01,
 decay = 1e-06,
 momentum = 0.9,
 nesterov=T),
 metrics=c(‘accuracy’))#sgd=stokastik gladiand descend (secara stokastik random memilih mana yg dengan cepat menuju global optimum)
summary(model)
proses=model%>%
 fit(train,
 trainLabels,
 epoch=50,
 batch_size = 32,
 validation_split = 0.2)
plot(proses)
model%>%evaluate(train, trainLabels)
pred=model%>%predict_classes(train)
pred
table(predicted=pred, actual=trainy)
prob=model%>%predict_proba(train)
cbind(prob,predict_classes=pred,actual=trainy)
model%>%evaluate(test,testLabels)
pred=model%>%predict_classes(test)
pred
table(predicted=pred, actual=testy)
prob=model%>%predict_proba(test)
cbind(prob,predict_classes=pred,actual=testy)
pred=model%>%predict_classes(test)
pred
table(predicted=pred, actual=testy)
Nah, Mungkin itu saja yang saya berikan jika ada yang kurang dimengerti bisa tulis dikomentar bawah. Terima kasih semoga ilmu ini bermanfaat.


EmoticonEmoticon