yaxlib
Un mini-framework de réseaux de neurones pour jax.
Documentation —
distribution yaxlib, import yax :
pip install yaxlib # ou : pip install <url du wheel>
import jax.random as jr
import yax
model = yax.MLP((2, 32, 32, 1), "tanh", jr.key(0))
Pourquoi yax ?
L'atout de yax est la simplicité : rester au plus près du jax de base. La
hiérarchie des frameworks se mesure en concepts additionnels — flax introduit
ses collections de variables, ses scopes et son cycle init/apply ; equinox
réduit cela à des modules-pytrees, mais y ajoute sa machinerie de filtrage
(filter_grad, partition/combine) et son drapeau inference dans les
feuilles. yax n'ajoute que deux idées : le module-pytree strict (les
feuilles sont exactement les paramètres, tout le reste est statique) et la
signature apply(x, rkey). Conséquence : jax.grad, jax.jit,
jax.vmap et optax s'utilisent nus, exactement comme dans la documentation
jax — rien à désapprendre, rien à envelopper.
Né pour un cours, yax est dimensionné pour servir au-delà : des modèles de recherche compacts, lisibles, et un périmètre volontairement réduit — ce qui n'y est pas se code en jax ordinaire, sans friction.
Principes
- Un modèle est un pytree.
yax.Modulerange les tableaux dans les feuilles et tout le reste (yax.StaticField) dans la structure :jax.grad(loss)(model),jax.jitetoptimizer.init(model)acceptent le modèle tel quel, sans machinerie de filtrage. Les champs dynamiques ne peuvent contenir que des tableaux jax, des sous-modules ou des conteneurs de ceux-ci — tout écart est une erreur immédiate et explicite à la construction. UnStaticFieldpeut contenir un tableau : il devient une constante du modèle (encodage positionnel, grille figée), invisible pour les gradients. - Signature uniforme
apply(x, rkey=None), écrite pour UN échantillon (le batch vient dejax.vmap).rkeyest une source d'aléatoire (dropout, échantillonnage), jamais un mode. - Le mode se bascule par
model = model.set_inference(True/False)(récursif, immuable). LeTrainerinclus dansyaxentraîne enFalse, valide et rend le meilleur modèle enTrue. Maisyaxpeut aussi s'utiliser sans ceTrainer. - Immutabilité : on « modifie » un module avec
yax.tree_at.
Contenu
yax.layers: Linear, MLP, Dropout, PReLU, LayerNorm, Embedding, Conv_nd (convolution 1D/2D/3D...), RNN_layer (GRU/LSTM), MultiHeadAttention, TransformerBlock, MessagePassing_layer, encodage positionnel.yax.models: UNet_nd et FNO_nd (opérateur neuronal de Fourier — le même modèle s'évalue à n'importe quelle résolution), tous deux en dimension quelconque ; MiniYOLO ; et trois modèles génératifs — VAE, RealNVP (flot normalisant à vraisemblance exacte), Diffusion (DDPM) — compacts et lisibles, chacun avec sa perte et sa méthode d'échantillonnage.yax.training: Trainer (checkpoints parmother_folder), History, pertes (loss_fn(model, x, y, rkey)), samplers. Le Trainer ne connaît pas les données : une époque = un appel au sampler puis une validation.DatasetSampler(X, Y, batch_size)pour un jeu fini (mélangé sans remise),FunctionSampler(f, nb_batches)pour des batchs générés — physique, PINN, Ritz, oùyvautNone. La validation est un batch fixe(x_val, y_val)ou un sampler appelé avec une clé constante (même jeu à toutes les époques). L'optimiseur est dans la config, sous forme de données :optimizerest un nom du dictionnaireyax.OPTIMIZERS("adam"par défaut,"adamw","lion","sgd"...) etoptimizer_optionsses réglages —TrainConfig(5e-3, 300, optimizer="adamw", optimizer_options={"weight_decay": 0.1}). La config étant enregistrée avec le run, celui-ci dit à lui seul comment il a été entraîné. Le Trainer fabrique le schedule (seul à connaître le nombre de pas) et le passe au constructeur.optimizer="lbfgs"marche aussi : le Trainer fournit à tous les optimiseurs la valeur de la perte et la fonction qui la calcule — ce que réclame une recherche linéaire, et que les autres ignorent. Rien à réécrire côté utilisateur ; il faut en revanche un seul batch, fixe (DatasetSampler(X, Y, len(X))). Enfinpatiencearrête la boucle après N époques sans record de validation — un budget épargné, pas un gain de qualité : le modèle rendu est de toute façon le meilleur.yax.image: augmentation différentiable et vmap-able.demos/: une démonstration synthétique par famille de modèles, qui converge en quelques secondes sur CPU.
Tests
pip install yaxlib[dev] # ajoute pytest
pytest tests/
Metadata
Release files for yaxlib 0.1.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| yaxlib-0.1.12.tar.gz | 150.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yaxlib-0.1.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 210.3 kB
Release files / yaxlib-0.1.12.tar.gz
| Download URL | yaxlib-0.1.12.tar.gz |
|---|---|
| Size | 150.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cd64199d51dfd8438b87b6c89c8b1f0baa22f4f413b28920325d3de653a17ca3
|
|
BLAKE2b-256 checksum How to use checksums |
e80e5960bead6ed072afa66d4b9d2be7420880b50c4e3b93f3ac764f1abdf71e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / yaxlib-0.1.12-py3-none-any.whl
| Download URL | yaxlib-0.1.12-py3-none-any.whl |
|---|---|
| Size | 59.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
76ed8f874ed8491be5ce091f203dd15ff0b64bb545bcfaeb9c193c881bee0054
|
|
BLAKE2b-256 checksum How to use checksums |
2dccd7ddf3e63e0a914b3779aa738d1b6dadd611ab76965c71541d317e46c247
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for yaxlib 0.1.12
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.