2025年3月6日 星期四

Python 18 小時入門--第 13 小時:Python 深度學習入門(Deep Learning with TensorFlow & Keras)

 📌 第 13 小時:Python 深度學習入門(Deep Learning with TensorFlow & Keras)

深度學習(Deep Learning)是機器學習的進階技術,使用人工神經網路(Artificial Neural Networks, ANN) 模擬人腦的學習方式。Python 提供 TensorFlowKeras 來構建強大的深度學習模型。本章將介紹:

  1. 深度學習概念
  2. 安裝 TensorFlow & Keras
  3. 建立神經網路(ANN)
  4. 訓練影像分類模型(CNN)
  5. 自然語言處理(NLP)
  6. 模型評估與改進

🔹 1. 深度學習概念

深度學習基於 人工神經網路(ANN),模擬大腦神經元的工作方式,主要用於:

  • 影像辨識(CNN):人臉識別、醫學影像分析
  • 自然語言處理(NLP):聊天機器人、語音辨識、翻譯
  • 強化學習(Reinforcement Learning):自駕車、遊戲 AI

🔹 神經網路的基本結構

  1. 輸入層(Input Layer):負責接收數據
  2. 隱藏層(Hidden Layers):透過 神經元(Neurons) 進行特徵學習
  3. 輸出層(Output Layer):產生預測結果

📌 深度學習的關鍵技術:

  • 激活函數(Activation Function):如 ReLU、Sigmoid、Softmax
  • 損失函數(Loss Function):衡量模型錯誤程度
  • 優化器(Optimizer):如 SGD、Adam,負責模型學習

🔹 2. 安裝 TensorFlow & Keras

TensorFlow 是 Google 開發的深度學習框架,Keras 是其高階 API,可快速建立神經網路。

🟢 安裝 TensorFlow

pip install tensorflow

🟢 檢查 TensorFlow 是否成功安裝

import tensorflow as tf
print(tf.__version__)  # 檢查 TensorFlow 版本

🔹 3. 建立簡單的神經網路

我們將使用 Keras 建立 人工神經網路(ANN) 來預測 手寫數字辨識(MNIST)

🟢 讀取數據

from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# 下載 MNIST 手寫數字資料集
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# 正規化數據(0~255 → 0~1)
X_train, X_test = X_train / 255.0, X_test / 255.0

# One-hot 編碼
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

🟢 建立 ANN 模型

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

model = Sequential([
    Flatten(input_shape=(28, 28)),  # 轉換 28x28 圖片為 1D 向量
    Dense(128, activation="relu"),  # 隱藏層
    Dense(10, activation="softmax")  # 輸出層(10 類別)
])

model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.summary()  # 顯示模型架構

🟢 訓練模型

model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))

📌 每個 epoch 表示模型掃描完整數據集一次,訓練 10 次。


🔹 4. 訓練卷積神經網路(CNN)

卷積神經網路(Convolutional Neural Network, CNN)專門用於 影像辨識,我們來建立 CNN 來辨識手寫數字。

🟢 建立 CNN 模型

from tensorflow.keras.layers import Conv2D, MaxPooling2D

model = Sequential([
    Conv2D(32, (3,3), activation="relu", input_shape=(28,28,1)),  # 卷積層
    MaxPooling2D((2,2)),  # 池化層
    Flatten(),
    Dense(128, activation="relu"),
    Dense(10, activation="softmax")
])

model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(X_train.reshape(-1,28,28,1), y_train, epochs=10, validation_data=(X_test.reshape(-1,28,28,1), y_test))

📌 CNN 由 卷積層(Conv2D)+ 池化層(MaxPooling2D)+ 全連接層(Dense) 組成,可擷取影像特徵。


🔹 5. 自然語言處理(NLP)

NLP 主要處理 文字數據,如 情感分析、機器翻譯、聊天機器人

🟢 使用 TensorFlow 進行 NLP

from tensorflow.keras.preprocessing.text import Tokenizer

texts = ["I love Python", "Deep Learning is amazing", "NLP is fun"]
tokenizer = Tokenizer(num_words=1000)
tokenizer.fit_on_texts(texts)

word_index = tokenizer.word_index
print(word_index)  # 顯示單字索引

📌 Tokenizer 可將文字轉換為數字序列,便於神經網路訓練。


🔹 6. 模型評估與調整

🟢 模型評估

loss, accuracy = model.evaluate(X_test.reshape(-1,28,28,1), y_test)
print(f"測試集準確率: {accuracy:.2f}")

🟢 避免過擬合(Overfitting)

過擬合(Overfitting)是指模型在訓練集表現很好,但測試集效果差,解決方法:

  • 加入 Dropout 層:隨機忽略部分神經元,增加模型泛化能力
from tensorflow.keras.layers import Dropout

model.add(Dropout(0.5))  # 50% 隨機忽略
  • 增加數據增強(Data Augmentation)
from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(rotation_range=10, zoom_range=0.1)
datagen.fit(X_train.reshape(-1,28,28,1))

📌 第 13 小時小結

深度學習基於人工神經網路(ANN)與卷積神經網路(CNN)
TensorFlowKeras 提供高效的深度學習框架
Sequential() 建立神經網路,Dense() 定義神經元層
model.fit() 訓練模型,model.evaluate() 測試模型
Conv2D() 卷積層專門用於影像辨識
避免過擬合的方法:Dropout、Data Augmentation

學完這一章,你已掌握 深度學習基礎與 Python 實作,下一步將學習 人工智慧應用(AI + Chatbot),讓你的 Python 能與人類對話!🚀

沒有留言:

張貼留言