Untuk membuat program yang dapat mengenali Sistem Isyarat Bahasa Indonesia (SIBI) menggunakan Convolutional Neural Neighborhood (CNN), kita memerlukan beberapa komponen penting seperti data gambar dari isyarat tangan, preprocessing data, model CNN, pelatihan model, dan evaluasi model. Berikut ini adalah penjelasan dan contoh provide code sederhana untuk implementasi tersebut.
- Pengumpulan Data dan Preprocessing:
– dataset gambar yang berisi isyarat tangan untuk setiap huruf atau kata dalam SIBI. Dataset ini bisa didapatkan dari web page kaggle. Entire dataset yg di gunakan ada 2600 gambar.
– Sebelum data gambar dapat digunakan untuk pelatihan model, kita perlu melakukan preprocessing seperti resize gambar, normalisasi nilai pixel, dan pembagian dataset menjadi teaching dan testing set.
2) Model CNN:
– CNN adalah jenis neural neighborhood yang sangat efektif untuk pengenalan gambar. Model ini terdiri dari beberapa lapisan konvolusi, pooling, dan completely linked.
3) Pelatihan dan Evaluasi:
– Model dilatih menggunakan data teaching dengan augmentasi gambar untuk meningkatkan generalisasi.
– Pada program ini data dibagi menjadi set pelatihan (80%) dan validasi (20%).
– Augmentasi data diterapkan (rescaling dan zoom) untuk meningkatkan variasi data pelatihan.
– Model dievaluasi menggunakan data testing untuk mengukur akurasi. Tingkat akurasi yg di gunakan pada program ini 60%
PENJELASAN SOURCE CODE SIBI
KODE 1
!pip arrange kaggle
Perintah !pip arrange kaggle adalah perintah yang digunakan untuk menginstal paket Python bernama kaggle menggunakan pip (bundle installer for Python). Kaggle adalah platform on-line yang menyediakan kompetisi data science, dataset, dan alat untuk analisis data. Dengan menginstal paket kaggle, pengguna dapat mengakses API Kaggle untuk mengunduh dataset, mengirimkan hasil kompetisi, dan melakukan berbagai operasi lain yang terkait dengan platform Kaggle langsung dari lingkungan pemrograman Python.
KODE 2
from google.colab import data
data.add ()
· from google.colab import data: Ini mengimpor modul data dari pustaka google.colab, yang berisi fungsi untuk mengelola file dalam lingkungan Google Colab.
· data.add(): Memanggil metode add dari modul data, yang membuka dialog unggahan file di browser. Pengguna dapat memilih file dari komputer lokal mereka untuk diunggah ke lingkungan Google Colab
KODE 3,4, dan 5
!mkdir ~/.kaggle
!cp kaggle.json ~/.kaggle
!chmod 600 ~/.kaggle/kaggle.json
from google.colab import drive
drive.mount(‘/content material materials/drive’)
!mkdir -p /content material materials/drive/MyDrive/sibi
%cd /content material materials/drive/MyDrive/sibi
· Perintah ini membuat direktori .kaggle di dalam direktori dwelling pengguna jika direktori tersebut belum ada.
· Perintah ini menyalin file kaggle.json (yang harus berada di direktori kerja saat ini) ke dalam direktori .kaggle.
· Perintah ini memastikan bahwa hanya pemilik file yang dapat membaca dan menulis file kaggle.json, yang meningkatkan keamanan kredensial API Anda
· Mengimpor modul drive dari pustaka google.colab, yang berisi fungsi untuk mengelola Google Drive di Colab.
· Memanggil metode mount dari modul drive dan menetapkan titik mount di /content material materials/drive. Ketika perintah ini dijalankan, Anda akan diminta untuk memberikan izin akses ke akun Google Drive Anda. Setelah memberikan izin, semua file dan folder di Google Drive Anda akan tersedia di bawah direktori /content material materials/drive.
· !mkdir -p /content material materials/drive/MyDrive/sibi Perintah ini akan membuat sebuah direktori baru bernama “sibi” di dalam jalur “/content material materials/drive/MyDrive/”. Flag -p memastikan bahwa semua direktori induk yang diperlukan akan dibuat jika belum ada. Ini berguna untuk membuat struktur folder yang lengkap dalam satu perintah
· %cd /content material materials/drive/MyDrive/sibi Perintah ini akan mengubah direktori kerja saat ini ke “/content material materials/drive/MyDrive/sibi”. Dengan kata lain, ini akan memindahkan “lokasi” kerja Anda ke dalam folder “sibi” yang baru saja dibuat.
KODE KE 6
!kaggle datasets receive -d mrifqiazkiyaj/sibidatasets
Perintah ini akan mencoba mengunduh dataset bernama “sibidatasets” yang dibuat oleh pengguna “mrifqiazkiyaj” dari Kaggle
KODE KE 7
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import cv2
import os
import tensorflow as tf
import seaborn as sns
· import numpy as np Ini mengimpor library NumPy dan memberikannya alias ‘np’. NumPy digunakan untuk komputasi numerik yang efisien dalam Python, terutama untuk operasi array dan matriks.
· import pandas as pd Mengimpor library Pandas dengan alias ‘pd’. Pandas sangat berguna untuk manipulasi dan analisis data, terutama untuk data terstruktur seperti tabel atau time sequence.
· import matplotlib.pyplot as plt Mengimpor modul pyplot dari Matplotlib dengan alias ‘plt’. Matplotlib adalah library untuk membuat visualisasi data dan grafik dalam Python.
· import cv2 Mengimpor library OpenCV. OpenCV (Open Provide Laptop Imaginative and prescient Library) digunakan untuk pemrosesan gambar dan tugas laptop computer imaginative and prescient.
· import os Mengimpor modul os, yang menyediakan fungsi-fungsi untuk berinteraksi dengan sistem operasi, seperti manipulasi path file dan direktori.
· import tensorflow as tf Mengimpor TensorFlow, sebuah library open-source untuk machine learning dan deep learning.
· import seaborn as sns Mengimpor Seaborn, sebuah library visualisasi data berbasis Matplotlib yang menyediakan antarmuka tingkat tinggi untuk membuat grafik statistik yang menarik.
KODE KE 8
from keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D
from keras.fashions import Sequential
from keras.preprocessing.image import ImageDataGenerator
from google.colab.patches import cv2_imshow
- import numpy as np Ini mengimpor library NumPy dan memberikannya alias ‘np’. NumPy digunakan untuk komputasi numerik yang efisien dalam Python, terutama untuk operasi array dan matriks.
- import pandas as pd Mengimpor library Pandas dengan alias ‘pd’. Pandas sangat berguna untuk manipulasi dan analisis data, terutama untuk data terstruktur seperti tabel atau time sequence.
- import matplotlib.pyplot as plt Mengimpor modul pyplot dari Matplotlib dengan alias ‘plt’. Matplotlib adalah library untuk membuat visualisasi data dan grafik dalam Python.
- import cv2 Mengimpor library OpenCV. OpenCV (Open Provide Laptop Imaginative and prescient Library) digunakan untuk pemrosesan gambar dan tugas laptop computer imaginative and prescient.
- import os Mengimpor modul os, yang menyediakan fungsi-fungsi untuk berinteraksi dengan sistem operasi, seperti manipulasi path file dan direktori.
- import tensorflow as tf Mengimpor TensorFlow, sebuah library open-source untuk machine learning dan deep learning.
- import seaborn as sns Mengimpor Seaborn, sebuah library visualisasi data berbasis Matplotlib yang menyediakan antarmuka tingkat tinggi untuk membuat grafik statistik yang menarik.
KODE KE 9
# Get and extract file Extract
source_path = ‘/content material materials/drive/MyDrive/sibi/sibidatasets.zip’
dataset_path = “/content material materials/datasets/”
from zipfile import ZipFile
zf = ZipFile(source_path)
zf.extractall(dataset_path)
zf.shut()
- source_path = ‘/content material materials/drive/MyDrive/sibi/sibidatasets.zip’ Ini mendefinisikan path ke file zip yang berisi dataset. File ini berada di Google Drive Anda, di folder ‘sibi’.
- dataset_path = “/content material materials/datasets/” Ini mendefinisikan path tujuan di mana isi file zip akan diekstrak.
- from zipfile import ZipFile Ini mengimpor kelas ZipFile dari modul zipfile, yang akan digunakan untuk membuka dan mengekstrak file zip.
- zf = ZipFile(source_path) Ini membuat objek ZipFile dari file zip yang ditentukan oleh source_path.
- zf.extractall(dataset_path) Ini mengekstrak semua isi file zip ke direktori yang ditentukan oleh dataset_path.
- zf.shut() Ini menutup file zip setelah selesai diekstrak.
Tujuan dari kode ini adalah untuk mengekstrak dataset yang telah Anda unduh sebelumnya (mungkin dari Kaggle) dari file zip ke lokasi yang dapat diakses oleh kode Anda.
KODE KE 10
from sklearn.preprocessing import MultiLabelBinarizer
labels = [“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”, “L”, “M”, “N”, “O”, “P”, “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”]
mlb = MultiLabelBinarizer()
mlb.match(labels)
mlb.classes_
Tujuan dari kode ini adalah untuk menyiapkan sistem encoding untuk label-label yang akan digunakan dalam proyek. Dalam konteks ini, bekerja dengan dataset yang melibatkan huruf-huruf alfabet, mungkin untuk pengenalan huruf atau kata dalam bahasa isyarat (mengingat nama dataset “sibidatasets” yang mungkin merujuk pada SIBI — Sistem Isyarat Bahasa Indonesia).
MultiLabelBinarizer berguna ketika Anda memiliki tugas klasifikasi multi-label, di mana satu sampel bisa termasuk dalam beberapa kelas sekaligus. Meskipun dalam kasus ini Anda hanya menggunakan huruf tunggal, penggunaan MultiLabelBinarizer memberi fleksibilitas untuk kasus di mana satu sampel mungkin terdiri dari beberapa huruf.
KODE KE 11
data_dir = ‘/content material materials/datasets/teaching’
target_size = (64,64)
programs = 26
batch_size = 32
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
train_datagen = ImageDataGenerator(rescale=1./255,
zoom_range=0.1,
horizontal_flip=False,
validation_split=0.2)
train_gen = train_datagen.flow_from_directory(data_dir, target_size=target_size,
shuffle=True,
batch_size= batch_size,
color_mode=’grayscale’,
class_mode=’categorical’,
subset=’teaching’)
val_gen = train_datagen.flow_from_directory(data_dir, target_size=target_size,
batch_size= batch_size,
color_mode=’grayscale’,
class_mode=’categorical’,
subset=’validation’)
1. Pengaturan awal:
- data_dir = ‘/content material materials/datasets/teaching’: Menentukan direktori data pelatihan.
- target_size = (64,64): Menentukan ukuran aim gambar (64×64 piksel).
- programs = 26: Jumlah kelas (mungkin merujuk pada 26 huruf alfabet).
- batch_size = 32: Ukuran batch untuk pelatihan.
2. from PIL import ImageFile dan ImageFile.LOAD_TRUNCATED_IMAGES = True: Ini memungkinkan loading gambar yang mungkin rusak atau tidak lengkap.
3. Membuat ImageDataGenerator:
train_datagen = ImageDataGenerator(rescale=1./255,
zoom_range=0.1,
horizontal_flip=False,
validation_split=0.2)
- rescale=1./255: Mengubah skala nilai piksel ke rentang 0–1.
- zoom_range=0.1: Menerapkan zoom acak hingga 10%.
- horizontal_flip=False: Tidak melakukan flip horizontal.
- validation_split=0.2: Menggunakan 20% data untuk validasi.
4. Membuat generator data pelatihan:
· train_gen = train_datagen.flow_from_directory(data_dir,
· target_size=target_size,
· shuffle=True,
· batch_size=batch_size,
· color_mode=’grayscale’,
· class_mode=’categorical’,
· subset=’teaching’)
Ini membuat generator untuk data pelatihan dengan pengaturan spesifik.
5. Membuat generator data validasi:
val_gen = train_datagen.flow_from_directory(data_dir,
target_size=target_size,
batch_size=batch_size,
color_mode=’grayscale’,
class_mode=’categorical’,
subset=’validation’)
Ini membuat generator untuk data validasi dengan pengaturan serupa.
Poin-poin penting:
- Data gambar diubah menjadi grayscale dan diubah ukurannya menjadi 64×64 piksel.
- Augmentasi data diterapkan (rescaling dan zoom) untuk meningkatkan variasi data pelatihan.
- Data dibagi menjadi set pelatihan (80%) dan validasi (20%).
- Label diatur sebagai ‘categorical’, cocok untuk klasifikasi multi-kelas.
KODE KE 12
epoch = 50
train_size = len(train_gen)
steps_per_epoch = 32
validation_steps = 9
· epoch = 50
Ini menentukan jumlah epoch untuk pelatihan model.
Sebuah epoch adalah satu kali proses melewatkan seluruh dataset melalui model (baik untuk forward cross maupun backward cross).
Menetapkan 50 epoch berarti model akan melihat seluruh dataset sebanyak 50 kali selama proses pelatihan.
· train_size = len(train_gen)
Ini menghitung jumlah batch dalam generator data pelatihan.
len(train_gen) akan memberikan jumlah batch yang akan dihasilkan oleh generator untuk satu epoch lengkap.
· steps_per_epoch = 32
Ini menentukan berapa banyak batch yang akan diproses dalam satu epoch.
Nilai 32 di sini mungkin dipilih berdasarkan pertimbangan tertentu atau mungkin hasil dari perhitungan sebelumnya.
Biasanya, steps_per_epoch seharusnya sama dengan train_size, tetapi bisa diatur lebih kecil jika Anda ingin epoch berakhir sebelum seluruh dataset diproses.
· validation_steps = 9
Ini menentukan berapa banyak batch dari generator validasi yang akan digunakan untuk evaluasi di akhir setiap epoch.
Nilai 9 mungkin dipilih berdasarkan ukuran dataset validasi atau pertimbangan lain.
KODE KE 13
x,y = train_gen.subsequent()
for i in fluctuate(0,3):
image = x[i]
label = y[i]
print(x[i].type)
print (label)
plt.imshow(image[:,:,0], cmap=’gray’)
plt.current()
· x, y = train_gen.subsequent()
Ini mengambil batch berikutnya dari generator data pelatihan.
x akan berisi batch gambar.
y akan berisi label yang sesuai untuk gambar-gambar tersebut.
· for i in fluctuate(0,3):
Ini memulai loop yang akan berjalan 3 kali, untuk menampilkan 3 gambar pertama dari batch.
· Di dalam loop:
image = x[i]: Mengambil gambar ke-i dari batch.
label = y[i]: Mengambil label ke-i yang sesuai.
· print(x[i].type)
Ini akan mencetak bentuk (type) dari gambar ke-i.
Bentuknya kemungkinan akan berupa (64, 64, 1) karena Anda menggunakan mode grayscale dan ukuran aim 64×64.
· print(label)
Ini akan mencetak label untuk gambar ke-i.
Label akan dalam format one-hot encoding karena Anda menggunakan class_mode=’categorical’.
· plt.imshow(image[:,:,0], cmap=’gray’)
Ini menampilkan gambar menggunakan matplotlib.
image[:,:,0] mengambil channel pertama (dan satu-satunya) dari gambar grayscale.
cmap=’gray’ menentukan bahwa gambar harus ditampilkan dalam skala abu-abu.
· plt.current()
Ini menampilkan plot yang telah dibuat.
KODE KE 14
def CNN():
#inisiasi CNN
model = Sequential()
#Convolution dan Max Pooling
model.add(Conv2D(32, (3, 3), input_shape=(64,64,1), activation=’relu’))
model.add(MaxPooling2D(pool_size=(2, 2))) # 2×2 is ideal
model.add(Dropout(0.5))
model.add(Conv2D(64, (3, 3), activation=’relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (3, 3), activation=’relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(256, (3, 3), activation=’relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
#Flattening
model.add(Flatten())
#Dense atau Full Connection
model.add(Dropout(0.5))
model.add(Dense(512, activation=’relu’))
model.add(Dropout(0.5))
model.add(Dense(fashions = 26, activation = ‘softmax’))
return model
Menjelaskan fungsi CNN() ini dalam bahasa Indonesia. Fungsi ini mendefinisikan arsitektur Convolutional Neural Neighborhood (CNN) untuk tugas klasifikasi gambar:
- model = Sequential(): Inisialisasi model Sequential dari Keras.
- Layer-layer konvolusi dan pooling:
- Layer 1: Conv2D(32, (3, 3), input_shape=(64,64,1), activation=’relu’): 32 filter konvolusi 3×3, enter 64×64 piksel grayscale. MaxPooling2D(pool_size=(2, 2)): Pooling 2×2 untuk mengurangi dimensi.
- Dropout(0.5): Dropout 50% untuk mengurangi overfitting.
- Layer 2: Conv2D(64, (3, 3), activation=’relu’): 64 filter konvolusi 3×3. MaxPooling2D(pool_size=(2, 2))
- Layer 3: Conv2D(128, (3, 3), activation=’relu’): 128 filter konvolusi 3×3. MaxPooling2D(pool_size=(2, 2))
- Dropout(0.5)
- Layer 4: Conv2D(256, (3, 3), activation=’relu’): 256 filter konvolusi 3×3. MaxPooling2D(pool_size=(2, 2))
- Flatten(): Mengubah output konvolusi menjadi vektor 1D.
- Completely linked layers:
- Dropout(0.5)
- Dense(512, activation=’relu’): Layer completely linked dengan 512 neuron.
- Dropout(0.5)
- Dense(fashions = 26, activation = ‘softmax’): Layer output dengan 26 neuron (satu untuk setiap huruf alfabet), menggunakan aktivasi softmax untuk klasifikasi multi-kelas.
Beberapa poin penting:
- Arsitektur ini cukup dalam dengan 4 layer konvolusi, yang baik untuk menangkap fitur kompleks.
- Penggunaan Dropout yang intensif (50% setelah beberapa layer) menunjukkan upaya kuat untuk mencegah overfitting.
- Layer terakhir memiliki 26 unit, sesuai dengan jumlah kelas (huruf A-Z).
- Aktivasi ReLU digunakan di semua layer kecuali output, yang menggunakan softmax untuk klasifikasi multi-kelas.
Model ini tampaknya dirancang untuk tugas klasifikasi huruf bahasa isyarat, dengan mempertimbangkan kompleksitas tugas dan kebutuhan untuk generalisasi yang baik.
KODE KE 15
SibiKlasifikasi = CNN()
SibiKlasifikasi = CNN()
Kode ini melakukan hal berikut:
- Memanggil fungsi CNN() yang telah Anda definisikan sebelumnya.
- Fungsi CNN() mengembalikan model neural neighborhood yang telah dikonfigurasi.
- Model yang dikembalikan kemudian disimpan dalam variabel bernama SibiKlasifikasi.
Implikasi dan penjelasan lebih lanjut:
- SibiKlasifikasi sekarang adalah sebuah objek model Keras yang berisi arsitektur CNN yang telah Anda definisikan.
- Model ini siap untuk digunakan, tetapi belum dilatih. Ini seperti kerangka kosong yang sudah memiliki struktur tetapi belum memiliki pengetahuan.
- Nama SibiKlasifikasi menunjukkan bahwa model ini dimaksudkan untuk klasifikasi SIBI (Sistem Isyarat Bahasa Indonesia).
Langkah-langkah selanjutnya yang biasanya dilakukan setelah ini adalah:
- Mengompilasi model dengan menentukan optimizer, loss function, dan metrik.
- Melatih model menggunakan data teaching yang telah Anda siapkan.
- Mengevaluasi model menggunakan data validasi atau testing.
- Menggunakan model untuk membuat prediksi pada data baru.
KODE KE 16
SibiKlasifikasi.compile(optimizer=’adam’, loss=’categorical_crossentropy’, metrics=[‘accuracy’])
SibiKlasifikasi.summary()
- SibiKlasifikasi.compile(optimizer=’adam’, loss=’categorical_crossentropy’, metrics=[‘accuracy’]) Baris ini mengompilasi model SibiKlasifikasi dengan konfigurasi berikut:
- Optimizer: ‘adam’ — Adam adalah optimizer yang adaptif dan efisien, populer untuk deep learning.
- Loss function: ‘categorical_crossentropy’ — Ini adalah fungsi loss yang cocok untuk klasifikasi multi-kelas dengan output one-hot encoded.
- Metrics: [‘accuracy’] — Akurasi akan digunakan sebagai metrik untuk mengevaluasi performa model selama pelatihan dan validasi.
- SibiKlasifikasi.summary() Baris ini akan mencetak ringkasan arsitektur model, termasuk:
- Urutan layer-layer dalam model
- Output type dari setiap layer
- Jumlah parameter (bobot) yang dapat dilatih di setiap layer
- Entire jumlah parameter dalam model
Output dari summary() akan terlihat seperti tabel yang menunjukkan setiap layer, bentuk outputnya, dan jumlah parameternya. Ini sangat berguna untuk:
- Memverifikasi bahwa arsitektur model sesuai dengan yang diinginkan
- Memeriksa jumlah full parameter untuk memastikan model tidak terlalu besar atau terlalu kecil untuk tugas yang diberikan
- Memahami bentuk output di setiap tahap model
KODE KE 17
!pip arrange keras
!pip arrange pydot
!pip arrange graphviz
from tensorflow.keras.utils import plot_model # Import plot_model from tensorflow.keras.utils
plot_model(SibiKlasifikasi, to_file=’model_plot.png’, show_shapes=True, show_layer_names=True)
Tujuan dari kode ini adalah:
- Memastikan semua dependensi yang diperlukan terinstal.
- Membuat visualisasi grafis dari arsitektur model CNN Anda.
Hasil dari kode ini akan berupa file gambar ‘model_plot.png’ yang menunjukkan struktur model Anda secara seen. Gambar ini akan menampilkan:
- Setiap layer dalam model
- Koneksi antar layer
- Bentuk output dari setiap layer
- Nama setiap layer
Visualisasi ini sangat berguna untuk:
- Memahami aliran data melalui model
- Memverifikasi arsitektur model
- Mempresentasikan struktur model kepada orang lain
Perlu diingat bahwa untuk menjalankan kode ini dengan sukses, Anda mungkin perlu memiliki Graphviz terinstal di sistem Anda. Jika Anda menggunakan Google Colab, ini biasanya sudah terinstal.
KODE KE 18
historic previous = SibiKlasifikasi.match(train_gen,
steps_per_epoch = steps_per_epoch,
epochs = epoch,
validation_data = val_gen,
validation_steps = validation_steps)
Kode ini melatih model SibiKlasifikasi yang telah Anda buat sebelumnya. Mari kita bahas setiap bagiannya:
- historic previous = SibiKlasifikasi.match(…)
- Metode match() digunakan untuk melatih model.
- Hasil pelatihan disimpan dalam variabel historic previous, yang akan berisi informasi tentang proses pelatihan.
- Parameter yang digunakan dalam metode match(): a. train_gen
- Ini adalah generator data pelatihan yang Anda buat sebelumnya menggunakan ImageDataGenerator.
- Generator ini akan menyediakan batch gambar dan label yang sesuai untuk pelatihan.
b. steps_per_epoch = steps_per_epoch
- Menentukan berapa banyak batch yang akan diproses dalam satu epoch.
- Nilai ini seharusnya sudah Anda tetapkan sebelumnya.
c. epochs = epoch
- Jumlah epoch (iterasi penuh melalui seluruh data pelatihan) yang akan dilakukan.
- Nilai epoch seharusnya sudah Anda tetapkan sebelumnya, misalnya 50.
d. validation_data = val_gen
- Generator untuk data validasi.
- Digunakan untuk mengevaluasi model setelah setiap epoch.
e. validation_steps = validation_steps
- Menentukan berapa banyak batch dari generator validasi yang akan digunakan untuk evaluasi di akhir setiap epoch.
- Nilai ini seharusnya sudah Anda tetapkan sebelumnya.
Setelah kode ini dijalankan:
- Model akan mulai proses pelatihan.
- Untuk setiap epoch, model akan melalui data pelatihan dan kemudian melakukan validasi.
- Progres pelatihan akan ditampilkan, biasanya menunjukkan metrik seperti loss dan akurasi untuk data pelatihan dan validasi.
- Setelah selesai, historic previous akan berisi informasi tentang performa model selama pelatihan, yang dapat digunakan untuk membuat plot atau analisis lebih lanjut.
Proses ini mungkin memakan waktu cukup lama, tergantung pada ukuran dataset, kompleksitas model, dan kemampuan komputasi yang tersedia.
KODE KE 19
SibiKlasifikasi.save(‘my_model.keras’) # Save the educated model SibiKlasifikasi
SibiKlasifikasi.save(‘my_model.keras’)
Kode ini berfungsi untuk menyimpan model yang telah dilatih ke dalam file. Mari kita bahas lebih component:
- SibiKlasifikasi: Ini adalah objek model yang telah Anda latih sebelumnya.
- .save(): Ini adalah metode yang digunakan untuk menyimpan model Keras.
- ‘my_model.keras’: Ini adalah nama file yang akan digunakan untuk menyimpan model. File akan disimpan dengan ekstensi .keras.
Tujuan dan implikasi dari kode ini:
- Menyimpan Model:
- Seluruh arsitektur model, termasuk konfigurasi layer dan bobot yang telah dilatih, akan disimpan.
- Portabilitas:
- Model yang disimpan dapat dimuat kembali nanti atau di mesin lain tanpa perlu melatih ulang.
- Backup:
- Ini berfungsi sebagai backup dari model Anda, melindungi hasil pelatihan dari kehilangan data.
- Deployment:
- Model yang disimpan dapat digunakan untuk deployment di aplikasi atau sistem lain.
- Format File:
- Format .keras adalah format baru yang diperkenalkan dalam TensorFlow 2.x untuk menyimpan model Keras.
Setelah menjalankan kode ini, Anda akan menemukan file baru bernama my_model.keras di direktori kerja Anda. File ini berisi seluruh informasi yang diperlukan untuk merekonstruksi model Anda
KODE KE 20
import pytz
import shutil
import os # Import os module to work with file paths
model_path = ‘/content material materials/drive/MyDrive/sibi’
# Verify if the file exists sooner than copying
if os.path.exists(“my_model.keras”):
shutil.copy(“my_model.keras”, os.path.be part of(model_path, “e50.h5”))
print(“File copied effectively.”)
else:
print(“File ‘my_model.keras’ not found.”)
- Import modul yang diperlukan:
python
Copy
import pytz
import shutil
import os
- pytz untuk bekerja dengan zona waktu (meskipun tidak digunakan dalam kode ini).
- shutil untuk operasi file tingkat tinggi seperti penyalinan file.
- os untuk bekerja dengan path file dan direktori.
- Menentukan path tujuan:
python
Copy
model_path = ‘/content material materials/drive/MyDrive/sibi’
- Ini menentukan direktori tujuan di mana model akan disalin.
- Memeriksa keberadaan file dan menyalinnya:
python
Copy
if os.path.exists(“my_model.keras”):
shutil.copy(“my_model.keras”, os.path.be part of(model_path, “e50.h5”))
print(“File copied effectively.”)
else:
print(“File ‘my_model.keras’ not found.”)
- os.path.exists(“my_model.keras”) memeriksa apakah file “my_model.keras” ada di direktori saat ini.
- Jika file ada:
- shutil.copy() digunakan untuk menyalin file.
- File sumber adalah “my_model.keras”.
- File tujuan adalah “e50.h5” di dalam direktori yang ditentukan oleh model_path.
- os.path.be part of() digunakan untuk menggabungkan path secara aman.
- Jika file tidak ditemukan, pesan error dicetak.
Beberapa poin penting:
- Kode ini mengubah nama file dari “my_model.keras” menjadi “e50.h5” saat menyalinnya.
- “.h5” adalah format file yang umum digunakan untuk menyimpan model Keras/TensorFlow.
- Penamaan “e50” mungkin mengindikasikan bahwa model ini dilatih untuk 50 epoch.
- Kode ini mengasumsikan bahwa Anda memiliki akses write ke direktori Google Drive yang ditentukan.
Tujuan utama dari kode ini adalah untuk memindahkan model yang telah disimpan ke lokasi yang lebih permanen di Google Drive Anda, sambil mengubah namanya. Ini berguna untuk organisasi dan manajemen model, terutama jika Anda bekerja di lingkungan seperti Google Colab di mana file lokal mungkin tidak persisten
KODE KE 21
acc = historic previous.historic previous[‘accuracy’]
val_acc = historic previous.historic previous[‘val_accuracy’]
loss = historic previous.historic previous[‘loss’]
val_loss = historic previous.historic previous[‘val_loss’]
epochs = fluctuate(len(acc))
plt.plot(epochs, acc, ‘r’, label=’Teaching accuracy’)
plt.plot(epochs, val_acc, ‘b’, label=’Validation accuracy’)
plt.title(‘Teaching and validation accuracy’)
plt.xlabel(‘Epoch’)
plt.ylabel(‘Accuracy’)
plt.legend()
plt.decide()
plt.plot(epochs, loss, ‘r’, label=’Teaching Loss’)
plt.plot(epochs, val_loss, ‘b’, label=’Validation Loss’)
plt.title(‘Teaching and validation loss’)
plt.xlabel(‘Epoch’)
plt.ylabel(‘Loss’)
plt.legend()
plt.current()
· acc = historic previous.historic previous[‘accuracy’] Mengambil data akurasi pelatihan dari objek historic previous dan menyimpannya ke variabel acc.
· val_acc = historic previous.historic previous[‘val_accuracy’] Mengambil data akurasi validasi dan menyimpannya ke val_acc.
· loss = historic previous.historic previous[‘loss’] Mengambil data loss pelatihan dan menyimpannya ke loss.
· val_loss = historic previous.historic previous[‘val_loss’] Mengambil data loss validasi dan menyimpannya ke val_loss.
· epochs = fluctuate(len(acc)) Membuat guidelines berisi angka dari 0 hingga jumlah epoch pelatihan.
· plt.plot(epochs, acc, ‘r’, label=’Teaching accuracy’) Membuat plot garis merah untuk akurasi pelatihan.
· plt.plot(epochs, val_acc, ‘b’, label=’Validation accuracy’) Membuat plot garis biru untuk akurasi validasi.
· plt.title(‘Teaching and validation accuracy’) Menambahkan judul pada grafik.
· plt.xlabel(‘Epoch’) dan plt.ylabel(‘Accuracy’) Menambahkan label pada sumbu x dan y.
· plt.legend() Menampilkan legenda grafik.
· plt.decide() Membuat decide baru untuk grafik kedua.
· plt.plot(epochs, loss, ‘r’, label=’Teaching Loss’) Membuat plot garis merah untuk loss pelatihan.
· plt.plot(epochs, val_loss, ‘b’, label=’Validation Loss’) Membuat plot garis biru untuk loss validasi.
· plt.title(‘Teaching and validation loss’) Menambahkan judul pada grafik kedua.
· plt.xlabel(‘Epoch’) dan plt.ylabel(‘Loss’) Menambahkan label pada sumbu x dan y grafik kedua.
· plt.current() Menampilkan kedua grafik yang telah dibua
KODE KE 22
dataset_path = “/content material materials/datasets/”
Variabel:
- Kode ini mendefinisikan sebuah variabel bernama dataset_path.
Nilai:
- Variabel ini diberi nilai string “/content material materials/datasets/”.
Tujuan:
- Variabel ini biasanya digunakan untuk menyimpan path (jalur) ke lokasi di mana dataset disimpan.
Konteks:
- “/content material materials/” biasanya merujuk pada direktori root di Google Colab.
- Ini menunjukkan bahwa kode mungkin dijalankan di lingkungan Google Colab.
Penggunaan:
- Variabel ini kemungkinan akan digunakan nanti dalam kode untuk mengakses file-file dataset.
- Misalnya, jika ada file gambar bernama “image1.jpg” di folder datasets, bisa diakses dengan dataset_path + “image1.jpg”.
KODE KE 23
def getLabel(label, model_label):
for i, x in enumerate(model_label):
if x >= 0.6:
return label[i]
else :
return (“Gambar bukan abjad SIBI”)
- Tujuan: Fungsi ini tampaknya digunakan untuk menginterpretasikan output dari model klasifikasi, mungkin untuk pengenalan huruf SIBI (Sistem Isyarat Bahasa Indonesia).
- Parameter:
- label: Kemungkinan sebuah guidelines yang berisi label-label kelas (misalnya huruf-huruf SIBI).
- model_label: Kemungkinan output dari model, berupa guidelines probabilitas untuk setiap kelas.
- Threshold: Fungsi menggunakan threshold 0.6 (60%) untuk menentukan apakah prediksi cukup yakin.
- Perilaku:
- Jika ada probabilitas >= 60%, fungsi mengembalikan label yang sesuai.
- Jika tidak ada probabilitas yang mencapai 60%, fungsi menganggap enter bukan huruf SIBI yang official.
- Batasan: Fungsi ini hanya mengembalikan label pertama yang memenuhi threshold. Jika ada quite a lot of probabilitas di atas 60%, hanya yang pertama yang akan dipertimbangkan.
- Penggunaan: Fungsi ini mungkin digunakan setelah model membuat prediksi, untuk menginterpretasikan hasil prediksi tersebut ke dalam label yang bermakna.
Fungsi ini memberikan cara sederhana untuk menginterpretasikan output model klasifikasi, dengan mempertimbangkan tingkat keyakinan prediksi.
KODE KE 24
import shutil
model_path = ‘/content material materials/drive/MyDrive/sibi’
shutil.copy(os.path.be part of(model_path, “my_model.keras”), “model_sign_e60.keras”)
Tujuan kode ini:
- Mengakses model yang disimpan di Google Drive.
- Menyalin model tersebut ke lingkungan Colab saat ini dengan nama baru.
Hal ini berguna ketika Anda ingin menggunakan model yang telah disimpan sebelumnya di Google Drive tanpa mengubah file asli.
KODE KE 25
SibiKlasifikasi = CNN()
SibiKlasifikasi.load_weights(“model_sign_e60.keras”)
· Tujuan: Kode ini bertujuan untuk memuat model CNN yang telah dilatih sebelumnya untuk klasifikasi SIBI (Sistem Isyarat Bahasa Indonesia).
· Proses:
- Pertama, struktur model didefinisikan ulang dengan memanggil CNN().
- Kemudian, bobot-bobot yang telah dilatih sebelumnya dimuat ke dalam struktur model ini.
· Mengapa dilakukan seperti ini:
- Mendefinisikan struktur model terlebih dahulu memastikan bahwa struktur model cocok dengan bobot yang akan dimuat.
- Memuat bobot yang telah dilatih memungkinkan model untuk langsung melakukan prediksi tanpa perlu dilatih ulang.
· Keuntungan:
- Menghemat waktu karena tidak perlu melatih model dari awal.
- Memungkinkan penggunaan model yang telah dioptimalkan dan divalidasi sebelumnya.
KODE KE 26
SibiKlasifikasi.compile(optimizer=’adam’, loss=’categorical_crossentropy’, metrics=[‘accuracy’])
SibiKlasifikasi.summary()
· Kompilasi Model:
- Meskipun kita telah memuat bobot yang sudah dilatih, kompilasi tetap penting jika kita ingin melakukan evaluasi atau fine-tuning pada model.
- Kompilasi mendefinisikan cara model akan dioptimasikan jika kita memutuskan untuk melatih ulang atau menyesuaikan model.
· Ringkasan Model:
- Mencetak ringkasan model sangat berguna untuk: a. Memverifikasi bahwa struktur model sesuai dengan yang diharapkan. b. Melihat jumlah full parameter dalam model. c. Memahami bagaimana data mengalir melalui berbagai layer dalam model.
· Penggunaan:
- Kompilasi diperlukan sebelum kita dapat menggunakan metode seperti contemplate() atau match() pada model.
- Ringkasan model membantu dalam debugging dan memahami arsitektur model.
KODE KE 27
!rm -rf datasets/testingv3/.ipynb_checkpoints
Menghapus folder .ipynb_checkpoints dan semua isinya dari direktori datasets/testingv3/.
Konteks dan penjelasan lebih lanjut:
- .ipynb_checkpoints adalah folder yang dibuat oleh Jupyter untuk menyimpan versi cadangan dari pocket e book.
- Folder ini sering dihapus karena:
- Bisa mengambil ruang penyimpanan yang tidak perlu.
- Bisa menyebabkan kebingungan saat mengelola file dataset.
- Umumnya tidak diperlukan untuk disimpan atau diversion-contr
KODE KE 28
dataset_path = “/content material materials/datasets/testingv3”
dir_list = os.listdir(dataset_path)
print(“Data and directories in ‘“, dataset_path, “‘ :”)
print(dir_list)
Tujuan dan konteks kode ini:
- Memeriksa isi dari direktori dataset pengujian.
- Memverifikasi bahwa file-file yang diharapkan ada di sana.
- Memberikan informasi tentang struktur dataset kepada pengguna atau pengembang.
Hasil yang diharapkan:
- Kode ini akan mencetak daftar semua file dan subdirektori yang ada di dalam folder “/content material materials/datasets/testingv3”.
- Ini bisa termasuk file gambar, subdirektori, atau file lain yang relevan dengan dataset pengujian.
Penggunaan dalam konteks ML:
- Verifikasi Data: Memastikan bahwa semua file yang diperlukan untuk pengujian ada di tempatnya.
- Eksplorasi Dataset: Memahami struktur dan konten dataset sebelum memulai proses pengujian.
- Debugging: Jika ada masalah dengan loading data, ini bisa membantu mengidentifikasi apakah masalahnya ada pada path atau ketersediaan file.
KODE KE 29
data_test = os.listdir(dataset_path)
hasil = []
for x in data_test:
img = cv2.imread(dataset_path + “/” +x)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
resize = cv2.resize(img, dsize=(64, 64))
img = np.expand_dims(resize, axis=0)
predict = SibiKlasifikasi.predict(img)
label = (x, getLabel(mlb.classes_, predict[0]))
hasil.append(label)
hasil
Penjelasan :
- Tujuan: Kode ini melakukan prediksi untuk setiap gambar dalam dataset pengujian dan menyimpan hasilnya.
- Proses:
- Membaca setiap gambar.
- Pra-pemrosesan gambar (konversi ke grayscale, resize).
- Melakukan prediksi menggunakan model.
- Menginterpretasikan hasil prediksi.
- Menyimpan hasil dalam format (nama_file, prediksi).
- Model SibiKlasifikasi telah dimuat dan dikompilasi sebelumnya.
- Fungsi getLabel() telah didefinisikan untuk menginterpretasikan output model.
- mlb.classes_ mungkin adalah guidelines kelas yang digunakan oleh model (mungkin huruf-huruf SIBI).
- Hasil:
- hasil akan berisi guidelines tuple, di mana setiap tuple memiliki format (nama_file, prediksi_kelas).
- Penggunaan:
- Kode ini berguna untuk melakukan batch testing pada dataset dan mengumpulkan hasil prediksi untuk analisis lebih lanjut.
KODE KE 30
hasil.type()
hitung = 0
y_pred = []
true_labels = []
for x in hasil:
keys = x[0]
huruf = keys.lower up(‘ ‘)
y_pred.append(x[1])
true_labels.append(huruf[0])
if huruf[0] == x[1]:
hitung += 1
print(‘True’, keys)
else:
print(‘False’)
print()
print(“Jumlah Prediksi Examine benar adalah {}”.format(hitung))
Penjelasan lebih lanjut:
- Tujuan: Kode ini mengevaluasi akurasi prediksi model dengan membandingkan hasil prediksi dengan label sebenarnya yang diasumsikan ada dalam nama file.
- Asumsi:
- Nama file mengandung label sebenarnya sebagai huruf pertama sebelum spasi.
- Format tuple dalam hasil adalah (nama_file, prediksi).
- Mengurutkan hasil untuk konsistensi.
- Mengekstrak prediksi dan label sebenarnya.
- Membandingkan prediksi dengan label sebenarnya.
- Menghitung dan mencetak jumlah prediksi yang benar.
- Output:
- Untuk setiap file, akan dicetak ‘True’ atau ‘False’ tergantung pada kebenaran prediksi.
- Di akhir, jumlah full prediksi yang benar akan dicetak.
- Catatan:
- Ada indentasi yang tidak tepat dalam kode asli. Blok if seharusnya berada di dalam loop for.
- Variabel keys digunakan dalam print assertion di luar blok if, yang mungkin menyebabkan error.
Perbaikan yang disarankan:
hasil.type()
hitung = 0
y_pred = []
true_labels = []
for x in hasil:
keys = x[0]
huruf = keys.lower up(‘ ‘)
y_pred.append(x[1])
true_labels.append(huruf[0])
if huruf[0] == x[1]:
hitung += 1
print(‘True’, keys)
else:
print(‘False’, keys)
print()
print(“Jumlah Prediksi Examine benar adalah {}”.format(hitung))
Kode ini memberikan evaluasi dasar dari performa model pada dataset pengujian, menghitung jumlah prediksi yang benar dan memberikan gambaran cepat tentang akurasi model.
KODE KE 31
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, classification_report
#Testing Report
print(‘Classification Report’)
print(classification_report(true_labels, y_pred))
cm = confusion_matrix(true_labels, y_pred)
Penjelasan lebih lanjut:
- Classification Report:
- Precision: Proporsi prediksi positif yang benar.
- Recall: Proporsi kasus positif aktual yang diidentifikasi dengan benar.
- F1-score: Rata-rata harmonik dari precision dan recall.
- Assist: Jumlah sampel untuk setiap kelas.
- Confusion Matrix:
- Matrix yang menunjukkan jumlah prediksi benar dan salah untuk setiap kelas.
- Baris menunjukkan label sebenarnya, kolom menunjukkan prediksi.
Kegunaan:
- Evaluasi Model: Memberikan gambaran menyeluruh tentang performa model pada berbagai metrik.
- Analisis Per-Kelas: Memungkinkan identifikasi kelas-kelas yang model performanya baik atau buruk.
- Identifikasi Kesalahan: Confusion matrix membantu memahami jenis kesalahan yang dibuat model.
KODE KE 32
plt.rc(‘font’, measurement=40)
fig, ax = plt.subplots(figsize=(40,40))
disp = ConfusionMatrixDisplay(cm, display_labels=mlb.classes_)
disp = disp.plot(ax=ax)
plt.current()
Penjelasan lebih lanjut:
- Ukuran dan Font:
- Pengaturan ukuran font dan decide yang besar (40) bertujuan untuk membuat plot mudah dibaca, terutama jika ada banyak kelas.
- Confusion Matrix Present:
- Visualisasi ini menunjukkan jumlah prediksi untuk setiap kombinasi label sebenarnya dan prediksi.
- Diagonal utama menunjukkan prediksi yang benar.
- Off-diagonal menunjukkan kesalahan klasifikasi.
- Kegunaan:
1. Visualisasi Performa: Memungkinkan Anda melihat secara cepat di mana model bekerja dengan baik dan di mana terjadi kesalahan.
2. Identifikasi Pola Kesalahan: Membantu mengidentifikasi jika ada kelas-kelas tertentu yang sering salah diklasifikasikan satu sama lain.
3. Evaluasi Model: Memberikan gambaran seen tentang akurasi model secara keseluruhan dan per-kelas.
- Interpretasi:
- Kotak-kotak gelap di diagonal menunjukkan klasifikasi yang akurat.
- Kotak-kotak terang di luar diagonal menunjukkan kesalahan klasifikasi.
- Semakin gelap warnanya, semakin banyak sampel dalam kategori tersebut.
- Catatan:
- mlb.classes_ diasumsikan berisi label-label kelas yang digunakan dalam model. Pastikan ini sesuai dengan urutan kelas dalam confusion matrix.
- Ukuran plot yang sangat besar (40×40 inci) mungkin sulit ditampilkan di beberapa layar. Anda mungkin perlu menyesuaikan ukuran tergantung pada jumlah kelas dan preferensi tampilan.
Visualisasi ini sangat berharga untuk memahami performa model secara mendalam, terutama dalam kasus klasifikasi multi-kelas seperti pengenalan huruf SIBI. Ini memungkinkan Anda untuk dengan cepat mengidentifikasi kekuatan dan kelemahan model Anda.