Training Data Dengan VGG16


Sebelumnya kita telah melatih data kita dengan model yang dibuat dengan manual, dan hasil yang didapatkan kurang memuaskan. Mungkin dengan banyak epochs akan membantu, tetapi akan memakan waktu banyak. Kali ini kita akan mencoba menggunakan Model Applications untuk membuat modelnya.


Model Applications


Sebelum kita mulai membuat sebuah model menggunakan Model Applications, sebaiknya kita pelajari dulu apa itu Model Applications. Model Applications adalah Aplikasi yang disediakan oleh Tensorflow untuk mempermudah suatu pekerjaan dalam pemrograman.

Untuk lebih lengkapnya mengenai berbagai macam aplikasi yang disediakan dapat dilihat pada tautan berikut :

https://www.tensorflow.org/api_docs/python/tf/keras/applications


VGG16


Aplications yang akan kita gunakan adalah VGG16, yaitu sebuah module yang berisi model yang sudah jadi, untuk lebih jelasnya akan ditunjukan langsung saat pengerjaan agar lebih paham :D


Implementasi VGG16


Sebelumnya kita telah mendapatkan akurasi yang kurang memuaskan dari model yang telah kita buat manual. Kali ini kita akan mencoba membuat model dari VGG16.

Langkah pertama yang harus dilakukan tentunya meng-import VGG16.

from keras.applications import vgg16

Lalu kita deklarasikan vgg16 kedalam variable.

vgg16_model = vgg16.VGG16()

Setelah itu kita buat model dengan sequential dan memasukan layer-layer di dalam VGG16 ke dalam model sequential tersebut.

model = Sequential()
for layer in vgg16_model.layers[:-1]:
  model.add(layer)

Pada kode diatas kita memasukan layer yang berada di dalam VGG16 ke dalam model sequential yang telah dibuat dengan perulangan.

layers[:-1] akan membuat layer terakhir tidak dimasukan karena nantinya akan kita tambahkan secara manual agar sesuai dengan output yang kita inginkan.

Terakhir kita tambahkan layer Dense dengan activation softmax sebagai layer output.

model.add(Dense(3, activation='softmax'))

Dan ketika kita melakukan summary() akan muncul hasil model seperti dibawah.

“Output Model Summary”
Output Summary From Model VGG16


Compiling Model


Setelah VGG16 berhasil kita implementasikan kedalam model, sekarang kita susun model tadi.

model.compile(
    loss='categorical_crossentropy',
    optimizer='adam',
    metrics=['accuracy']
)

Kali ini kita masih menggunakn loss dan optimizer yang sama seperti part sebelumnya.


Model Training


Sekarang saatnya melatih model yang telah kita buat.

history = model.fit(
    train_image,
    validation_data=val_image,
    epochs=5
)

Kita akan melakukan 5 epochs karena jumlah layer yang banyak akan mempengaruhi lama proses training, untuk efisiensi waktu kita akan menggunakan 5 epochs.

Dibawah adalah hasil dari training yang kita lakukan.

“Hasil Training Model VGG16”
Hasil Training Model VGG16


Analisa


Untuk menganalisa kita akan menggunakn fungsi yang telah kita buat pada part sebelumnya.

Berikut adalah hasil Analisa dengan graph dari proses training data.

“Graph Result Training”
Graph Result Training

Berdasarkan graph diatas, kita telah mendapatkan hasil yang sangat bagus. Akurasi dan validasi berada diatas 95% dan loss yang didapatkan hampir 0%. Selanjutnya kita akan melakukan uji coba pada model kita.


Predicting


Langkah terakhir yang harus dilakukan adalah menguji model. Silahkan mencoba dengan mengambil gambar sendiri. Kita akan menggunakan gambar tersebut untuk memprediksi klasifikasi gambar.

from google.colab import files
from keras.preprocessing import image
import matplotlib.image as mpimg
%matplotlib inline

uploaded = files.upload()

for fn in uploaded.keys():

  # predicting images
  path = fn
  img = image.load_img(path, target_size=(224,224))
  imgplot = plt.imshow(img)
  x = image.img_to_array(img)
  x = np.expand_dims(x, axis=0)

  images = np.vstack([x])
  classes = model.predict(images, batch_size=32)
  pr = np.argmax(classes, axis=1)
  print(pr)

  if pr==0:
    print('Paper')
  elif pr==1:
    print('Rock')
  elif pr==2:
    print('Scissors')

Kode diatas akan memanggil perintah input dari data storage internal perangkat kita untuk memilih gambar. Gambar yang dipilih akan diubah menjadi bentuk array dan di prediksi menggunakan model.predict().

“Implementasi Model pada sebuah gambar”
Implementasi Model Pada Sebuah Gambar

Hasil dari predict masih dalam bentuk array yang mana harus kita ubah agar lebih mudah dipahami. Pada part image preprocessing kita menambahkan

classes=['paper', 'rock', 'scissors']

Yang dapat diartikan juga

classes=[0, 1, 2]

Yaitu ‘paper’ akan bernilai 0, ‘rock’ akan bernilai 1, dan ‘scissors’ akan bernilai 2.

Jangan lupa sharing hasil belajar kalian dan jika ada kritik, saran atau pertanyaan boleh ditanyakan dibawah. Nanti kita diskusikan bersama :3