🎯 Mục tiêu bài học
Sau bài này, bạn sẽ:
✅ Hiểu TensorFlow/Keras là gì
✅ Biết 3 bước cơ bản: Build → Compile → Fit
✅ Xây dựng và train Neural Network đầu tiên
✅ Hiểu cách đánh giá và lưu model
Ôn lại bài trước
Đã học: Neuron, Activation, Forward/Backward Propagation.
Hôm nay: Biến lý thuyết thành code thực tế!
📚 Giới thiệu TensorFlow và Keras
TensorFlow là gì?
TensorFlow là thư viện mã nguồn mở do Google phát triển, dùng để xây dựng và huấn luyện các mô hình Machine Learning và Deep Learning.
Tại sao tên là "TensorFlow"?
- Tensor: Cấu trúc dữ liệu đa chiều (như NumPy array)
- Flow: Dữ liệu "chảy" qua đồ thị tính toán
Keras là gì?
Keras là API cấp cao giúp xây dựng Neural Networks một cách đơn giản và nhanh chóng. Keras chạy trên nền TensorFlow.
So sánh TensorFlow vs Keras
| Đặc điểm | TensorFlow (Low-level) | Keras (High-level) |
|---|---|---|
| Code | Nhiều hơn | Ít hơn |
| Linh hoạt | Cao | Trung bình |
| Độ khó | Khó học | Dễ học |
| Abstraction | Thấp | Cao |
Với người mới: Bắt đầu với Keras!
Checkpoint
Bạn đã hiểu TensorFlow và Keras là gì?
🔧 Cài đặt và Setup
Cài đặt TensorFlow
1# Cài đặt cơ bản (CPU only)2pip install tensorflow3 4# Cài đặt với GPU support5pip install tensorflow[and-cuda]6 7# Cài đặt các thư viện hỗ trợ8pip install numpy pandas matplotlib scikit-learn seabornKiểm tra cài đặt
1import tensorflow as tf2print(f"TensorFlow version: {tf.__version__}")3print(f"Keras version: {tf.keras.__version__}")4print(f"GPU available: {tf.config.list_physical_devices('GPU')}")Các thành phần chính của Keras
| Thành phần | Mô tả | Ví dụ |
|---|---|---|
| Models | Container chứa layers | Sequential, Functional API |
| Layers | Các tầng xử lý | Dense, Conv2D, LSTM |
| Activations | Hàm kích hoạt | relu, sigmoid, softmax |
| Optimizers | Thuật toán tối ưu | Adam, SGD, RMSprop |
| Losses | Hàm mất mát | binary_crossentropy, mse |
| Metrics | Đánh giá model | accuracy, precision, AUC |
| Callbacks | Can thiệp training | EarlyStopping, ModelCheckpoint |
Checkpoint
Bạn đã cài đặt TensorFlow thành công?
🏗️ Xây dựng Model với Sequential API
5 Bước làm việc với Keras
5 Bước làm việc với Keras
Cách 1: Truyền list layers
1from tensorflow import keras2from tensorflow.keras import layers34model = keras.Sequential([5 layers.Dense(64, activation='relu', input_shape=(10,)),6 layers.Dense(32, activation='relu'),7 layers.Dense(1, activation='sigmoid')8])Cách 2: Thêm từng layer
1model = keras.Sequential()2model.add(layers.Dense(64, activation='relu', input_shape=(10,)))3model.add(layers.Dense(32, activation='relu'))4model.add(layers.Dense(1, activation='sigmoid'))Xem kiến trúc model
1model.summary()1Model: "sequential"2_________________________________________________________________3Layer (type) Output Shape Param # 4=================================================================5dense (Dense) (None, 64) 704 6dense_1 (Dense) (None, 32) 2080 7dense_2 (Dense) (None, 1) 33 8=================================================================9Total params: 2,81710Trainable params: 2,81711Non-trainable params: 0Checkpoint
Bạn đã biết cách xây dựng model với Sequential API?
⚙️ Compile Model
Cú pháp compile()
1model.compile(2 optimizer='adam', # Thuật toán tối ưu3 loss='binary_crossentropy', # Hàm loss4 metrics=['accuracy'] # Metrics theo dõi5)Chọn Loss Function
| Bài toán | Loss Function | Output Activation |
|---|---|---|
| Binary Classification | 'binary_crossentropy' | 'sigmoid' |
| Multi-class (integer labels) | 'sparse_categorical_crossentropy' | 'softmax' |
| Multi-class (one-hot labels) | 'categorical_crossentropy' | 'softmax' |
| Regression | 'mse' hoặc 'mae' | None (linear) |
Chọn Optimizer
| Optimizer | Đặc điểm | Khi nào dùng |
|---|---|---|
| Adam | Adaptive, kết hợp momentum | ⭐ Mặc định cho hầu hết |
| SGD | Cơ bản, ổn định | Fine-tuning |
| RMSprop | Adaptive learning rate | RNN, LSTM |
Custom Learning Rate
1from tensorflow.keras.optimizers import Adam23optimizer = Adam(learning_rate=0.001) # Default4optimizer = Adam(learning_rate=0.0001) # Nhỏ hơn nếu unstable56model.compile(optimizer=optimizer, loss='binary_crossentropy')Checkpoint
Bạn đã biết cách compile model với đúng loss và optimizer?
🚀 Train Model với fit()
Cú pháp fit()
1history = model.fit(2 X_train, y_train,3 epochs=50, # Số vòng lặp4 batch_size=32, # Kích thước batch5 validation_split=0.2, # 20% data cho validation6 verbose=1 # Hiển thị progress7)Giải thích tham số quan trọng
| Tham số | Ý nghĩa | Giá trị thường dùng |
|---|---|---|
epochs | Số lần duyệt toàn bộ data | 10, 50, 100, 200 |
batch_size | Số samples/lần cập nhật | 16, 32, 64, 128 |
validation_split | % data cho validation | 0.1, 0.2 |
validation_data | Validation riêng | (X_val, y_val) |
shuffle | Xáo trộn data | True |
callbacks | Can thiệp training | [EarlyStopping()] |
Batch Size và Epochs
Ví dụ Batch và Epoch
1000 samples, batch_size=100, epochs=10
Chọn Batch Size
| Batch Size | Ưu điểm | Nhược điểm |
|---|---|---|
| Nhỏ (16, 32) | Regularization tốt | Chậm, noisy |
| Lớn (128, 256) | Nhanh, ổn định | Cần nhiều memory |
Khuyến nghị: Bắt đầu với batch_size=32
Checkpoint
Bạn đã hiểu các tham số của fit()?
🛑 Callbacks: EarlyStopping và ModelCheckpoint
EarlyStopping
EarlyStopping dừng training khi validation loss không cải thiện, tránh overfitting và tiết kiệm thời gian.
1from tensorflow.keras.callbacks import EarlyStopping23early_stop = EarlyStopping(4 monitor='val_loss', # Theo dõi val_loss5 patience=10, # Chờ 10 epochs6 restore_best_weights=True, # Khôi phục weights tốt nhất7 verbose=18)ModelCheckpoint
1from tensorflow.keras.callbacks import ModelCheckpoint23checkpoint = ModelCheckpoint(4 'best_model.keras', # Tên file5 monitor='val_accuracy', # Theo dõi val_accuracy6 save_best_only=True # Chỉ lưu khi tốt hơn7)ReduceLROnPlateau
1from tensorflow.keras.callbacks import ReduceLROnPlateau23reduce_lr = ReduceLROnPlateau(4 monitor='val_loss',5 factor=0.2, # Giảm còn 20%6 patience=57)Sử dụng callbacks
1history = model.fit(2 X_train, y_train,3 epochs=100,4 validation_split=0.2,5 callbacks=[early_stop, checkpoint, reduce_lr]6)Checkpoint
Bạn đã biết cách sử dụng callbacks?
📊 Evaluate và Predict
Evaluate trên Test Set
1# Đánh giá model2test_loss, test_accuracy = model.evaluate(X_test, y_test, verbose=0)34print(f"Test Loss: {test_loss:.4f}")5print(f"Test Accuracy: {test_accuracy:.4f}")Predict
1# Predict xác suất2y_pred_proba = model.predict(X_test)34# Chuyển thành nhãn 0/1 (binary)5y_pred = (y_pred_proba > 0.5).astype(int)67# Cho multi-class8y_pred = np.argmax(y_pred_proba, axis=1)Visualize Training History
1import matplotlib.pyplot as plt23fig, axes = plt.subplots(1, 2, figsize=(14, 5))45# Loss6axes[0].plot(history.history['loss'], label='Training')7axes[0].plot(history.history['val_loss'], label='Validation')8axes[0].set_title('Model Loss')9axes[0].legend()1011# Accuracy12axes[1].plot(history.history['accuracy'], label='Training')13axes[1].plot(history.history['val_accuracy'], label='Validation')14axes[1].set_title('Model Accuracy')15axes[1].legend()1617plt.show()Checkpoint
Bạn đã biết cách evaluate và predict?
💻 Bài toán thực hành: Customer Churn
Full Code Example
1import numpy as np2import tensorflow as tf3from tensorflow import keras4from tensorflow.keras import layers5from tensorflow.keras.callbacks import EarlyStopping6from sklearn.datasets import make_classification7from sklearn.model_selection import train_test_split8from sklearn.preprocessing import StandardScaler9from sklearn.metrics import classification_report1011# 1. Tạo dữ liệu12X, y = make_classification(13 n_samples=5000,14 n_features=10,15 n_classes=2,16 weights=[0.7, 0.3],17 random_state=4218)1920# 2. Chia train/test21X_train, X_test, y_train, y_test = train_test_split(22 X, y, test_size=0.2, random_state=42, stratify=y23)2425# 3. Chuẩn hóa26scaler = StandardScaler()27X_train = scaler.fit_transform(X_train)28X_test = scaler.transform(X_test)2930# 4. Xây dựng model31model = keras.Sequential([32 layers.Dense(64, activation='relu', input_shape=(10,)),33 layers.BatchNormalization(),34 layers.Dropout(0.3),35 36 layers.Dense(32, activation='relu'),37 layers.BatchNormalization(),38 layers.Dropout(0.2),39 40 layers.Dense(16, activation='relu'),41 layers.Dense(1, activation='sigmoid')42])4344# 5. Compile45model.compile(46 optimizer=keras.optimizers.Adam(learning_rate=0.001),47 loss='binary_crossentropy',48 metrics=['accuracy']49)5051# 6. Train52early_stop = EarlyStopping(53 monitor='val_loss',54 patience=10,55 restore_best_weights=True56)5758history = model.fit(59 X_train, y_train,60 epochs=100,61 batch_size=32,62 validation_split=0.2,63 callbacks=[early_stop],64 verbose=165)6667# 7. Evaluate68test_loss, test_acc = model.evaluate(X_test, y_test)69print(f"\nTest Accuracy: {test_acc:.4f}")7071# 8. Predict và Report72y_pred = (model.predict(X_test) > 0.5).astype(int)73print("\nClassification Report:")74print(classification_report(y_test, y_pred))1Epoch 1/1002100/100 [==============================] - 1s 5ms/step - loss: 0.5821 - accuracy: 0.71253...4Epoch 35/1005100/100 [==============================] - 0s 3ms/step - loss: 0.2341 - accuracy: 0.90126 7Test Accuracy: 0.89508 9Classification Report:10 precision recall f1-score support11 0 0.92 0.95 0.93 70012 1 0.85 0.78 0.81 30013 accuracy 0.90 1000Checkpoint
Bạn đã chạy được code thực hành?
🎯 Tổng kết và Best Practices
Quy trình xây dựng Neural Network
- Chuẩn bị data: Load, clean, normalize, split
- Build model: Sequential hoặc Functional API
- Compile: Chọn optimizer, loss, metrics
- Train: fit() với callbacks
- Evaluate: Test set performance
- Predict: Inference trên data mới
Best Practices
| Tip | Mô tả |
|---|---|
| Normalize input | Chuẩn hóa features về mean=0, std=1 |
| Start simple | Bắt đầu với model nhỏ, tăng dần |
| Use callbacks | EarlyStopping, ModelCheckpoint |
| Monitor val_loss | Phát hiện overfitting sớm |
| Regularization | Dropout, BatchNorm, L2 |
| Learning rate | Bắt đầu với 0.001 (Adam) |
Debugging Checklist
- Data đã được normalize chưa?
- Output activation phù hợp với bài toán?
- Loss function đúng cho bài toán?
- Model có overfitting không?
- Learning rate có phù hợp không?
🎉 Tuyệt vời! Bạn đã biết cách xây dựng Neural Network với TensorFlow/Keras!
