Transfer Learning dan fine-tuning python

Ego oktafanda
2 min readMar 4, 2023

--

Transfer Learning dan fine-tuning merupakan teknik yang umum digunakan pada Convolutional Neural Network (CNN) untuk meningkatkan akurasi pada model yang telah ada. Transfer learning dilakukan dengan menggunakan model yang telah dilatih sebelumnya pada dataset yang berbeda. Model tersebut kemudian dapat dilatih ulang pada dataset yang baru atau spesifik dengan fine-tuning.

Berikut langkah-langkah implementasi Transfer Learning dan fine-tuning pada CNN menggunakan Python:

  1. Siapkan dataset untuk dilatih dan diuji. Pastikan dataset sudah memiliki label atau kategori yang jelas.
  2. Impor library yang dibutuhkan seperti TensorFlow, Keras, dan library lain yang dibutuhkan.
  3. Gunakan pre-trained model yang telah dilatih sebelumnya, seperti VGG, Inception, atau ResNet. Misalnya, dapat menggunakan pre-trained model VGG16 dari Keras.
  4. Tambahkan lapisan baru pada pre-trained model sesuai dengan jumlah kelas pada dataset Anda.
  5. Matikan lapisan yang tidak perlu dilatih ulang (freeze) pada pre-trained model untuk menghindari overfitting dan mempercepat waktu pelatihan.
  6. Latih model dengan dataset menggunakan fungsi fit() pada Keras.
  7. Evaluasi model pada dataset uji dengan menggunakan fungsi evaluate() pada Keras.

Berikut contoh kode implementasi Transfer Learning dan fine-tuning pada CNN dengan menggunakan pre-trained model VGG16 dari Keras:

# Impor library yang dibutuhkan
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense, Flatten, Dropout
from keras.preprocessing.image import ImageDataGenerator

# Siapkan dataset untuk dilatih dan diuji
train_dir = 'dataset/train'
test_dir = 'dataset/test'
batch_size = 32

# Gunakan pre-trained model VGG16
base_model = keras.applications.VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# Tambahkan lapisan baru
model = Sequential()
model.add(base_model)
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

# Matikan lapisan yang tidak perlu dilatih ulang
for layer in base_model.layers:
layer.trainable = False

# Latih model dengan dataset
train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(train_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical')
test_generator = test_datagen.flow_from_directory(test_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical')
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit_generator(train_generator, steps_per_epoch=train_generator.n//batch_size, epochs=10, validation_data=test_generator, validation_steps=test_generator.n//batch_size)

# Evaluasi model pada dataset uji
score = model.evaluate_generator(test_generator, steps=test_generator.n//batch_size, verbose=1)
print('Accuracy: ', score[1])

Dalam contoh di atas, menggunakan dataset yang terdiri dari dua kelas (binary classification) dengan menggunakan fungsi aktivasi softmax pada lapisan output.

--

--