Image Clasification Dengan Keras! (R)

Rintaldi Ghazian Hindami
6 min readJan 7, 2020

--

Hoihoi Manteman! Coretan kali ini akan membahas Image Clasification Dengan Keras tapi menggunakan R.

Oke, Image Clasification merupakan salah satu penggunaan dari Neural Network, Nah Neural Network adalah sebuah model yang terinspirasi dari proses kerja otak manusia yang saling berhubungan untuk saling tukar informasi melalui Neuron.
Image Clasification juga merupakan sebuah Deep Learning yang merupakan salah satu cabang dari Machine Learning. Jadi coretan kita pada tulisan kali ini juga ga jauh jauh amat dari yang namnya machine learning ya mentemen.

Kalo udah ngomong yang namanya Deep Learning pasti juga ngomong, Framework apasih yang dipake ? Ngomongin soal Framework, typenya ada macem Macem. ada TensorFlow, ada Keras, ada Pytorch, banyak deh. Tapi yang lagi populer sih TensorFlow sama Keras.

meskipun TensorFlow yang lagi naik naiknya nih, kita pake yang Keras dulu aja ya. hehe

Kenalan dulu yuk ama Keras.

Keras adalah high-level network API yang dikembangkan dengan Python dengan fokus tujuan untuk mempercepat proses riset atau percobaan.

Beberapa fitur utama dari Keras:

  • Mampu menjalankan source code yang sama menggunakan CPU atau GPU dengan lancar
  • API yang user-friendly sehingga mempermudah penggunanya dalam proses prototipe model deep learning
  • Dukungan built-in untuk CNN atau Convolutional Neural Networks (Computer Vision), RNN atau Recurrent Neural Networks (untuk sequence processing), dan kombinasi keduanya
  • Dapat digunakan untuk hampir semua jenis dari model deep learning

Walaupun Keras pada dasarnya makenya Python, thanks for R. Kita bakal make R interface Rstudio untuk running si Keras ini pada program R. Tapi yang perlu diingat, keras ini Back-end Utamanya TensorFlow ya maksudnya latar belakangnya TersorFlow jadi pastikan Senjatamu atau PC sudah bisa menjalankan TensorFlow ya, versi pythonnya juga harus diperhatikan, python3.7 katanya punya masalah sama TensorFlow.

Ayok kita Ngoding!

Siapin Data Setnya

Data Set yang digunakan kali ini adalah Data Set Fashion MNIST. Bisa kok didapatkan disini. Oke, jadi dataset ini isinya ada 70.000 data gambar hitam putih yang dibedakan menjadi 10 kategori yang direpresentasikan dengan pixel 28x28.

Jadi tujuan dari Image Clasification ini seberapa akurat sih model ini dapat mengidentifikasikan gambar kedalam kategori yang benar. lanjut

Pre processing data

Yang Pertama dan yang paling utama, mantemen buka dulu Rstudionya ya, udah pada punya kan ? oke kalo udah buka silahkan install packages dibawah berikut ini

install.packages("keras")
install.packages("data.table")
install.packages("tensorflow")
library("keras")
library("data.table")
library("tensorflow")

Packages ‘Keras’ tersedia di CRAN kenapa kita menggunakan Library Keras? ya karna kita mau image clasification make keras kan

Lalu, library data.table, berguna untuk Preprocessing data didalamnya juga tersedia fungsi ‘fread(), dengan kegunaan untuk mempercepat process data dalam skala besar .

Untuk tensorflow sendiri untuk penunjang dari Keras itu sendiri.

fashion_train <- fread("filedirectorykalian/fashion-mnist_train.csv")
fashion_test <- fread("filedirectorykalian/fashion-mnist_test.csv")
dim(fashion_train)
dim(fashion_test)

setelah dipanggil semua librarynya, silahkan input datanya.

bisa dilihat ya, dari data train yang dimana akan kita gunakan sebagai data untuk melatih model , digunakan sebanyak 60000 data dan kita memakai 10000 data untuk mengetes model yang sudah dilatih tadi.

Supaya dapat direpresentasi sebagai kisaran nilai antara 0 sampai 1, maka masing-masing data train dan test terlebih dahulu dijadikan matriks, lalu dibagi dengan 255 (nilai terbesar sebuah piksel)

x_train <- data.matrix(fashion_train[,-1]) / 255
x_test <- data.matrix(fashion_test[,-1]) / 255
dim(x_train)
dim(x_test)

Sudah ? lanjut menyatakan label klasifikasi untuk 10 label yang ada

y_train <- fashion_train$label
y_test <- fashion_test$label
str(y_train)
str(y_test)

oke sudah, lalu siapkan model dengan fungsi keras_model_sequential()

