Transfer Learning dan Fine Tuning – 5

Melanjutkan dari modul sebelumnya, pada modul ini kita akan coba tingkatkan model accuracy dengan menggunakan teknik Fine Tuning.

Fine Tuning

Hal yang harus diperhatikan adalah, Fine Tuning pada beberapa top layer saja, jangan melakukan fine tuning network secara keseluruhan.

Top layer lebih ke pengenalan feature yang lebih spesifik, seperti mata, ekor, telinga dan lainnya. Sementara layer-layer awal, adalah mengenali fitur yang lebih general seperti line, edge, corner dan lainnya.

Tujuan dari fine tuning adalah melatih pre-trained model pada top-layer untuk mengenali feature dari dataset yang kita miliki.

Langkah pertama adalah un-freeze base model.

base_model.trainable = True

Untuk menentukan berapa layer yang akan di fine tuning, kita dahulu cek jumlah layer pada base model.

print("Number of layersin the base model: {}".format(len(base_model.layers)))
Number of layersin the base model: 154

Inisialisasi variable untuk menentukan index layer dimana training akan mulai dilakukan. Pada tutorial digunakan 100, jadi kita akan melatih model mulai dari layer 100 sampai dengan 154.

Kemudian lakukan looping, untuk mengatur layer 100 layer pertama tidak akan melakukan training.

fine_tune_at = 100
for layer in base_model.layers[:fine_tune_at]:
    layer.trainable = False

Setelah selesai menentukan layer mana yang akan melakukan training, kita compile model.

model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=0.0001),
              loss='binary_crossentropy',
              metrics=['accuracy'])

Langkah selanjutnya adalah training

model.fit(train_generator,  
                    epochs=5, 
                    validation_data=valid_generator)
Epoch 1/5
16/16 [==============================] - 14s 530ms/step - loss: 0.2087 - accuracy: 0.9140 - val_loss: 0.0825 - val_accuracy: 0.9660
Epoch 2/5
16/16 [==============================] - 8s 482ms/step - loss: 0.0301 - accuracy: 0.9980 - val_loss: 0.0874 - val_accuracy: 0.9660
Epoch 3/5
16/16 [==============================] - 8s 478ms/step - loss: 0.0096 - accuracy: 1.0000 - val_loss: 0.1062 - val_accuracy: 0.9660
Epoch 4/5
16/16 [==============================] - 8s 477ms/step - loss: 0.0043 - accuracy: 1.0000 - val_loss: 0.1173 - val_accuracy: 0.9650
Epoch 5/5
16/16 [==============================] - 8s 478ms/step - loss: 0.0024 - accuracy: 1.0000 - val_loss: 0.1294 - val_accuracy: 0.9670

Dapat kita lihat, setelah melakukan fine tuning, tingkat akurasi bertambah.

Berikutnya adalah kita lakukan evaluasi.

valid_loss, valid_accuracy = model.evaluate(valid_generator)
8/8 [==============================] - 3s 316ms/step - loss: 0.1294 - accuracy: 0.9670
print("Validation accuracy after fine tuning: {}".format(valid_accuracy))
Validation accuracy after fine tuning: 0.9670000076293945

Hasil evaluasi menunjukan akurasi model mencapai 96.7%. Jadi setelah melakukan fine tuning, model lebih akurat dalam mengenali dataset yang kita gunakan.

Untuk file colab akses di https://colab.research.google.com/drive/1nuwT1Jk9dZyI7zcwye965sEaCqu3aljz?usp=sharing

Sharing is caring:

Leave a Comment