Deep Learning dengan Metode CNN dengan Menggunakan R (part III)

Gifa Delyani Nursyafitri
5 min readJul 3, 2019

--

Halo guys! Balik lagi nih bareng aku hehe.

Di artikel sebelumnya, Deep Learning dengan Metode CNN dengan Menggunakan R (part II) kita membahas tentang Metode CNN. Artikel ini merupakan lanjutannya.

Penasaran? Stay tune!

Selanjutnya kita mulai masuk di tahap bagian model dari convolutional neural network. Untuk melakukan permodelan untuk klasifikasi gambar dapat menggunakan perintah keras yang berada di dalam library packages keras.

# membuat model 
model<-keras_model_sequential()
model%>%
layer_conv_2d(filters=32,
kernel_size=c(3,3),
activation = 'relu',
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))%>%
layer_dropout(rate=0.01)%>%
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()%>%
layer_dense(units=256,activation ='relu')%>%
layer_dropout(rate=0.01)%>%
layer_dense(units=2,activation = 'softmax')%>%
compile (loss='categorical_crossentropy',
optimizer = optimizer_sgd(lr = 0.01,
decay=1e-06,
momentum = 0.9,
nesterov = T),
metrics = c('accuracy'))
summary(model)

Pada syntax diatas, dibuat suatu layer convo pertama dengan 2 dimensi dari size 32 x 32 pixels dimana aktivasi fungsi yaitu relu atau (mengambil nilai tertinggi dari setiap perhitungan node yang ada). Kemudian dilanjutkan dengan pembuatan layer convo yang kedua, sehingga dilanjutkan dengan pembuatan layer max pooling dan pembuatan layer dropout (sebagai regularisasi atau node-node (parameter) yang mempunyai nilai kecil agar tidak diteruskan kedalam perhitungan untuk klasifikasi gambar). Selanjutnya, yaitu membuat ulang layer convo kembali sehingga hal ini yang disebut dengan deep (mendalam) karena satu gambar dilakukan beberapa kali layer convo, layer max pooling dan layer dropout. Setelah sampai pada pembuatan layer dropout (ukuran gambar semakin kecil) maka diteruskan ke layer flatten dan layer dense (proses jaringan saraf tiruan) sampai dengan proses pembuatan keakuratan (accuracy) dari suatu klasifikasi yang kita lakukan sehingga kita dapat mengetahui seberapa akurat model yang kita buat dan ini merupakan proses dari pembuatan jaringan saraf tiruan (deep learning) untuk model convolutional neural network.

Sehingga hasil summary dari model yang didapatkan adalah

Berdasarkan hasil summary, dapat dilihat bahwa bagian pertama yaitu conv2d_3 (Conv2D) menghasilkan perhitungan dimana output shape nya adalah (none, 30,30 dan 32). None menunjukkan banyak nya data misal 8 data maka akan menjadi 1–8 data. Oleh karena itu perhitungan parameternya yaitu diperoleh 896 parameter.

Selanjutnya output shape dimensi awal akan menjadi input shape layer convo yang kedua (30,30,32) sehingga diperoleh output shape sebesar (28, 28, 32) dan memperoleh 9248 parameter. Kemudian dilanjutkan dengan max pooling dimana proses input shape diambil dari hasil yang kedua dan memperoleh hasil output shape nya adalah (14, 14, 32). Sehingga didapatkan total dari parameter yang akan dikerjakan oleh deep learning adalah 619,234 parameter.

Kemudian mencari nilai perhitungan untuk melihat plot proses bekerjanya.

# proses perhitungan #
proses<-model%>%
fit(train,
trainLabels,
epoch=50,
batch_size = 32,
validation_split = 0.2)

Berdasarkan output yang didapatkan, dapat dilihat bahwa loss semakin menurun, sedangkan val_loss tidak menentu. Kemudian accuracy sudah sangat tinggi, sedangkan untuk val_acc hanya berada di 0.5.

Selanjutnya mengevaluasi tingkat keakuratan dari data training dengan menggunakan syntax sebagai berikut:

