TF: TensorFlow untuk dataset CIFAR-100
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.