Image Classification dengan R dan Tensorflow (Gojek vs GrabBike)

Pada kesempatan ini, saya menggunakan perbandingan data training dan testing 80:20 sehingga pada masing-masing kategori akan memiliki 40 data training dan 10 data testing.> train=gambar_resized[c(1:40,51:90)]> test=gambar_resized[c(41:50,91:100)]Selanjutnya, untuk memperkecil parameter yang akan digunakan CNN dalam memproses data serta meminimalisir waktu pengenalan gambar pada mesin, kita akan mengubah semua gambar yang ada menjadi satu ukuran yaitu 32×32 pixel dengan perintah resize.Perintah tile, digunakan untuk mengikat gambar yang telah dikombinasikan menjadi satu baris seperti diatas..Manfaatnya yaitu ketika gambar tersebut dianalisis menggukan CNN, urutan gambar tidak akan berubah.> for (i in 1:80){train[[i]]=resize(train[[i]],32,32)} > for (i in 1:20){test[[i]]=resize(test[[i]],32,32)}> train=combine(train) > x=tile(train,80) > plot.new() > display(x,title(“Train”)) > dim(train)> test=combine(test) > y=tile(test,20) > display(y, title(“Test”)) > dim(test)CNN mempunyai urutan dimensi gambar tersendiri dalam proses pembacaan data, sehingga kita perlu menyesuaikan dimensi gambarnya menggunakan script berikut:> train=aperm(train,c(4,1,2,3))> test=aperm(test,c(4,1,2,3))> Tahap AnalisisDalam klasifikasi, kita perlu mendefinisikan variabel yang akan dijadikan sebagai target..Oleh sebab itu, kita perlu membangkitkan data kategorik yang dapat mendefinisikan objek kita..Pada kesempatan ini, kita akan menggunakan “1” sebagai kategori untuk gambar GoJek dan “2” sebagai GrabBike. Dengan membangkitkan data sesuai dengan banyaknya data train dan test, dengan masing-masing data train berjumlah 40 dan test 10.Selanjutnya, data yang telah kita bangkitkan akan didefinisikan sebagai data kategorik menggunakan function to_categorical.> trainy=c(rep(1,40),rep(2,40)) > testy=c(rep(1,10),rep(2,10))#membuat label data menjadi kategorik > trainLabels=to_categorical(trainy) > testLabels=to_categorical(testy)Nah, ketika memanggil function ini sering terjadi error..function to_categorical terhubung dengan package keras, sehingga package ini memang benar-benar harus terinstall dengan benar..Ketika memanggil function to_categorical terdapat notifikasi bahwa Python module keras was not found meskipun semua konfigurasi telah dikenali oleh sistem seperti gambar dibawah ini, maka sobat bisa mengikuti langkah menginstall kembali package keras berikut:> Langkah Install Package> library(reticulate)> conda_remove(“r-tensorflow”) > library(keras) > install_keras()##Refresh R-Studio> library(keras)> use_condaenv(“r-tensorflow”)#Jika Masih Error Running Script Berikut> library(reticulate) > py_run_string(‘import keras’)*note: tanda “>” tidak perlu dicopykan ke console (tidak ikut dirunning)Script ini merupakan model yang digunakan untuk melakukan klasifikasi..Sobat dapat mencoba untuk mengganti” sesuai dengan teori/keinginan agar mendapatkan model yang terbaik.> 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)Akurasi data test dapat digunakan untuk melakukan evaluasi terhadap model yang didapatkan..model yang didapatkan pada percobaan kali ini menghasilkan akurasi sebesar 45% karena banyak data yang diklasifikasikan tidak sesuai dengan data sesungguhnya.> 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)> Langkah untuk Memperbesar AkurasiDalam membuat object detection, banyak tantangan yang harus dihadapi..Salah satunya yaitu kebaikan model yang dimiliki, dimana hal tersebut ditandai dengan besarnya nilai akurasi..Adapun beberapa cara yang dapat dilakukan untuk memperbesar akurasi antara lain:Memperbanyak datasetMencari data yang tidak banyak noise, sehingga lebih terfokus kepada objekMencari referensi atau Trial and error dalam setting pembuatan model yang lebih baikSelamat mencoba… Semoga apa yang saya bagikan ini bisa bermanfaat dan feel free untuk memberikan masukanOriginally published at statistics-diary.blogspot.com.. More details

Leave a Reply