TensorFlow med Python – cheat sheet

Neurale netværk med Keras · træning, evaluering og forudsigelse

TensorFlow er Googles maskinlæringsbibliotek. I praksis bruger man næsten altid Keras-API'et (tf.keras), som er den nemme vej. Kræver Python-grundlaget – se Python cheat sheet'et først.

1. Installation og start

# I terminalen:
#   pip install tensorflow

import tensorflow as tf
import numpy as np

print(tf.__version__)  # tjek at det virker

import tensorflow as tf er standard-aliaset. numpy (np) bruges til data – TensorFlow arbejder med numpy-arrays.

2. Data: klargør til træning

# Data skal være tal i arrays
# X = input (features), y = svar (labels)
X = np.array([[0], [1], [2], [3]])
y = np.array([0, 2, 4, 6])     # y = 2x

# Normalisér: del ind i træning/test
X_train, X_test = X[:3], X[3:]
y_train, y_test = y[:3], y[3:]

Normalisering hjælper: skalér store tal ned, fx billed-pixels fra 0-255 til 0-1 (pixels / 255.0). Hold altid noget data tilbage som test, som modellen aldrig ser under træning.

3. Byg modellen (Sequential)

model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(1,)),
    tf.keras.layers.Dense(8, activation="relu"),
    tf.keras.layers.Dense(1)
])

Sequential = lagene står i rækkefølge. Dense = fuldt forbundet lag. Første lag skal kende shape (formen af ét input-eksempel). activation="relu" giver ikke-linearitet; uden den kan modellen kun lære lige linjer.

4. Klassifikation: mange klasser

# 10 klasser (fx cifre 0-9)
model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(784,)),
    tf.keras.layers.Dense(128, activation="relu"),
    tf.keras.layers.Dense(10, activation="softmax")
])

# Labels som heltal → sparse_categorical
model.compile(
    optimizer="adam",
    loss="sparse_categorical_crossentropy",
    metrics=["accuracy"]
)
Regel: sidste lag = antal klasser. softmax giver sandsynligheder der summer til 1. Brug sparse_categorical_crossentropy når labels er heltal (0, 1, 2…), og categorical_crossentropy når de er one-hot vektorer.

5. Træn modellen

historik = model.fit(
    X_train, y_train,
    epochs=50,           # gennemløb af data
    batch_size=32,       # eksempler ad gangen
    validation_split=0.2 # 20% til kontrol
)

# Se hvad der skete
print(historik.history["loss"])
print(historik.history["val_accuracy"])

epochs = hvor mange gange hele træningssættet gennemløbes. validation_split holder en del af træningsdata tilbage til løbende kontrol. Faldende loss = modellen lærer.

6. Evaluer og forudsig

# Test på data modellen ALDRIG har set
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f"Test-nøjagtighed: {test_acc:.1%}")

# Brug modellen
gæt = model.predict(np.array([[5]]))
print(gæt)               # fx [[10.2]]

# Klassifikation: find højeste sandsynlighed
sandsynligheder = model.predict(X_test[:1])
klasse = np.argmax(sandsynligheder)  # fx 7

7. Gem og indlæs modellen

# Gem hele modellen
model.save("min_model.keras")

# Indlæs senere (helt færdigtrænet)
model = tf.keras.models.load_model(
    "min_model.keras")
gæt = model.predict(np.array([[5]]))

Træning kan tage lang tid – gem altid modellen bagefter, så du kan bruge den uden at træne igen.

8. Overfitting: når modellen pynter

model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(784,)),
    tf.keras.layers.Dense(128, activation="relu"),
    tf.keras.layers.Dropout(0.2),   # sluk 20% tilfældigt
    tf.keras.layers.Dense(10, activation="softmax")
])

# Stop når modellen ikke bliver bedre
tidlig_stop = tf.keras.callbacks.EarlyStopping(
    patience=5, restore_best_weights=True)

model.fit(X_train, y_train, epochs=100,
          validation_split=0.2,
          callbacks=[tidlig_stop])

Overfitting = modellen har lært træningsdata udenad men fejler på nye data. Symptom: loss falder, men val_loss stiger. Modgifte: Dropout, EarlyStopping, eller mere data.

9. Billeder: convolutional netværk

model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(28, 28, 1)),
    tf.keras.layers.Conv2D(32, 3, activation="relu"),
    tf.keras.layers.MaxPooling2D(2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(10, activation="softmax")
])

Conv2D finder mønstre (kanter, former), MaxPooling2D formindsker, Flatten laver billedet om til en flad liste til Dense-lagene. Bruges til alt med billeder.

10. Hurtig oversigt

tf.keras.Sequential([...])byg model lag for lag Dense(n, activation)fuldt forbundet lag model.compile(...)vælg optimizer + loss model.fit(X, y, epochs)træn modellen model.evaluate(X, y)test på nye data model.predict(X)forudsig model.save(fil)gem trænet model np.argmax(pred)klasse med højest sandsynlighed

11. Typiske faldgruber