NumPy‑basisbewerkingen voor deep learning: +, -, *, /, **, vergelijkingen, sum/mean/max/min, axis

1. Waarom moeten we eerst de basisbewerkingen leren?



In deep learning komt alles uiteindelijk neer op:

  • invoer/gewichten optellen (+)
  • vermenigvuldigen (*, matrixproduct)
  • een niet‑lineaire functie toepassen (**, relu, sigmoid, enz.)
  • de loss berekenen en vervolgens
  • het gemiddelde (mean) nemen of
  • de som (sum) berekenen

PyTorch‑tensorbewerkingen volgen exact de stijl van NumPy‑basisbewerkingen, dus als je de intuïtie in NumPy opdoet, zie je de deep‑learning‑formules meteen duidelijker.


2. Element‑wise aritmetische bewerkingen: +, -, *, /, **

NumPy‑arraybewerkingen zijn 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]
  • Arrays van dezelfde lengte: element‑wise
  • 2‑D, 3‑D arrays: ook element‑wise op dezelfde posities

2.1 Werken met scalars

Werken met een enkele scalar is net zo eenvoudig.

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]

Deze “zelfde waarde toevoegen/verdubbelen” wordt vaak gebruikt voor normalisatie, scaling en bias‑toevoeging.

PyTorch‑tensors werken precies hetzelfde. x_t + y_t, x_t * 2, x_t ** 2 zijn vrijwel identiek.


3. Vergelijkingsbewerkingen: >, <, >=, <=, ==, !=



Een vergelijking tussen NumPy‑arrays levert een Boolean‑array op.

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]

Deze Boolean‑array kan:

  • als masker gebruikt worden om specifieke elementen te selecteren
  • het aantal elementen dat aan een voorwaarde voldoet tellen

Voorbeeld:

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

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

# Positieve waarden
pos = x[mask]
print(pos)           # [1 3 6]

# Aantal positieve waarden
num_pos = np.sum(mask)   # True wordt 1, False 0
print(num_pos)           # 3

In deep learning gebruiken we dit voor:

  • de accuracy (percentage correcte voorspellingen)
  • alleen de verliezen op bepaalde posities meenemen

PyTorch volgt hetzelfde patroon.


4. Aggregatiefuncties: np.sum, np.mean, np.max, np.min

4.1 Zonder axis: berekening over het geheel

Standaard berekent men de som, het gemiddelde, het maximum en het minimum over het volledige array.

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

Ook voor 2‑D of hogere arrays geldt hetzelfde.

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

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

In deep learning:

  • gemiddelde loss over een hele batch
  • gemiddelde en standaardafwijking van alle data voor normalisatie

5. Het begrip axis

axis bepaalt over welke as de bewerking wordt uitgevoerd.

  • Geen axis → berekening over alle elementen
  • axis opgegeven → de bewerking wordt uitgevoerd langs die as, waardoor die as wordt “gereduceerd” en de overige as(sen) behouden blijven

5.1 Voorbeeld met 2‑D

import numpy as np

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

axis=0: berekening per kolom

print(np.sum(X, axis=0))   # [5 7 9]
print(np.mean(X, axis=0))  # [2.5 3.5 4.5]
  • Resultaat shape: (3,)
  • Gemiddelde/som per kolom – vaak gebruikt voor feature‑wise statistieken

axis=1: berekening per rij

print(np.sum(X, axis=1))   # [ 6 15]
print(np.mean(X, axis=1))  # [2. 5.]
  • Resultaat shape: (2,)
  • Gemiddelde/som per rij – vaak gebruikt voor sample‑wise statistieken

5.2 Veelvoorkomende axis‑scenario’s in deep learning

Stel je een batch hebt met vorm (batch_size, feature_dim).

# (batch_size, feature_dim)
X = np.random.randn(32, 10)  # 32 samples, 10 features
  1. Feature‑wise gemiddelde
mean_per_feature = np.mean(X, axis=0)  # shape: (10,)
  • axis=0 → reduce over batch
  1. Sample‑wise gemiddelde
mean_per_sample = np.mean(X, axis=1)  # shape: (32,)
  • axis=1 → reduce over features

5.3 axis bij een batch van afbeeldingen

Een afbeelding‑batch in PyTorch‑stijl (N, C, H, W).

# N=32, C=3 (RGB), H=W=64
images = np.random.randn(32, 3, 64, 64)

Voorbeeld:

  1. Globale maximale pixelwaarde
global_max = np.max(images)  # scalar
  1. Gemiddelde per kanaal (RGB)
# axis=(0, 2, 3): reduce over batch, height, width
channel_mean = np.mean(images, axis=(0, 2, 3))  # shape: (3,)

Dit patroon wordt vaak gebruikt voor kanaal‑wise normalisatie.


6. Aggregatiefuncties + vergelijkingen: veelgebruikte patronen

6.1 Accuracy berekenen

Voor een binaire classificatie:

import numpy as np

# voorspellingen (0‑1‑probabiliteit)
pred = np.array([0.2, 0.8, 0.9, 0.3])
# echte labels (0 of 1)
target = np.array([0, 1, 1, 0])

# voorspelde klasse op basis van 0.5
pred_label = (pred > 0.5).astype(np.int32)   # [0 1 1 0]

# correcte voorspellingen
correct = (pred_label == target)             # [ True True True True]

accuracy = np.mean(correct)                  # True=1, False=0
print(accuracy)  # 1.0

Vergelijking → Boolean‑array → mean geeft de accuracy.

PyTorch gebruikt vrijwel dezelfde code.

6.2 Verlies berekenen met een masker

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

Dit patroon – masker + aggregatie – is erg gebruikelijk.


7. Samenvatting: basisbewerkingen die we vandaag hebben behandeld

  1. Aritmetische bewerkingen (+, -, *, /, **) * Element‑wise * Werkt ook met scalars
  2. Vergelijkingsbewerkingen (>, <, >=, <=, ==, !=) * Resultaat: Boolean‑array * Gebruik als masker voor filtering, telling, accuracy, etc.
  3. Aggregatiefuncties (np.sum, np.mean, np.max, np.min) * Zonder axis: over het geheel * Met axis: reduce over een as
  4. axis concept * axis=0: kolom‑wise (feature‑wise) * axis=1: rij‑wise (sample‑wise) * Essentieel voor (batch, feature), (N, C, H, W)

Door vertrouwd te raken met deze basisbewerkingen kun je:

  • loss, accuracy, statistieken direct in NumPy/PyTorch schrijven
  • complexe tensor‑bewerkingen minder vreemd vinden

image