
developing-flax-models
by yonesuke
SKILL.md
SKILL.md
name: developing-flax-models description: A comprehensive guide for developing, training, and managing neural networks using Flax NNX. Use when defining models, managing state, or writing training loops.
Developing Flax Models
This skill helps you develop neural networks using Flax NNX, the object-oriented module system for JAX. Use this skill when you need to define models, handle state/randomness, or implement training loops.
Workflows
1. Implement a New Model
- Define Module: Subclass
nnx.Module. Define layers/parameters in__init__. - Handle Randomness: Pass
nnx.Rngsto__init__for weight initialization. Passrngsto__call__for stochastic operations (e.g., Dropout). - Sanity Check: Add a
if __name__ == "__main__":block to instantiate the model and run a dummy forward pass.
2. Implement a Training Loop
- Choose Strategy:
- Automatic (
nnx.jit): Easiest. Use@nnx.jiton your update function. Handles mutable state management automatically. - Functional (
nnx.split/nnx.merge): Use for advanced control or when interfacing with pure JAX transformations likescanorvmap(thoughnnx.vmapexists).
- Automatic (
- Define Loss: Write a loss function
loss_fn(model, batch). - Optimizer: Wrap the model with
nnx.Optimizer(model, tx, wrt=nnx.Param).[!WARNING] Crucial Change: As of Flax 0.11.0, the
wrtargument (e.g.,wrt=nnx.Param) is REQUIRED fornnx.Optimizer. Failure to include it will raise aTypeError.
Core Concepts (Reference)
Flax NNX (v2.0+) replaces the immutable, functional design of flax.linen with standard Python classes and mutable state, while maintaining JAX compatibility.
Key Differences
- Object-Oriented: Models are standard Python classes. You assign to
self.param. - Reference Semantics: Layers hold their parameters directly.
- Not Pytrees:
nnx.Moduleobjects are not Pytrees. You cannot pass them directly tojax.jit. You must usennx.jitor manually split/merge state.
Variable Types
NNX variables allow granular state management via "Collections".
nnx.Param: Trainable parameters (weights, biases).nnx.BatchStat: Batch normalization statistics (running mean/var).nnx.Rngs: Random Number Generator streams key management.nnx.Variable: Base class for custom state.
State Management
You can filter and manipulate state sets:
# Get only Parameters
params = nnx.state(model, nnx.Param)
# Get everything EXCEPT BatchStats
state = nnx.state(model, filter=nnx.All - nnx.BatchStat)
Examples
See examples.md for detailed code patterns mirrored from the scripts/ directory.
- Defining Modules: Basic layer structure.
- Randomness: Handling Dropout and stochastic layers.
- Training: Comparison of
nnx.jitvs Pure JAX loops. - Functional API: Using
vmapandsplit/merge.
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です