MinAI - Về trang chủ
Lý thuyết
4/2190 phút
Đang tải...

Training Neural Networks với TensorFlow/Keras

Học cách xây dựng, compile, train và evaluate Neural Network với TensorFlow/Keras - framework phổ biến nhất cho Deep Learning

0

🎯 Mục tiêu bài học

TB5 min

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á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ế!

1

📚 Giới thiệu TensorFlow và Keras

TB5 min

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ểmTensorFlow (Low-level)Keras (High-level)
CodeNhiều hơnÍt hơn
Linh hoạtCaoTrung bình
Độ khóKhó họcDễ học
AbstractionThấpCao

Với người mới: Bắt đầu với Keras!

Checkpoint

Bạn đã hiểu TensorFlow và Keras là gì?

2

🔧 Cài đặt và Setup

TB5 min

Cài đặt TensorFlow

Bash
1# Cài đặt cơ bản (CPU only)
2pip install tensorflow
3
4# Cài đặt với GPU support
5pip install tensorflow[and-cuda]
6
7# Cài đặt các thư viện hỗ trợ
8pip install numpy pandas matplotlib scikit-learn seaborn

Kiểm tra cài đặt

python.py
1import tensorflow as tf
2print(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ầnMô tảVí dụ
ModelsContainer chứa layersSequential, Functional API
LayersCác tầng xử lýDense, Conv2D, LSTM
ActivationsHàm kích hoạtrelu, sigmoid, softmax
OptimizersThuật toán tối ưuAdam, SGD, RMSprop
LossesHàm mất mátbinary_crossentropy, mse
MetricsĐánh giá modelaccuracy, precision, AUC
CallbacksCan thiệp trainingEarlyStopping, ModelCheckpoint

Checkpoint

Bạn đã cài đặt TensorFlow thành công?

3

🏗️ Xây dựng Model với Sequential API

TB5 min

5 Bước làm việc với Keras

5 Bước làm việc với Keras

5 Bước làm việc với Keras1️⃣BuildXây dựng model2️⃣CompileCấu hình optimizer3️⃣FitTrain model4️⃣EvaluateĐánh giá5️⃣PredictDự đoán

Cách 1: Truyền list layers

python.py
1from tensorflow import keras
2from tensorflow.keras import layers
3
4model = 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

python.py
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

python.py
1model.summary()
Expected Output
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,817
10Trainable params: 2,817
11Non-trainable params: 0

Checkpoint

Bạn đã biết cách xây dựng model với Sequential API?

4

⚙️ Compile Model

TB5 min

Cú pháp compile()

python.py
1model.compile(
2 optimizer='adam', # Thuật toán tối ưu
3 loss='binary_crossentropy', # Hàm loss
4 metrics=['accuracy'] # Metrics theo dõi
5)

Chọn Loss Function

Bài toánLoss FunctionOutput 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ểmKhi nào dùng
AdamAdaptive, kết hợp momentum⭐ Mặc định cho hầu hết
SGDCơ bản, ổn địnhFine-tuning
RMSpropAdaptive learning rateRNN, LSTM

Custom Learning Rate

python.py
1from tensorflow.keras.optimizers import Adam
2
3optimizer = Adam(learning_rate=0.001) # Default
4optimizer = Adam(learning_rate=0.0001) # Nhỏ hơn nếu unstable
5
6model.compile(optimizer=optimizer, loss='binary_crossentropy')

Checkpoint

Bạn đã biết cách compile model với đúng loss và optimizer?

5

🚀 Train Model với fit()

TB5 min

Cú pháp fit()

python.py
1history = model.fit(
2 X_train, y_train,
3 epochs=50, # Số vòng lặp
4 batch_size=32, # Kích thước batch
5 validation_split=0.2, # 20% data cho validation
6 verbose=1 # Hiển thị progress
7)

Giải thích tham số quan trọng

Tham sốÝ nghĩaGiá trị thường dùng
epochsSố lần duyệt toàn bộ data10, 50, 100, 200
batch_sizeSố samples/lần cập nhật16, 32, 64, 128
validation_split% data cho validation0.1, 0.2
validation_dataValidation riêng(X_val, y_val)
shuffleXáo trộn dataTrue
callbacksCan thiệp training[EarlyStopping()]

Batch Size và Epochs

Ví dụ Batch và Epoch

1000 samples, batch_size=100, epochs=10

Ví dụ Batch và EpochEpoch 1:├──Batch 1: samples 1-100cập nhật weights├──Batch 2: samples 101-200cập nhật weights├──Batch 3: samples 201-300cập nhật weights├── ......└──Batch 10: samples 901-1000cập nhật weights10 batches/epoch × 10 epochs = 100 lần cập nhật weights!

Chọn Batch Size

Batch SizeƯu điểmNhược điểm
Nhỏ (16, 32)Regularization tốtChậm, noisy
Lớn (128, 256)Nhanh, ổn địnhCầ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()?

6

🛑 Callbacks: EarlyStopping và ModelCheckpoint

TB5 min

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.

python.py
1from tensorflow.keras.callbacks import EarlyStopping
2
3early_stop = EarlyStopping(
4 monitor='val_loss', # Theo dõi val_loss
5 patience=10, # Chờ 10 epochs
6 restore_best_weights=True, # Khôi phục weights tốt nhất
7 verbose=1
8)

ModelCheckpoint

python.py
1from tensorflow.keras.callbacks import ModelCheckpoint
2
3checkpoint = ModelCheckpoint(
4 'best_model.keras', # Tên file
5 monitor='val_accuracy', # Theo dõi val_accuracy
6 save_best_only=True # Chỉ lưu khi tốt hơn
7)

ReduceLROnPlateau

python.py
1from tensorflow.keras.callbacks import ReduceLROnPlateau
2
3reduce_lr = ReduceLROnPlateau(
4 monitor='val_loss',
5 factor=0.2, # Giảm còn 20%
6 patience=5
7)

Sử dụng callbacks

python.py
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?

7

📊 Evaluate và Predict

TB5 min

Evaluate trên Test Set

python.py
1# Đánh giá model
2test_loss, test_accuracy = model.evaluate(X_test, y_test, verbose=0)
3
4print(f"Test Loss: {test_loss:.4f}")
5print(f"Test Accuracy: {test_accuracy:.4f}")

Predict

python.py
1# Predict xác suất
2y_pred_proba = model.predict(X_test)
3
4# Chuyển thành nhãn 0/1 (binary)
5y_pred = (y_pred_proba > 0.5).astype(int)
6
7# Cho multi-class
8y_pred = np.argmax(y_pred_proba, axis=1)

Visualize Training History

python.py
1import matplotlib.pyplot as plt
2
3fig, axes = plt.subplots(1, 2, figsize=(14, 5))
4
5# Loss
6axes[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()
10
11# Accuracy
12axes[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()
16
17plt.show()

Checkpoint

Bạn đã biết cách evaluate và predict?

8

💻 Bài toán thực hành: Customer Churn

TB5 min

Full Code Example

python.py
1import numpy as np
2import tensorflow as tf
3from tensorflow import keras
4from tensorflow.keras import layers
5from tensorflow.keras.callbacks import EarlyStopping
6from sklearn.datasets import make_classification
7from sklearn.model_selection import train_test_split
8from sklearn.preprocessing import StandardScaler
9from sklearn.metrics import classification_report
10
11# 1. Tạo dữ liệu
12X, y = make_classification(
13 n_samples=5000,
14 n_features=10,
15 n_classes=2,
16 weights=[0.7, 0.3],
17 random_state=42
18)
19
20# 2. Chia train/test
21X_train, X_test, y_train, y_test = train_test_split(
22 X, y, test_size=0.2, random_state=42, stratify=y
23)
24
25# 3. Chuẩn hóa
26scaler = StandardScaler()
27X_train = scaler.fit_transform(X_train)
28X_test = scaler.transform(X_test)
29
30# 4. Xây dựng model
31model = 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])
43
44# 5. Compile
45model.compile(
46 optimizer=keras.optimizers.Adam(learning_rate=0.001),
47 loss='binary_crossentropy',
48 metrics=['accuracy']
49)
50
51# 6. Train
52early_stop = EarlyStopping(
53 monitor='val_loss',
54 patience=10,
55 restore_best_weights=True
56)
57
58history = 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=1
65)
66
67# 7. Evaluate
68test_loss, test_acc = model.evaluate(X_test, y_test)
69print(f"\nTest Accuracy: {test_acc:.4f}")
70
71# 8. Predict và Report
72y_pred = (model.predict(X_test) > 0.5).astype(int)
73print("\nClassification Report:")
74print(classification_report(y_test, y_pred))
Expected Output
1Epoch 1/100
2100/100 [==============================] - 1s 5ms/step - loss: 0.5821 - accuracy: 0.7125
3...
4Epoch 35/100
5100/100 [==============================] - 0s 3ms/step - loss: 0.2341 - accuracy: 0.9012
6
7Test Accuracy: 0.8950
8
9Classification Report:
10 precision recall f1-score support
11 0 0.92 0.95 0.93 700
12 1 0.85 0.78 0.81 300
13 accuracy 0.90 1000

Checkpoint

Bạn đã chạy được code thực hành?

9

🎯 Tổng kết và Best Practices

TB5 min

Quy trình xây dựng Neural Network

  1. Chuẩn bị data: Load, clean, normalize, split
  2. Build model: Sequential hoặc Functional API
  3. Compile: Chọn optimizer, loss, metrics
  4. Train: fit() với callbacks
  5. Evaluate: Test set performance
  6. Predict: Inference trên data mới

Best Practices

TipMô tả
Normalize inputChuẩn hóa features về mean=0, std=1
Start simpleBắt đầu với model nhỏ, tăng dần
Use callbacksEarlyStopping, ModelCheckpoint
Monitor val_lossPhát hiện overfitting sớm
RegularizationDropout, BatchNorm, L2
Learning rateBắ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!