TF: TensorFlow untuk dataset CIFAR-100

From OnnoWiki
Revision as of 09:14, 16 March 2025 by Onnowpurbo (talk | contribs) (Created page with "Berikut adalah contoh kode Python yang memuat dataset CIFAR-100, membangun model Convolutional Neural Network (CNN) menggunakan Keras, melatih model tersebut, melakukan predik...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Berikut adalah contoh kode Python yang memuat dataset CIFAR-100, membangun model Convolutional Neural Network (CNN) menggunakan Keras, melatih model tersebut, melakukan prediksi, dan memvisualisasikan hasilnya:

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
import numpy as np

# Memuat dataset CIFAR-100
(train_images, train_labels), (test_images, test_labels) = datasets.cifar100.load_data()

# Normalisasi data ke rentang 0-1
train_images, test_images = train_images / 255.0, test_images / 255.0

# Mendefinisikan arsitektur model CNN
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dense(100)
])

# Kompilasi model
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

# Melatih model
history = model.fit(train_images, train_labels, epochs=10,
                    validation_data=(test_images, test_labels))

# Membuat prediksi pada data uji
predictions = model.predict(test_images)
predicted_labels = np.argmax(predictions, axis=1)

# Fungsi untuk menampilkan gambar beserta label prediksi dan aslinya
def plot_image(i, predictions_array, true_label, img):
    true_label, img = true_label[i][0], img[i]
    plt.grid(False)
    plt.xticks([])
    plt.yticks([])

    plt.imshow(img, cmap=plt.cm.binary) 

    predicted_label = np.argmax(predictions_array)
    if predicted_label == true_label:
        color = 'blue'
    else:
        color = 'red' 

    plt.xlabel(f"Prediksi: {predicted_label} (Asli: {true_label})", color=color)

# Menampilkan beberapa gambar dengan prediksi dan label aslinya
num_rows, num_cols = 5, 5
num_images = num_rows * num_cols
plt.figure(figsize=(2*num_cols, 2*num_rows))
for i in range(num_images):
    plt.subplot(num_rows, num_cols, i+1)
    plot_image(i, predictions[i], test_labels, test_images)
plt.tight_layout()
plt.show()

Penjelasan kode:

1. Memuat dan Menormalisasi Data: Dataset CIFAR-100 dimuat menggunakan `datasets.cifar100.load_data()`, kemudian nilai piksel dinormalisasi ke rentang 0-1 dengan membagi 255.0.

2. Membangun Model CNN: Model Sequential dibangun dengan menambahkan lapisan-lapisan:

  • Tiga lapisan konvolusi dengan fungsi aktivasi ReLU dan ukuran kernel 3x3.
  • Dua lapisan pooling maksimal dengan ukuran 2x2 untuk downsampling.
  • Lapisan Flatten untuk meratakan output sebelum masuk ke lapisan Dense.
  • Dua lapisan Dense, satu dengan 64 neuron dan ReLU, serta lapisan output dengan 100 neuron sesuai jumlah kelas.

3. Kompilasi dan Pelatihan Model: Model dikompilasi dengan optimizer Adam dan fungsi loss SparseCategoricalCrossentropy. Model kemudian dilatih selama 10 epoch dengan data pelatihan dan divalidasi dengan data uji.

4. Prediksi dan Visualisasi: Setelah pelatihan, model digunakan untuk memprediksi data uji. Fungsi `plot_image` menampilkan gambar beserta label prediksi dan aslinya. Sebanyak 25 gambar ditampilkan dalam grid 5x5.

Catatan:

  • Pastikan Anda memiliki TensorFlow dan Matplotlib terinstal. Jika belum, instal dengan `pip install tensorflow matplotlib`.
  • Pelatihan model dapat memakan waktu tergantung pada spesifikasi perangkat keras Anda.
  • Untuk meningkatkan akurasi, pertimbangkan untuk menambah jumlah epoch atau mengubah arsitektur model.

Kode ini memberikan dasar untuk membangun, melatih, dan mengevaluasi model CNN pada dataset CIFAR-100. Anda dapat mengembangkan lebih lanjut dengan teknik augmentasi data, regularisasi, atau menggunakan arsitektur model yang lebih kompleks.


Pranala Menarik