NumPy 基礎運算在深度學習中的應用:+-*/**、比較、sum/mean/max/minaxis

1. 為什麼先掌握基礎運算?



在深度學習中,我們最終要做的是:

  • 對輸入/權重做加法(+
  • 做乘法(*、矩陣乘法)
  • 應用非線性函數(**relusigmoid 等)
  • 計算損失(loss)後,將其 平均(mean求和(sum

PyTorch 的張量運算 完全遵循 NumPy 的基礎運算風格,因此先在 NumPy 中熟悉這些感覺,能讓你在深度學習公式中更清晰地看到結構。


2. 元素級算術運算:+-*/**

NumPy 陣列之間的基本運算是 元素級(element‑wise) 的。

import numpy as np

x = np.array([1, 2, 3])
y = np.array([10, 20, 30])

print(x + y)   # [11 22 33]
print(x - y)   # [ -9 -18 -27]
print(x * y)   # [10 40 90]
print(y / x)   # [10. 10. 10.]
print(x ** 2)  # [1 4 9]
  • 長度相同的一維陣列互相運算時,逐元素相加
  • 二維、三維陣列亦同樣以相同位置進行運算

2.1 與標量(scalar)的運算

與單一數字(標量)運算也同樣自然。

x = np.array([1, 2, 3])

print(x + 10)   # [11 12 13]
print(x * 2)    # [2 4 6]
print(x / 2)    # [0.5 1.  1.5]

這種「所有元素加/乘同一個值」的操作,在深度學習中常用於 正規化、縮放、偏差加入 等。

PyTorch 張量同樣支援此類運算。 x_t + y_tx_t * 2x_t ** 2 等表達式幾乎可以直接使用。


3. 比較運算:><>=<===!=



NumPy 陣列之間的比較運算會產生 布林(Boolean)陣列

import numpy as np

x = np.array([1, 2, 3, 4, 5])

print(x > 3)   # [False False False  True  True]
print(x == 2)  # [False  True False False False]

這個布林陣列可用於:

  • 遮罩(mask),挑選特定元素
  • 計算滿足條件的元素個數

範例:

x = np.array([1, -2, 3, 0, -5, 6])

mask = x > 0
print(mask)          # [ True False  True False False  True]

# 只取正數
pos = x[mask]
print(pos)           # [1 3 6]

# 正數個數
num_pos = np.sum(mask)   # True 1, False 0
print(num_pos)           # 3

在深度學習中常見的應用:

  • 準確率(accuracy):預測正確的樣本比例
  • 條件篩選:只將滿足條件的樣本納入損失計算

PyTorch 也使用相同的模式。


4. 聚合函數:np.sumnp.meannp.maxnp.min

4.1 無 axis:對整個陣列計算

基本形式是對「整個陣列」求和、平均、最大值、最小值。

import numpy as np

x = np.array([1, 2, 3, 4])

print(np.sum(x))   # 10
print(np.mean(x))  # 2.5
print(np.max(x))   # 4
print(np.min(x))   # 1

對二維以上陣列亦同理。

X = np.array([[1, 2, 3],
              [4, 5, 6]])

print(np.sum(X))   # 21
print(np.mean(X))  # 3.5

在深度學習中:

  • 整個批次或整個資料集的平均損失
  • 整體資料的平均/標準差後做正規化

5. 理解 axis 概念

axis 用來指定「沿哪個軸進行運算」。

  • 未指定 axis → 對所有元素計算
  • 指定 axis → 沿該軸縮減(reduce),保留其餘軸

5.1 以二維陣列為例

import numpy as np

X = np.array([[1, 2, 3],
              [4, 5, 6]])  # shape: (2, 3)

axis=0:按列(column)計算

print(np.sum(X, axis=0))   # [5 7 9]
print(np.mean(X, axis=0))  # [2.5 3.5 4.5]
  • 結果 shape: (3,)
  • 每列的和/平均
  • 在深度學習中常用於 計算每個特徵的平均/標準差

axis=1:按行(row)計算

print(np.sum(X, axis=1))   # [ 6 15]
print(np.mean(X, axis=1))  # [2. 5.]
  • 結果 shape: (2,)
  • 每行的和/平均
  • 每個樣本的總和/平均 相關

5.2 深度學習中常見的 axis 範例

假設批次資料為:

# (batch_size, feature_dim)
X = np.random.randn(32, 10)  # 32 個樣本,10 維特徵
  1. 每個特徵的平均(feature‑wise mean)
mean_per_feature = np.mean(X, axis=0)  # shape: (10,)
  • axis=0 → 在批次方向縮減
  • 每列(feature)的平均
  1. 每個樣本的平均(sample‑wise mean)
mean_per_sample = np.mean(X, axis=1)  # shape: (32,)
  • axis=1 → 在特徵方向縮減
  • 每行(sample)的平均

5.3 圖像批次中的 axis

以 PyTorch 樣式 (N, C, H, W) 為例。

# N=32, C=3 (RGB), H=W=64
images = np.random.randn(32, 3, 64, 64)
  1. 整個批次的像素最大值
global_max = np.max(images)  # scalar
  1. 通道平均(RGB 通道平均)
# axis=(0, 2, 3): 只保留通道
channel_mean = np.mean(images, axis=(0, 2, 3))  # shape: (3,)

這是 通道正規化 時常用的模式。


6. 聚合函數 + 比較運算:常見模式

6.1 準確率(accuracy)計算

以二元分類為例:

import numpy as np

# 預測(假設為 0~1 的機率)
pred = np.array([0.2, 0.8, 0.9, 0.3])
# 真實標籤(0 或 1)
target = np.array([0, 1, 1, 0])

# 以 0.5 為閾值產生預測類別
pred_label = (pred > 0.5).astype(np.int32)   # [0 1 1 0]

# 正確的為 True
correct = (pred_label == target)             # [ True True True True]

accuracy = np.mean(correct)                  # True=1, False=0
print(accuracy)  # 1.0
  • 比較運算 → 布林陣列
  • mean 取得準確率

PyTorch 也可用相同方式實作。

6.2 使用遮罩的損失計算

loss = np.array([0.1, 0.5, 0.2, 0.9])
mask = np.array([True, False, True, False])

masked_loss = loss[mask]      # [0.1, 0.2]
mean_loss = np.mean(masked_loss)
print(mean_loss)              # 0.15000000000000002

當只想將滿足條件的樣本納入損失時,常結合 遮罩 + 聚合函數


7. 小結:今天學到的基礎運算

以下是本篇的重點整理:

  1. 算術運算(+-*/** * 基本為 元素級 運算 * 與標量同樣自然
  2. 比較運算(><>=<===!= * 產生布林陣列 * 可作為遮罩,用於過濾、計數、準確率等
  3. 聚合函數(np.sumnp.meannp.maxnp.min * 無 axis 時對整個陣列計算 * 指定 axis 可選擇縮減哪個軸
  4. axis 概念 * 2D:axis=0 → 列,axis=1 → 行 * 深度學習:(batch, feature)(N, C, H, W) 等結構中頻繁使用 * 方便計算 feature‑wise、sample‑wise、channel‑wise 統計

熟悉這些基礎運算後,你就能把數學公式「直接」轉成 NumPy / PyTorch 代碼,並在實際模型中快速實現損失、準確率、正規化等核心計算。

image