Sebelum melakukan training, kita perlu melakukan normalisasi dengan menggunakan fungsi ImageDataGenerator. Setiap pixel pada image akan dikalikan dengan nilai 1/255 (255 adalah nilai max dari pixel).
data_gen_train = ImageDataGenerator(rescale=1/255.) data_gen_valid = ImageDataGenerator(rescale=1/255.)
Selanjutnya adalah setting dimana model dapat memperoleh data dengan menggunakan fungsi flow_from_directory(). Setting untuk training dan validation. Target size yang digunakan adalah 128, sesuai dengan variable IMG_SHAPE yang kita inisialiasasi pada modul sebelumnya.
Perhatian, ukuran image yang didukung MobileNet : (96, 96), (128, 128), (160, 160), (192, 192), (224, 224).
train_generator = data_gen_train.flow_from_directory(train_dir, target_size=(128,128), batch_size=128, class_mode="binary") valid_generator = data_gen_valid.flow_from_directory(validation_dir, target_size=(128,128), batch_size=128, class_mode="binary")
Found 2000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.
Setup data sudah selesai, selanjutnya adalah proses training. Sama seperti pada tutorial sebelumnya, untuk melakukan training digunakan fungsi fit().
Perhatian, fungsi model.fit() sudah support data generator, jadi tidak perlu menggunakan fungsi fit_generator().
model.fit(train_generator, epochs=5, validation_data=valid_generator)
Epoch 1/5
16/16 [==============================] - 41s 549ms/step - loss: 0.7604 - accuracy: 0.5680 - val_loss: 0.6941 - val_accuracy: 0.5830
Epoch 2/5
16/16 [==============================] - 7s 467ms/step - loss: 0.6327 - accuracy: 0.6495 - val_loss: 0.5944 - val_accuracy: 0.6830
Epoch 3/5
16/16 [==============================] - 7s 470ms/step - loss: 0.5482 - accuracy: 0.7275 - val_loss: 0.5172 - val_accuracy: 0.7480
Epoch 4/5
16/16 [==============================] - 7s 462ms/step - loss: 0.4786 - accuracy: 0.7865 - val_loss: 0.4531 - val_accuracy: 0.8030
Epoch 5/5
16/16 [==============================] - 7s 463ms/step - loss: 0.4222 - accuracy: 0.8295 - val_loss: 0.4009 - val_accuracy: 0.8450
<tensorflow.python.keras.callbacks.History at 0x7fc174036a90>
Setelah selesai training, kita lakukan evaluasi. Akurasi dari model cukup tinggi, namun masih belum mencapai 95%. Silakan bereksperimen untuk meningkatkan akurasi, misalnya dengan mengubah epoch.
valid_loss, valid_accuracy = model.evaluate(valid_generator)
print("Accuracy after transfer learning: {}".format(valid_accuracy))
8/8 [==============================] - 2s 302ms/step - loss: 0.4009 - accuracy: 0.8450
Accuracy after transfer learning: 0.8450000286102295