model <- keras_model_sequential()
# model %>%
# layer_dense(units = 256, activation = "relu", input_shape = c(784)) %>%
# layer_dropout(rate = 0.4) %>%
# layer_dense(units = 128, activation = "relu") %>%
# layer_dropout(rate = 0.3) %>%
# layer_dense(units = 10, activation = "softmax")
model %>%
layer_flatten(input_shape = c(784)) %>%
layer_dense(units = 128, activation = "relu") %>%
layer_dense(units = 10, activation = "softmax")
summary(model)

nah, keseluruhan parameter bisa dilatih. tapi sebelumnya kita harus mengcompile terlebih dahulu modelnya agar bisa menambahkan indikator seberapa besar loss dan accuracy yang dihasilkan dari model.

  • loss : untuk mengukur seberapa akurat model selama proses training.
  • optimizer : untuk meliaht bagaimana model berubah berdasarkan data yang dilihat dan juga loss function nya.
  • metrics : untuk memantau tiap langkah dalam proses training dan testing. Pada analisis ini digunakan accuracy, seberapa akurat gambar-gambar yang berhasil diklasifikasikan dengan benar.
model %>% compile(
loss = "sparse_categorical_crossentropy",
optimizer = optimizer_rmsprop(),
metrics = c("accuracy")
)

lalu kita akan melakukan proses training dengan fungsi fit() dengan epoch sebanyak 10 kali

history <- model %>% fit(
x_train, y_train,
epochs = 10
)

nah ketika kodingan diatas dijalankan model akan dilatih sebanyak 10 kali epoch

hm, kita mendapatkan akurasi sebesar 90,26%

bisa dilihat, semakin kita melatih modelnya maka akurasinya akan semakin membesar dan lossnya akan semakin mengecil

lalu evaluasi modelnya untuk data test

model %>% evaluate(x_test, y_test)

well, dari model yang kita latih untuk data train jika dievaluasikan kedalam data test kita mendapatkan accuracy sebesar 88.07%. Ini terjadi karena adanya overfitting data yang artinya ML yang kita gunakan mempunyai peforma yang buruk pada data baru dibanding data yang telah lebih dulu kita gunakan.

Prediksi modelnya

Dengan model yang sudah di-train, saya dapat melakukan prediksi beberapa gambar berdasarkan 10 kategori yang sudah disiapkan.

Fungsi predict_classes() digunakan untuk memprediksi klasifikasi dari masing-masing data.

categories = c('T-shirt',
'Trouser',
'Pullover',
'Dress',
'Coat',
'Sandal',
'Shirt',
'Sneaker',
'Bag',
'Boot')
class_pred <- model %>% predict_classes(x_test)
table(class_pred)

kategorinya adalah sebagai berikut ;

  • 0 untuk Tshirt
  • 1 untuk Trouser
  • 2 untuk Pullover
  • 3 untuk Dress
  • 4 untuk Coat
  • 5 untuk Sandal
  • 6 untuk Shirt
  • 7 untuk Sneaker
  • 8 untuk Bag
  • 9 untuk Boot

untuk outpunya sebagai diatas, ML sudah mengidentifikasi dati 10000 data test yang ada kedalam 10 kategori yang udah disebutkan diatas.

mari membuat plotnya

plotResults <- function(images) {
x <- ceiling(sqrt(length(images)))
par(mfrow = c(x,x), mar = c(.1,.1,.1,.1))

for (i in images) {
m <- matrix(x_test[i,], nrow = 28, byrow = TRUE)
m <- apply(m, 2, rev)
image(t(m), col = grey.colors(255), axes = FALSE)

predicted_label <- class_pred[i]
true_label <- y_test[i]

if(predicted_label == true_label) {
color <- "green"
} else {
color <- "red"
}

text(0.5, 0.1, col = color, cex = 1.5, categories[predicted_label+1])
}
}
plotResults(1:100)

bisa dilihat, tulisan yang menunjukkan warna merah itu adalah Image Clasification yang salah. dengan tingkat akurasi sebesar 88.07% dirasa sudah cukup bagus.

Kesimpulan

Yap kita sudah berhasil menjalankan Image Clasification dengan Keras menggunakan Platform R. Yang perlu diperhatikan dari seluruhnya setelah melakukan train dan test, apakah ada prose Overfitting dalam proses tersebut, dikarenakan jika nilai overfitting besar, maka berapapun tinggi akurasi dalam melatih model tidak akan berpengaruh banyak pada tingkat akurasi pada saat model diberikan dengan data baru.

Hm Hm, mungkin sekian dulu coretannya pada kali ini, penulis akan merenung mau menulis apalagi, sampai jumpa di coretan berikutnya.

Until Next time

Ciao manteman!

Referensi

--

--

Rintaldi Ghazian Hindami
Rintaldi Ghazian Hindami

Written by Rintaldi Ghazian Hindami

Some Folk Trying to be expertise in Data Analytics

No responses yet