Skip to main content

Fundamentals

Master the core concepts of Flax NNX - how to build and manage neural network models.

What you'll learn
  • How nnx.Module works as a stateful Python class that holds parameters
  • The role of nnx.Param and why parameters are wrapped explicitly
  • How NNX manages trainable parameters, non-trainable variables, and RNG state
  • Why nnx.Rngs makes initialization reproducible
  • How these fundamentals carry over to vision, text, and advanced architectures

What You'll Learn

In this section, you'll learn the foundational concepts that apply to all Flax NNX models, regardless of whether you're building vision models, text models, or anything else.

Core Concepts

Your First Model - Start here!
Build your first neural network from scratch. Learn about modules, parameters, and the basic structure of NNX models.

Understanding State
Learn how NNX manages different types of state: trainable parameters, non-trainable variables, and RNG state.

Why Start Here?

These fundamentals are the building blocks for everything else:

  • Every model type (vision, text, etc.) uses the same module system
  • Understanding state is crucial for proper training and checkpointing
  • These concepts translate directly to advanced architectures

Quick Example

Here's what you'll be able to build after this section:

from flax import nnx
import jax.numpy as jnp

# Define a model
class MyModel(nnx.Module):
def __init__(self, *, rngs: nnx.Rngs):
self.layer1 = nnx.Linear(784, 256, rngs=rngs)
self.layer2 = nnx.Linear(256, 10, rngs=rngs)

def __call__(self, x):
x = self.layer1(x)
x = nnx.relu(x)
return self.layer2(x)

# Create and use it
model = MyModel(rngs=nnx.Rngs(params=0))
x = jnp.ones((32, 784))
output = model(x) # Shape: (32, 10)

Simple, explicit, and powerful!

Next steps