The Python ML world isn't one tool — it's a stack of frameworks that each own a layer. scikit-learn for classical ML, PyTorch for deep-learning research, TensorFlow/Keras for production, JAX for high-performance numerics, and Hugging Face sitting on top with pretrained models. Knowing which does what saves you from forcing the wrong tool onto the job.
Where you meet it
- A tabular dataset and a deadline —
sklearn'sfit/predictin three lines. - Training or fine-tuning a neural network — PyTorch, Keras, or JAX.
- "Just summarize this text" — a Hugging Face
pipeline()downloading a pretrained model. - Serving a model to real traffic — TensorFlow Serving, TorchServe, or an inference engine like vLLM.
What it does
Each framework turns math into runnable models, but they aim at different jobs. scikit-learn gives you classical algorithms — random forests, gradient boosting, k-means — with a uniform API. PyTorch, TensorFlow/Keras and JAX are deep-learning engines: they build and train neural networks on GPUs. Hugging Face doesn't replace them — it ships pretrained transformers that run on top of PyTorch, TensorFlow or JAX.
Pick the framework to fit the task, not the hype — a random forest on tabular data beats the transformer you didn't need.
How it works
The deep-learning frameworks share three foundations:
- Tensors — n-dimensional arrays (like NumPy's, but GPU-aware) that carry all the data.
- Autograd — automatic differentiation: the framework records every operation and computes gradients for you, so backprop is free.
- GPU/accelerator execution — the same code runs on CPU, GPU or TPU.
On those foundations each one specializes. scikit-learn = classical ML on small-to-medium tabular data; no autograd, no GPUs by default. PyTorch = deep learning and research; its dynamic (define-by-run) graphs make it Pythonic and easy to debug. TensorFlow/Keras = the same deep learning with a strong path to production and deployment (Keras 3 is the high-level API and now runs on TensorFlow, JAX or PyTorch; TF Serving, TF Lite, TF.js for shipping). JAX = a functional, NumPy-style API where transformations like grad, jit and vmap compose, compiled via XLA for top performance. Hugging Face = the model-definition layer on top: transformers centralizes architectures and gives you 1M+ pretrained checkpoints, compatible across PyTorch, TF and JAX.
# classical ML — scikit-learn
from sklearn.ensemble import RandomForestClassifier
m = RandomForestClassifier().fit(X, y)
m.predict(X_new)
# pretrained transformer — Hugging Face on top of PyTorch
from transformers import pipeline
clf = pipeline("sentiment-analysis")
clf("I love this stack") # → label + score
Watch out
- Pick the framework to fit the task, not the hype. A random forest on tabular data beats a transformer you don't need.
- scikit-learn is not deep learning. It has no autograd and no real GPU training — reach for PyTorch/TF/JAX when you need neural nets.
- Version & CUDA compatibility bites. PyTorch/TF builds are tied to specific CUDA/cuDNN versions; mismatches are the classic install failure.
- Hugging Face builds on PyTorch/TF/JAX — it's a layer, not a competitor. You still need the backend underneath.
- Don't let tutorials push you toward the heaviest tool — start simple, scale up only when the data demands it.
Go deeper
Die Python-ML-Welt ist nicht ein Tool — sie ist ein Stapel aus Frameworks, die je eine Schicht besetzen. scikit-learn fürs klassische ML, PyTorch für Deep-Learning-Forschung, TensorFlow/Keras für Produktion, JAX für Hochleistungs-Numerik, und Hugging Face obendrauf mit vortrainierten Modellen. Wer weiß, was was tut, zwingt nicht das falsche Werkzeug auf die Aufgabe.
Wo es vorkommt
- Ein Tabellen-Datensatz und eine Deadline —
sklearnmitfit/predictin drei Zeilen. - Ein neuronales Netz trainieren oder feintunen — PyTorch, Keras oder JAX.
- "Fass diesen Text zusammen" — eine Hugging-Face-
pipeline(), die ein vortrainiertes Modell lädt. - Ein Modell unter echter Last ausliefern — TensorFlow Serving, TorchServe oder eine Inference-Engine wie vLLM.
Was es tut
Jedes Framework macht aus Mathematik lauffähige Modelle, zielt aber auf unterschiedliche Aufgaben. scikit-learn liefert klassische Algorithmen — Random Forests, Gradient Boosting, k-Means — mit einheitlicher API. PyTorch, TensorFlow/Keras und JAX sind Deep-Learning-Engines: sie bauen und trainieren neuronale Netze auf GPUs. Hugging Face ersetzt sie nicht — es liefert vortrainierte Transformer, die auf PyTorch, TensorFlow oder JAX laufen.
Wähl das Framework nach der Aufgabe, nicht nach dem Hype — ein Random Forest auf Tabellendaten schlägt den Transformer, den du nicht brauchtest.
Wie es funktioniert
Die Deep-Learning-Frameworks teilen drei Grundlagen:
- Tensoren — n-dimensionale Arrays (wie NumPy, aber GPU-fähig), die alle Daten tragen.
- Autograd — automatische Differenziation: das Framework zeichnet jede Operation auf und berechnet die Gradienten für dich, Backpropagation gibt es geschenkt.
- GPU-/Accelerator-Ausführung — derselbe Code läuft auf CPU, GPU oder TPU.
Darauf spezialisiert sich jedes. scikit-learn = klassisches ML auf kleinen bis mittleren Tabellendaten; kein Autograd, standardmäßig keine GPUs. PyTorch = Deep Learning und Forschung; seine dynamischen (define-by-run) Graphen machen es pythonisch und gut debugbar. TensorFlow/Keras = dasselbe Deep Learning mit starkem Weg in Produktion und Deployment (Keras 3 ist die High-Level-API und läuft heute auf TensorFlow, JAX oder PyTorch; TF Serving, TF Lite, TF.js zum Ausliefern). JAX = eine funktionale, NumPy-artige API, in der Transformationen wie grad, jit und vmap komponierbar sind, via XLA für Spitzenleistung kompiliert. Hugging Face = die Modell-Definitions-Schicht obendrauf: transformers zentralisiert Architekturen und gibt dir über 1 Mio. vortrainierte Checkpoints, kompatibel über PyTorch, TF und JAX hinweg.
# klassisches ML — scikit-learn
from sklearn.ensemble import RandomForestClassifier
m = RandomForestClassifier().fit(X, y)
m.predict(X_new)
# vortrainierter Transformer — Hugging Face auf PyTorch
from transformers import pipeline
clf = pipeline("sentiment-analysis")
clf("Ich liebe diesen Stack") # → Label + Score
Worauf achten
- Wähle das Framework nach der Aufgabe, nicht nach dem Hype. Ein Random Forest auf Tabellendaten schlägt einen Transformer, den du nicht brauchst.
- scikit-learn ist kein Deep Learning. Es hat kein Autograd und kein echtes GPU-Training — für neuronale Netze greifst du zu PyTorch/TF/JAX.
- Version- & CUDA-Kompatibilität beißt. PyTorch/TF-Builds hängen an bestimmten CUDA-/cuDNN-Versionen; Mismatches sind der klassische Installations-Fehler.
- Hugging Face baut auf PyTorch/TF/JAX auf — es ist eine Schicht, kein Konkurrent. Das Backend darunter brauchst du trotzdem.
- Lass dich von Tutorials nicht zum schwersten Tool treiben — fang einfach an, skaliere erst, wenn die Daten es verlangen.



