Pendahuluan
Proyek HappySad-ImageClassifier adalah sebuah aplikasi berbasis pembelajaran mesin (machine learning) yang dirancang untuk mengklasifikasikan gambar ke dalam dua kategori: "Happy" (bahagia) dan "Sad" (sedih) . Proyek ini menggunakan framework TensorFlow dan Keras untuk membangun, melatih, dan mengevaluasi model Convolutional Neural Network (CNN).
Tujuan utama proyek ini adalah untuk memperkenalkan konsep dasar pembelajaran mendalam (deep learning) dalam konteks klasifikasi gambar. Dengan dataset yang terdiri dari gambar-gambar wajah manusia dengan ekspresi "Happy" dan "Sad", model ini dapat digunakan untuk memprediksi emosi dari gambar baru.
Dalam laporan ini, kita akan membahas secara rinci:
- Tujuan Proyek
- Dataset
- Arsitektur Model
- Implementasi Kode
- Pelatihan dan Evaluasi
- Kesimpulan dan Peluang Pengembangan
1. Tujuan Proyek
Proyek ini bertujuan untuk:
- Mengimplementasikan model CNN untuk klasifikasi gambar dua kelas ("Happy" dan "Sad").
- Memahami alur kerja pembuatan model machine learning, mulai dari persiapan data hingga evaluasi performa.
- Memberikan pemahaman praktis tentang penggunaan TensorFlow dan Keras dalam memecahkan masalah dunia nyata.
2. Dataset
Dataset yang digunakan dalam proyek ini terdiri dari gambar-gambar wajah manusia dengan ekspresi "Happy" dan "Sad". Dataset ini biasanya disusun dalam folder-folder terpisah berdasarkan kelas:
- Folder
happy/
: Berisi gambar-gambar dengan ekspresi bahagia. - Folder
sad/
: Berisi gambar-gambar dengan ekspresi sedih.
Persyaratan Dataset
- Gambar harus memiliki format yang kompatibel, seperti
.jpg
atau.png
. - Dataset dibagi menjadi dua bagian:
- Training set : Digunakan untuk melatih model.
- Validation set : Digunakan untuk mengevaluasi performa model selama pelatihan.
Contoh Struktur Folder Dataset
3. Arsitektur Model
Model yang digunakan dalam proyek ini adalah Convolutional Neural Network (CNN) . CNN sangat cocok untuk tugas klasifikasi gambar karena kemampuannya dalam mengekstraksi fitur visual dari gambar.
Komponen Utama Model
Conv2D Layer :
- Menangkap pola lokal seperti tepi, tekstur, dan bentuk.
- Parameter: Jumlah filter, ukuran kernel (misalnya, 3x3), fungsi aktivasi (biasanya ReLU).
MaxPooling2D Layer :
- Mengurangi dimensi fitur sambil mempertahankan informasi penting.
- Parameter: Ukuran pooling (misalnya, 2x2).
Flatten Layer :
- Mengubah representasi fitur 2D menjadi vektor 1D untuk input ke layer Dense.
Dense Layer :
- Layer fully connected yang melakukan klasifikasi akhir.
- Output layer memiliki 2 neuron (untuk kelas "Happy" dan "Sad") dengan fungsi aktivasi softmax.
Contoh Arsitektur CNN
4. Implementasi Kode
Berikut adalah penjelasan detail tentang kode dalam proyek ini.
1. Impor Library
Penjelasan:
tensorflow
: Digunakan untuk membangun dan melatih model pembelajaran mesin.cv2
(OpenCV) : Digunakan untuk pemrosesan gambar, seperti membaca dan memanipulasi file gambar.os
: Digunakan untuk berinteraksi dengan sistem operasi, seperti membaca direktori atau file.pandas
: Digunakan untuk manipulasi dan analisis data, terutama dalam format tabel.numpy
: Digunakan untuk komputasi numerik, seperti operasi matriks dan array.seaborn
danmatplotlib.pyplot
: Digunakan untuk visualisasi data.imghdr
: Digunakan untuk memeriksa tipe file gambar.%matplotlib inline
: Memastikan bahwa grafik ditampilkan langsung di notebook Jupyter.
2. Menghindari Kesalahan Memori GPU
Penjelasan:
tf.config.experimental.list_physical_devices('GPU')
: Mendeteksi perangkat GPU yang tersedia.tf.config.experimental.set_memory_growth(gpu, True)
: Mengatur agar TensorFlow hanya menggunakan memori GPU yang diperlukan, bukan semua memori yang tersedia. Ini membantu menghindari kesalahan "Out of Memory" (OOM).
3. Pengaturan Dataset
Penjelasan:
os.listdir('data')
: Menampilkan daftar folder atau file dalam direktoridata
. Dalam kasus ini, outputnya adalah['happy', 'sad']
, yang menunjukkan ada dua kategori: "happy" dan "sad".os.path.join('data', 'happy')
: Menggabungkan path direktori dengan nama subdirektori untuk membentuk path lengkap ke folder "happy".
4. Visualisasi Data
Penjelasan:
cv2.imread()
: Membaca file gambar dari path yang diberikan.cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
: Mengonversi warna gambar dari format BGR (default OpenCV) ke RGB (format yang digunakan oleh Matplotlib).plt.imshow()
: Menampilkan gambar menggunakan Matplotlib.
5. Pemrosesan Batch Data
Penjelasan:
test.as_numpy_iterator()
: Mengiterasi dataset dalam bentuk batch menggunakan TensorFlow.X, y = batch
: Memisahkan fitur (X
) dan label (y
) dari batch.model.predict(X)
: Menggunakan model untuk memprediksi output dari inputX
.pre.update_state(y, predictions)
: Memperbarui metrik presisi berdasarkan label sebenarnya (y
) dan prediksi.re.update_state(y, predictions)
: Memperbarui metrik recall.acc.update_state(y, predictions)
: Memperbarui metrik akurasi.
6. Standarisasi Data
Penjelasan:
data.map()
: Menerapkan fungsi lambda ke setiap elemen dalam dataset.lambda x, y: (x / 255, y)
: Normalisasi nilai piksel gambar (x
) ke rentang [0, 1] dengan membaginya oleh 255, sementara label (y
) tetap tidak berubah.
7. Evaluasi Model
Penjelasan:
pd.DataFrame(history.history)
: Mengonversi riwayat pelatihan model (seperti loss dan akurasi) menjadi DataFrame Pandas.losses.plot()
: Memvisualisasikan riwayat pelatihan dalam bentuk grafik.
8. Pengujian Model
Penjelasan:
cv2.imread('sadtest2.jpg')
: Membaca gambar uji dari file.plt.imshow()
: Menampilkan gambar uji.
9. Metrik Evaluasi
Penjelasan:
Precision()
: Menghitung presisi model.Recall()
: Menghitung recall model.BinaryAccuracy()
: Menghitung akurasi untuk klasifikasi biner.
10. Pelatihan Model
Penjelasan:
history.history['accuracy']
: Mengambil nilai akurasi pelatihan dari riwayat pelatihan.history.history['val_accuracy']
: Mengambil nilai akurasi validasi.plt.plot()
: Memplot grafik akurasi pelatihan dan validasi.plt.legend()
: Menambahkan legenda ke grafik.
Kesimpulan
Kode ini mencakup proses end-to-end untuk membangun dan mengevaluasi model pembelajaran mesin untuk klasifikasi gambar (kategori "happy" dan "sad"). Prosesnya meliputi:
- Pengaturan lingkungan (TensorFlow, GPU, dan library lainnya).
- Pemrosesan data (normalisasi, iterasi batch).
- Pelatihan model (menggunakan TensorFlow).
- Evaluasi model (presisi, recall, akurasi).
- Visualisasi hasil (grafik akurasi dan loss).
5. Hasil
Penjelasan Tabel:
Layer (type) : Jenis layer dalam model.
- InputLayer : Layer input awal dengan ukuran gambar 256x256x3 (3 saluran warna RGB).
- Conv2D : Layer konvolusi 2D dengan filter berukuran tertentu.
- MaxPooling2D : Layer pooling maksimum untuk mengurangi dimensi data.
- Flatten : Layer flatten untuk merubah output menjadi vektor 1D.
- Dense : Layer terhubung penuh (fully connected layer) untuk klasifikasi akhir.
Output Shape : Ukuran output setiap layer.
- Misalnya,
conv2d_4
memiliki output shape(None, 256, 256, 32)
yang menunjukkan bahwa hasil output layer ini adalah tensor dengan dimensi batch x tinggi x lebar x jumlah filter.
- Misalnya,
Param #: Jumlah Parameter : Jumlah parameter yang harus dilatih di setiap layer.
- Misalnya,
conv2d_4
memiliki 896 parameter. dense_2
memiliki 16,777,728 parameter, yang sangat besar karena ini adalah layer terakhir sebelum output akhir.
- Misalnya,
Total params : Total jumlah parameter dalam model adalah 17,019,073 , yang setara dengan 64.92 MB .
Model ini adalah model CNN (Convolutional Neural Network) yang dirancang untuk tugas klasifikasi biner. Model ini menggunakan kombinasi layer konvolusi, pooling, dan fully connected layers untuk memproses citra sebagai input dan memberikan prediksi klasifikasi. Model ini memiliki total parameter sebanyak 17 juta, yang menunjukkan kompleksitas model yang cukup tinggi. Optimizer yang digunakan adalah Adam, dan fungsi kerugian adalah binary cross-entropy, yang sesuai untuk masalah klasifikasi dua kelas.
Penjelasan:
Judul: Grafik ini menunjukkan perubahan empat metrik selama pelatihan model:
accuracy
(biru solid): Akurasi pada data latih.loss
(orange solid): Loss (error) pada data latih.val_accuracy
(hijau solid): Akurasi pada data validasi.val_loss
(merah solid): Loss pada data validasi.
Keterangan:
- X-Axis (Absis): Menunjukkan jumlah epoch (iterasi pelatihan).
- Y-Axis (Ordinat): Nilai akurasi dan loss.
Trend:
- Akurasi (
accuracy
): Naik secara umum seiring dengan bertambahnya epoch, tetapi ada beberapa fluktuasi kecil. - Loss (
loss
): Turun secara umum seiring dengan bertambahnya epoch, tetapi juga mengalami fluktuasi. - Val_Accuracy (
val_accuracy
): Secara keseluruhan naik, tetapi lebih stabil dibandingkan denganaccuracy
. Ada beberapa puncak yang menunjukkan peningkatan akurasi pada data validasi. - Val_Loss (
val_loss
): Turun secara umum, tetapi lebih stabil dibandingkan denganloss
. Ada beberapa puncak yang menunjukkan penurunan loss pada data validasi.
- Akurasi (
Interpretasi:
- Model tampaknya belajar dengan baik karena akurasi meningkat dan loss menurun. Namun, terdapat beberapa fluktuasi yang mungkin disebabkan oleh kompleksitas data atau variasi dalam setiap epoch.
- Perbedaan antara metrik pelatihan (
accuracy
,loss
) dan validasi (val_accuracy
,val_loss
) tidak terlalu besar, yang menunjukkan bahwa model cenderung tidak overfitting.
Penjelasan:
Judul: Grafik ini memfokuskan pada dua metrik utama:
loss
(biru solid): Loss pada data latih.val_loss
(orange solid): Loss pada data validasi.
Keterangan:
- X-Axis (Absis): Jumlah epoch.
- Y-Axis (Ordinat): Nilai loss.
Trend:
- Loss (
loss
): Turun secara signifikan saat awal pelatihan, kemudian mulai melambat dan mencapai titik stabil di sekitar nilai 0.05 hingga 0.1. - Val_Loss (
val_loss
): Juga turun pada awal pelatihan, tetapi lebih fluktuatif dibandingkan denganloss
. Setelah beberapa epoch,val_loss
cenderung stabil di sekitar nilai 0.1 hingga 0.2.
- Loss (
Interpretasi:
- Kedua kurva menunjukkan tren penurunan loss, yang menandakan bahwa model sedang belajar dengan baik.
- Fluktuasi pada
val_loss
adalah hal yang wajar karena data validasi biasanya lebih variabel daripada data latih. - Tidak ada tanda-tanda overfitting yang jelas karena
val_loss
tidak meningkat secara signifikan meskipunloss
terus menurun.
Penjelasan:
Judul: Grafik ini memfokuskan pada dua metrik akurasi:
accuracy
(biru solid): Akurasi pada data latih.val_accuracy
(orange solid): Akurasi pada data validasi.
Keterangan:
- X-Axis (Absis): Jumlah epoch.
- Y-Axis (Ordinat): Nilai akurasi.
Trend:
- Akurasi (
accuracy
): Naik secara signifikan pada awal pelatihan, lalu mencapai kisaran 0.9 hingga 1.0. Terdapat beberapa fluktuasi kecil sepanjang pelatihan. - Val_Accuracy (
val_accuracy
): Juga naik pada awal pelatihan, tetapi lebih stabil dibandingkan denganaccuracy
. Kurva ini mencapai kisaran 0.9 hingga 1.0 dan cenderung stabil.
- Akurasi (
Interpretasi:
- Kedua kurva menunjukkan peningkatan akurasi seiring dengan bertambahnya epoch, yang menandakan bahwa model semakin baik dalam memprediksi data.
- Meskipun ada beberapa fluktuasi,
val_accuracy
tetap berada di dekataccuracy
, yang menunjukkan bahwa model tidak overfitting. - Stabilitas
val_accuracy
menunjukkan bahwa model memiliki generalisasi yang baik terhadap data yang belum pernah dilihat sebelumnya.
Kesimpulan Umum:
- Grafik 1: Memberikan gambaran lengkap tentang perubahan akurasi dan loss baik pada data latih maupun validasi.
- Grafik 2: Fokus pada loss, menunjukkan bahwa model berhasil menurunkan error baik pada data latih maupun validasi tanpa tanda-tanda overfitting yang signifikan.
- Grafik 3: Fokus pada akurasi, menunjukkan bahwa model semakin akurat seiring dengan bertambahnya epoch, baik pada data latih maupun validasi.
Secara keseluruhan, grafik-grafik ini menunjukkan bahwa model sedang belajar dengan baik, dengan performa yang stabil dan tidak ada indikasi overfitting.
TESTING 1
Hasil
TESTING 2
6. Kesimpulan dan Peluang Pengembangan
Kesimpulan
Proyek HappySad-ImageClassifier berhasil memperkenalkan konsep dasar pembelajaran mesin untuk klasifikasi gambar. Dengan dataset yang terorganisir dan arsitektur CNN yang efektif, model dapat mencapai performa yang baik dalam membedakan antara gambar "Happy" dan "Sad".
Peluang Pengembangan
Ekspansi Dataset :
- Menambahkan lebih banyak gambar untuk meningkatkan generalisasi model.
- Mencakup lebih banyak kelas emosi (misalnya, "Angry", "Neutral").
Optimasi Model :
- Eksperimen dengan arsitektur model yang lebih kompleks (misalnya, ResNet, VGG).
- Menggunakan teknik transfer learning dengan model pre-trained.
Aplikasi Real-Time :
- Mengintegrasikan model ke dalam aplikasi web atau mobile untuk deteksi emosi real-time.
Analisis Sentimen :
- Menggabungkan model ini dengan analisis sentimen teks untuk aplikasi yang lebih holistik.
Penutup
Proyek HappySad-ImageClassifier adalah langkah awal yang sangat baik untuk memahami konsep dasar pembelajaran mesin dan deep learning. Dengan eksperimen lebih lanjut dan pengembangan fitur, proyek ini dapat berkembang menjadi solusi praktis yang bermanfaat dalam berbagai aplikasi dunia nyata.
No comments:
Post a Comment