# mengevaluasi tingkat keakuratan data training# 
model%>%evaluate(train,trainLabels)
pred<-model%>%predict_classes(train)
pred

Kemudian didapatkan output seperti gambar berikut:

Loss dari data training sudah cukup kecil, yaitu 0.241 sedangkan tingkat accuracy nya cukup tinggi yaitu mencapai 0.875.

Di hasil prediksi, ada satu data yang salah diprediksi, yaitu data ke 8. Ada satu gambar Ponds (kode 1) yang dibaca sebagai Fire & Lovely (kode 0).

Selanjutnya membuat tabel validasi dari data training.

# membuat table validasi # 
table(predicted=pred, Actual=trainy)

Berdasarkan tabel validasi, maka dapat diketahui bahwa gambar Fire & Lovely (kode 0) yang diprediksi sebagai gambar Fire & Lovely telah tepat, yaitu sebanyak 4 sesuai dengan jumlah data training dari produk tersebut. Sedangkan gambar Ponds (kode 1) yang dibaca tepat sebagai Ponds hanya ada 3, sedangkan sisanya dibaca sebagai Fire & Lovely.

Kemudian melihat nilai probabilitas dari data training.

# melihat nilai probabilitas # 
prob<-model%>%predict_proba(train)
cbind(prob,predicted_class=pred,Actual=trainy)

Berdasarkan probabilitas juga dapat diketahui bahwa untuk data dengan kode 0, yaitu Fire & Lovely telah sama antara predicted_class dengan Actual. Sedangkan untuk kode 1, yaitu Ponds, untuk gambar terakhir diprediksi sebagai Fire & Lovely, sehingga yang tepat diprediksi sebagai Ponds hanya ada 3.

Selanjutnya melakukan evaluasi untuk data testing.

# mengevaluasi tingkat keakuratan data testing
model%>%evaluate(test,testLabels)
pred<-model%>%predict_classes(test)
pred

Kemudian didapatkan output seperti gambar berikut:

Loss dari data testing sudah cukup kecil, yaitu 0.320 sedangkan tingkat accuracy nya sangat tinggi yaitu mencapai 1.

Di hasil prediksi, data telah diprediksi dengan tepat. Fire & Lovely (kode 0) dibaca sebagai Fire & Lovely, dan Ponds (kode 1) dibaca tepat sebagai Ponds.

Selanjutnya membuat tabel validasi untuk data testing.

# membuat table validasi 
table(predicted=pred, Actual=testy)

Berdasarkan tabel validasi, maka dapat diketahui bahwa gambar Fire & Lovely (kode 0) yang diprediksi sebagai gambar Fire & Lovely telah tepat, yaitu sebanyak 2 sesuai dengan jumlah data testing dari produk tersebut. Begitupun gambar Ponds (kode 1) yang dibaca tepat sebagai Ponds ada 2 sesuai dengan jumlah data testing dari produk tersebut.

Kemudian melihat nilai probabilitas dari data testing.

# melihat nilai probabilitas # 
prob<-model%>%predict_proba(test)
cbind(prob,predicted_class=pred,Actual=testy)

Berdasarkan probabilitas juga dapat diketahui bahwa untuk data dengan kode 0, yaitu Fire & Lovely telah sama antara predicted_class dengan Actual. Begitupun untuk kode 1, yaitu Ponds, telah sama antara predicted_class dengan Actual. Yang artinya data testing telah tepat diprediksi.

Baiklah teman teman, kalian bisa mencoba dengan menggunakan data yang lebih banyak ataupun data dari produk yang berbeda. Dengan semakin banyaknya data, tentu juga akan membuat data training menjadi lebih banyak yang menyebabkan model lebih akurat dalam mengklasifikasikan data.

Sampai di sini dulu ya. Kritik dan saran yang membangun sangat ditunggu.

See youuu!

--

--

Gifa Delyani Nursyafitri
Gifa Delyani Nursyafitri

Written by Gifa Delyani Nursyafitri

Ku abadikan disini, karena aku paham betul bahwa ingatan manusia terbatas.

No responses yet