1.1 TensorFlow 與 Keras 基礎介紹
TensorFlow 是用來進行數值運算、模型訓練與模型部署的機器學習框架;Keras 則是 TensorFlow 中最常用的高階深度學習 API。對初學者來說,可以先把 TensorFlow 想成底層運算工具,把 Keras 想成建立與訓練神經網路的標準介面。
本篇不急著建立大型模型,而是先用最小範例理解 Tensor、Variable、自動微分與 Keras 訓練流程。只要先掌握這幾個元件,後續看到 DNN、CNN 或 Transformer 時,就比較容易理解模型訓練背後共同的邏輯。
1. 學習目標
這篇先建立 TensorFlow/Keras 的基本工作直覺:資料會變成 tensor,模型的可訓練參數會用 variable 表示,訓練過程會透過 loss 與 gradient 更新參數。最後會用 Keras 建立一個簡單的線性迴歸模型,完整跑過 compile、fit、evaluate 與 predict。
2. Tensor、Variable 與 NumPy 的關係
Tensor 是 TensorFlow 的基本資料單位,概念接近 NumPy array,但可以交給 TensorFlow 管理運算圖、自動微分與硬體加速。tf.Variable 則代表可被訓練更新的數值,神經網路中的權重與偏差本質上就是 variable。
| 物件 | 用途 |
|---|---|
tf.Tensor |
固定的數值資料,例如輸入資料或中間運算結果 |
tf.Variable |
可更新的參數,例如模型權重 |
np.ndarray |
Python 資料分析常用的陣列格式,可與 TensorFlow 互轉 |
3. 自動微分是訓練的核心
深度學習訓練的核心是根據 loss 對模型參數計算梯度,再用 optimizer 更新參數。TensorFlow 使用 tf.GradientTape() 記錄運算過程,並自動計算微分。
x = tf.Variable(3.0)
with tf.GradientTape() as tape:
y = x ** 2
grad = tape.gradient(y, x)
print(grad.numpy()) # 6.0
Note
不需要手刻每一層神經網路的微分公式,是現代深度學習框架的重要價值。Keras 的 model.fit() 會在背後替我們完成 forward pass、loss 計算、backpropagation 與參數更新。
4. Keras 的標準訓練流程
Keras 模型最常見的流程如下:
對應到程式:
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(1,)),
tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
model.fit(x_train, y_train, epochs=100)
model.evaluate(x_test, y_test)
model.predict(new_x)
Notebook 會用一個簡單的線性迴歸資料 y = 3x + 2 示範這個流程。這個範例刻意保持簡單,目的是讓讀者先看懂 Keras 的訓練步驟,而不是被資料前處理或模型架構分散注意力。
5. 如何套用到自己的資料?
如果要改成自己的資料,最重要的是先確認三件事:
x_train的 shape 是否符合模型第一層Input(shape=...)。y_train的型態是否符合任務,例如回歸是連續數值、分類是類別標籤。loss與輸出層是否符合任務,例如回歸常用mse,二元分類常用sigmoid + binary_crossentropy。
6. 小結
TensorFlow/Keras 的入門重點不是一次背完所有 API,而是先理解模型訓練的共同流程。後續不論做表格資料、圖片、文字或時間序列,基本上都會反覆使用這套流程。