Dalam artikel ini, kita akan membahas cara membuat model klasifikasi untuk dataset MNIST menggunakan TensorFlow. Kita akan menggabungkan penjelasan tentang proses forward propagation, serta teknik lainnya seperti flattening dalam satu kesatuan kode Python.
import tensorflow as tf# Load info
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Preprocess info
x_train = x_train.reshape(x_train.type[0], 28 * 28).astype('float32') / 255
x_test = x_test.reshape(x_test.type[0], 28 * 28).astype('float32') / 255
# Define the model
model = tf.keras.Sequential([
tf.keras.layers.Dense(512, activation='relu', input_shape=(28 * 28,)),
tf.keras.layers.Dense(10, activation='softmax')
])
# Compile the model
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Follow the model
model.match(x_train, y_train, epochs=5)
# Contemplate the model
test_loss, test_acc = model.contemplate(x_test, y_test)
print('Check out accuracy:', test_acc)
- Mengimpor TensorFlow dan Memuat Data:
Pertama, kita mengimpor TensorFlow dan memuat dataset MNIST. Dataset ini dibagi menjadi info latih (x_train
, y_train
) dan info uji (x_test
, y_test
).
import tensorflow as tf# Load info
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
2. Preprocessing Data:
Gambar pada dataset MNIST memiliki dimensi 28×28 piksel. Kita melakukan proses flatten (meratakan) dengan meresap ulang info tersebut menjadi vektor 1D dengan panjang 784 (28×28) dan menormalisasi nilai piksel ke rentang 0–1 dengan membaginya dengan 255.
# Preprocess info
x_train = x_train.reshape(x_train.type[0], 28 * 28).astype('float32') / 255
x_test = x_test.reshape(x_test.type[0], 28 * 28).astype('float32') / 255
3. Mendefinisikan Model :
Model kita adalah model sekuensial dengan dua lapisan Dense (completely linked). Lapisan pertama memiliki 512 neuron dengan fungsi aktivasi ReLU, dan lapisan kedua memiliki 10 neuron dengan fungsi aktivasi softmax untuk klasifikasi 10 kelas digit (0–9).
# Define the model
model = tf.keras.Sequential([
tf.keras.layers.Dense(512, activation='relu', input_shape=(28 * 28,)),
tf.keras.layers.Dense(10, activation='softmax')
])
4. Forward Propagation :
Pada tahap ini, enter berupa gambar digit yang telah di-flatten dan dinormalisasi mengalir melalui jaringan:
- Lapisan pertama: Enter dikalikan dengan bobot, ditambahkan bias, lalu fungsi aktivasi ReLU diterapkan untuk memperkenalkan non-linearitas.
- Lapisan kedua: Output dari lapisan pertama dikalikan dengan bobot, ditambahkan bias, lalu fungsi aktivasi softmax menghasilkan probabilitas untuk setiap kelas.
5. Kompilasi Model:
Kita mengkompilasi model menggunakan optimizer Adam, loss carry out sparse_categorical_crossentropy
, dan metrik accuracy
untuk evaluasi.
# Compile the model
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
5. Backpropagation dan Pelatihan Model:
Model dilatih selama 5 epoch menggunakan info latih. Selama proses ini, backpropagation digunakan untuk memperbarui bobot berdasarkan error antara output yang diprediksi dan output yang sebenarnya. Optimizer Adam menggunakan gradien ini untuk meminimalkan loss carry out.
# Follow the model
model.match(x_train, y_train, epochs=5)
5. Evaluasi Model
Setelah pelatihan, kita evaluasi model menggunakan info uji dan mencetak akurasi model.
# Contemplate the model
test_loss, test_acc = model.contemplate(x_test, y_test)
print('Check out accuracy:', test_acc)
Dalam kode di atas, kita melihat bagaimana forward propagation digunakan untuk menghasilkan prediksi, sementara backpropagation digunakan untuk memperbarui bobot sehingga model dapat belajar dan meningkatkan akurasinya. Flattening adalah salah satu teknik preprocessing penting yang mengubah gambar 2D menjadi vektor 1D yang dapat diinput ke dalam jaringan saraf.