C.W.K.
Stream
Lesson 02 of 07 · published

TF, PyTorch, JAX — Where Each One Lives in 2026

~12 min · frameworks, comparison, ecosystem

Level 0Level 0
0 XP0/78 lessons0/17 achievements
0/100 XP to next level100 XP to go0% complete

Three frameworks, three jobs they do best

The deep learning landscape is no longer winner-takes-all. As of 2026, three major systems share the field, each owning a niche the others struggle in.

FrameworkOwnsPain Point
TensorFlow 2.xProduction deployment (TF Serving, TFLite/LiteRT, TF.js, Vertex AI)Slower research-paper turnaround than PyTorch
PyTorchResearch papers, HuggingFace ecosystem, dynamic graphsProduction deployment story is younger
JAXTPU-scale training, functional transforms (jit, grad, vmap, pmap)Deployment requires a jax2tf bridge

If you're fine-tuning an LLM the authors released on HuggingFace, you'll be in PyTorch. If you're shipping a phone app that needs on-device inference, you'll be in TensorFlow (TFLite). If you're training Gemini-class models on a TPU pod inside Google, you'll be in JAX. Most production teams use both TF and PyTorch — train where the ecosystem is friendliest, deploy where the runtime is most mature.

Keras 3 changes the calculus. Released late 2023, Keras 3 is a complete rewrite that runs as a high-level API on top of TF, PyTorch, and JAX. You write the model once, set os.environ["KERAS_BACKEND"], and it runs on whichever engine you point it at. The skill you build in this quest transfers across all three.

The honest pick: Don't pick a tribe. Treat the choice of backend as an infrastructure decision, not an identity. The model code that knows it's a model — Dense, Conv2D, attention — should be the same across all three.

Code

Keras 3 — 같은 model, 세 backend·python
import os
# KERAS_BACKEND must be set BEFORE importing keras. Hard rule.
os.environ["KERAS_BACKEND"] = "jax"   # or "tensorflow", "torch"

import keras
from keras import layers, ops

model = keras.Sequential([
    keras.Input(shape=(784,)),
    layers.Dense(128, activation='relu'),
    layers.Dense(10),
])

# Use keras.ops, NOT tf.* / jnp.* / torch.*, for backend-agnostic math.
x = ops.array([[1.0] * 784])
y = ops.softmax(model(x))
print(y.shape)  # (1, 10) on every backend

External links

Exercise

Browse paperswithcode.com for any computer-vision paper from the last 6 months. Note which framework the official implementation uses. Then check if a TF port exists. The gap you observe is the research-vs-production split this lesson is about.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.