Klasifikasi Produk Rumah Tangga dengan CNN | by Mohamad Akbar Avisena Tuasikal | May, 2024


Gambar yang akan digunakan kali ini adalah gambar-gambar dari gayung, kasur, meja, dan koper. untuk masing-masing bagian terdiri dari 300+ gambar yang berbeda diambil dari google.

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import Adam
from tensorflow.keras import layers, callbacks

# Arsitektur model CNN
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(64, activation='relu'),
Dropout(0.5),
Dense(4, activation='softmax') # bagi jadi 4 kategori
])

# Kompilasi model
model.compile(optimizer=Adam(),
loss='categorical_crossentropy',
metrics=['accuracy'])

#early stopping
from tensorflow.keras import layers, callbacks

early_stopping = callbacks.EarlyStopping(
min_delta=0.001, # minimium amount of change to count as an improvement
patience=20, # how many epochs to wait before stopping
restore_best_weights=True,
)

Model yang akan digunakan di atas berisi 2 layer convolution + 2 layer pooling dengan dropout sebesar 0,5. Hal ini dilakukan untuk mengurangi kemungkinan terjadinya overfitting karena kompleksitas dari model. Pada model compile digunakan adam sebagai optimizer karena umumnya lebih baik daripada algoritma pengoptimalan lainnya, memiliki waktu komputasi lebih cepat, dan memerlukan lebih sedikit parameter untuk penyetelan. Kemudian buat data augmentasinya seperti berikut.

# Augmentasi data
train_data = ImageDataGenerator(rescale= 1/255,
horizontal_flip = True,
rotation_range=15,
shear_range=0.2,
zoom_range=0.2,
fill_mode='nearest',
validation_split=0.3)

# Memuat data pelatihan dan validasi
train_generator = train_data.flow_from_directory(
"/content/drive/MyDrive/Imagess",
target_size=(100, 100),
batch_size=32,
class_mode='categorical',
subset='training')

validation_generator = train_data.flow_from_directory(
"/content/drive/MyDrive/Imagess",
target_size=(100, 100),
batch_size=32,
class_mode='categorical',
subset='validation')

# Memanggil nama kelas dari generator data
class_names = list(train_generator.class_indices.keys())
print("Nama kelas:", class_names)

Pada augmentasi data, data yang berisi sekitar 1558 data diubah menjadi 2 bagian yaitu data train dan data validation dengan rasio data train/data validation sebesar 70% dan 30%. Selanjutnya digunakan beberapa argumen seperti:

  1. Horizontal flip untuk membalikkan gambar secara horizontal
  2. Rotation range untuk memutar gambar sebesar x derajat
  3. shear range untuk membuat bentuk gambar menjadi miring seperti pandangan perspektif manusia
  4. zoom range untuk membesarkan atau mengecilkan gambar
  5. fill mode nearest, ini adalah opsi default di mana nilai piksel terdekat dipilih dan diulangi untuk semua nilai kosong.
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
# Memanggil beberapa contoh data pelatihan
for images, labels in train_generator:
# Menampilkan contoh data
for i in range(8):
plt.subplot(2, 4, i+1)
plt.imshow(images[i])
plt.title('Label: ' + str(labels[i]))
plt.axis('off')

break
plt.show()

Sintaks di atas digunakan untuk menampilkan beberapa contoh data pelatihan yang ada.

Sampel Gambar Data Train

Selanjutnya adalah membuat model dari data train beserta testing dari model yang dibuat.

# Melatih model
history = model.fit(
train_generator,
steps_per_epoch=train_generator.samples // train_generator.batch_size,
validation_data=validation_generator,
validation_steps=validation_generator.samples // validation_generator.batch_size,
epochs=30,
callbacks=[early_stopping], # put your callbacks in a list
)

# Evaluasi model
scores = model.evaluate(validation_generator)
print(f'Accuracy: {scores[1]*100}%')

Model yang dibuat menggunakan epoch sebesar 30 dan untuk steps per epoch yang digunakan sebesar jumlah sample data train dibagi dengan batch size data train. Jika dijalankan akan muncul seperti berikut.

Hasil dari Model yang Dibuat

Hasil akurasi yang diperoleh dari model yakni sebesar 90,56% yang menunjukkan model sudah sangat baik dalam membedakan kelas pada gambar.



Source link

Be the first to comment

Leave a Reply

Your email address will not be published.


*