TensorFlow adalah framework deep learning yang paling banyak dipakai di lingkungan produksi, sementara Keras menjadi antarmuka tingkat tinggi di atasnya. Sejak TensorFlow 2.16, paket tensorflow membawa Keras 3 secara bawaan sehingga satu perintah pip install cukup untuk keduanya. Verifikasi instalasi TensorFlow juga perlu dilakukan lebih jauh daripada sekadar mencetak nomor versi, karena banyak komponen runtime bekerja hanya saat model benar-benar dilatih. Chapter ini memasang TensorFlow 2.21, menjelaskan posisi Keras 3 di dalamnya, lalu memverifikasi semuanya dengan melatih model mini sungguhan yang belajar pola garis y = 3x + 1.

Memasang TensorFlow #

Pastikan virtual environment proyek aktif, lalu pasang paket tensorflow dari PyPI:

bash
python3 -m pip install tensorflow

Output yang Dihasilkan (mesin uji Course telah memiliki TensorFlow, sehingga pip melaporkannya):

text
Requirement already satisfied: tensorflow in /home/z/.venv/lib/python3.12/site-packages (2.21.0)
Requirement already satisfied: absl-py>=1.0.0 in /home/z/.venv/lib/python3.12/site-packages (from tensorflow) (2.5.1)

Pada venv yang masih kosong, pip mengunduh paket inti tensorflow sekaligus tensorflow-intel di Windows serta sejumlah dependensi seperti numpy, protobuf, dan ml-dtypes. Ukuran unduhannya besar — berkisar ratusan megabita — karena satu paket sudah memuat seluruh mesin komputasinya.

TensorFlow dan Keras 3 #

Sejak TensorFlow 2.16, tf.keras menunjuk ke Keras 3, generasi terbaru yang juga dapat berjalan di atas backend lain seperti JAX dan PyTorch. Selama Course ini kita memakai API Keras 3 melalui tf.keras — misalnya tf.keras.layers.Dense, tf.keras.Model, model.compile, dan model.fit. API lama gaya Keras 2 yang sudah dihapus tidak akan dipakai sama sekali.

Verifikasi Instalasi dengan Model Mini #

Uji paling meyakinkan adalah melatih model sungguhan, sekecil apa pun. Skrip berikut membangun model Sequential satu layer, melatihnya pada empat titik data, lalu melaporkan versi paket beserta hasil pelatihannya:

python
import os

os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"

import numpy as np
import tensorflow as tf

print("Versi TensorFlow :", tf.__version__)
print("Versi Keras      :", tf.keras.__version__)
print("GPU terdeteksi   :", tf.config.list_physical_devices("GPU"))

tf.keras.utils.set_random_seed(42)

model = tf.keras.Sequential(
    [
        tf.keras.Input(shape=(1,)),
        tf.keras.layers.Dense(1),
    ]
)
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.1), loss="mse")

x = np.array([[0.0], [1.0], [2.0], [3.0]], dtype=np.float32)
y = 3.0 * x + 1.0

riwayat = model.fit(x, y, epochs=20, verbose=0)

print("Loss awal        :", round(float(riwayat.history["loss"][0]), 6))
print("Loss akhir       :", round(float(riwayat.history["loss"][-1]), 6))

bobot, bias = model.layers[0].get_weights()
print("Bobot akhir      :", round(float(bobot[0][0]), 6))
print("Bias akhir       :", round(float(bias[0]), 6))

Output yang Dihasilkan:

text
Versi TensorFlow : 2.21.0
Versi Keras      : 3.15.1
GPU terdeteksi   : []
Loss awal        : 17.109295
Loss akhir       : 0.000735
Bobot akhir      : 3.019831
Bias akhir       : 0.957659

Mari kita telaah kode di atas baris per baris:

  1. Baris 1-3 (os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"): mematikan log level INFO dan WARNING milik TensorFlow. Variabel ini harus diatur sebelum import tensorflow karena TensorFlow membacanya saat modul dimuat.
  2. Baris 9-11 (tf.__version__ dan tf.keras.__version__): menampilkan versi TensorFlow (2.21.0) dan versi Keras yang dibawanya (3.15.1) — bukti bahwa Keras 3 sudah terpasang bersama TensorFlow.
  3. Baris 12 (list_physical_devices("GPU")): mendaftar perangkat GPU yang dikenali TensorFlow. Mesin uji Course hanya ber-CPU, sehingga daftarnya kosong ([]).
  4. Baris 14 (tf.keras.utils.set_random_seed(42)): menetapkan seed untuk generator angka acak Python, NumPy, TensorFlow, dan Keras sekaligus, sehingga hasil inisialisasi bobot serta pelatihan dapat direproduksi.
  5. Baris 16-21 (tf.keras.Sequential(...)): membangun model berurutan dengan satu layer Dense berisi satu unit. tf.keras.Input(shape=(1,)) menyatakan setiap contoh data memiliki satu fitur masukan.
  6. Baris 22 (model.compile(...)): memilih optimizer SGD dengan learning rate 0.1 dan fungsi loss mse (mean squared error) — kombinasi standar untuk regresi.
  7. Baris 24-25 (x dan y): data latih berupa empat titik pada garis y = 3x + 1; model tidak diberi tahu angka 3 dan 1, model harus menemukannya sendiri.
  8. Baris 27 (model.fit(..., verbose=0)): melatih model selama 20 epoch. Argumen verbose=0 membuat proses berlangsung tanpa mencetak progres per epoch.
  9. Baris 29-31 (riwayat.history["loss"]): objek keluaran fit menyimpan nilai loss setiap epoch; kita bandingkan epoch pertama dan terakhir untuk melihat penurunannya.
  10. Baris 33-35 (model.layers[0].get_weights()): mengambil bobot dan bias akhir layer. Nilai 3.019831 dan 0.957659 sangat dekat dengan gradien 3 dan intersep 1 dari garis data — bukti model benar-benar belajar.

Meredam Log TensorFlow #

TensorFlow menulis sejumlah baris informasi internal ke aliran stderr — misalnya pemberitahuan oneDNN dan pesan Could not find cuda drivers on your machine di mesin tanpa GPU. Pesan-pesan tersebut tidak menandakan kegagalan program; pada keluaran di atas, baris tersebut tidak muncul karena dl_run memisahkan stdout dari stderr. Variabel TF_CPP_MIN_LOG_LEVEL mengendalikan seberapa banyak log yang tampil:

NilaiEfek
0seluruh pesan tampil (bawaan)
1pesan INFO disembunyikan
2pesan INFO dan WARNING disembunyikan
3pesan INFO, WARNING, dan ERROR disembunyikan

Ringkasan #

Pada Chapter ini kita memasang TensorFlow 2.21 yang membawa Keras 3.15.1, mencatat bahwa TensorBoard kini dipasang terpisah, lalu memverifikasi instalasi dengan model Sequential mini yang berhasil menurunkan loss dari 17.1 ke 0.0007 dan menemukan kembali gradien garis dari data. Pola set_random_seed sebelum pelatihan juga kita sepakati sebagai kebiasaan agar eksperimen dapat direproduksi. Kedua framework utama kini siap di mesin CPU; Chapter berikutnya membahas apa yang berubah ketika komputer memiliki GPU — mulai dari tumpukan CUDA sampai cara memeriksa bahwa GPU benar-benar terdeteksi.