multi-backend neural network computation with unified api
Provides a single high-level API for defining models and layers that transparently dispatches numerical computation to JAX, TensorFlow, PyTorch, or OpenVINO backends selected at import time via KERAS_BACKEND environment variable or ~/.keras/keras.json. The framework maintains a backend-agnostic source of truth in keras/src/ with generated public API surface in keras/api/, enabling seamless backend switching without code changes. Runtime dispatch follows two paths: symbolic execution during model construction (shape/dtype inference via compute_output_spec on KerasTensor objects) and eager execution during training/inference (forwarded to active backend implementation).
Unique: Implements true multi-backend abstraction through keras/src/ source-of-truth architecture with auto-generated keras/api/ public surface, enabling compile-time API consistency across backends while maintaining separate backend-specific implementations in keras/src/backend/{jax,torch,tensorflow,openvino}/ directories. Uses symbolic execution path (compute_output_spec) for shape inference and eager path for actual computation, avoiding backend lock-in.
vs alternatives: Unlike TensorFlow (TF-only) or PyTorch (PyTorch-only), Keras 3 provides true write-once-run-anywhere semantics with equal support for JAX, TensorFlow, and PyTorch through a unified API rather than framework-specific wrappers.
backend-agnostic layer and operation definitions
Defines neural network layers (Dense, Conv2D, LSTM, etc.) and operations (numpy-compatible ops, neural network ops, core backend ops) in keras/src/ that are completely decoupled from backend implementation. Each layer inherits from a base Layer class that implements compute_output_spec() for symbolic shape/dtype inference and call() for eager execution. Backend-specific implementations are injected at runtime through the active backend module, allowing the same layer code to execute on JAX, TensorFlow, PyTorch, or OpenVINO without modification.
Unique: Implements layers as backend-agnostic Python classes with dual-path execution: symbolic path uses compute_output_spec() to infer output shapes/dtypes without computation, eager path delegates to backend-specific implementations via keras.ops.* namespace. Layer definitions in keras/src/layers/ contain zero backend-specific code; all dispatch happens through the ops module.
vs alternatives: Compared to PyTorch (backend-specific) or TensorFlow (TF-centric), Keras layers achieve true backend independence by separating layer logic from backend implementation, allowing identical layer code to run on JAX, PyTorch, or TensorFlow without conditional logic.
callback system for training monitoring and control
Provides a callback system (keras/src/callbacks/) that enables monitoring and controlling training through hooks at various training stages: on_epoch_begin, on_epoch_end, on_batch_begin, on_batch_end, on_train_begin, on_train_end. Built-in callbacks include EarlyStopping (stop training when validation metric plateaus), ModelCheckpoint (save best model), ReduceLROnPlateau (reduce learning rate), TensorBoard (visualization), and CSVLogger (log metrics). Callbacks are executed synchronously during training and have access to training state (epoch, batch, metrics, model weights).
Unique: Implements callback system in keras/src/callbacks/ with hooks at multiple training stages (epoch/batch begin/end) and built-in callbacks for common use cases (EarlyStopping, ModelCheckpoint, ReduceLROnPlateau). Callbacks are executed synchronously during training with access to training state, enabling monitoring and control without modifying training loop code.
vs alternatives: Unlike PyTorch (no built-in callback system) or TensorFlow (callbacks are TensorFlow-specific), Keras provides a unified callback system across all backends with built-in callbacks for common use cases like early stopping and model checkpointing.
metric computation and tracking during training
Provides a metric system (keras/src/metrics/) for computing and tracking statistics during training and evaluation. Metrics are stateful objects that accumulate values across batches and compute aggregate statistics (accuracy, AUC, precision, recall, etc.). Metrics are compiled into models via model.compile(metrics=[...]) and automatically computed during training/evaluation. The framework provides built-in metrics for classification, regression, and ranking tasks. Metrics support both eager and graph execution modes and work identically across all backends.
Unique: Implements metrics as stateful objects in keras/src/metrics/ that accumulate values across batches and compute aggregate statistics. Metrics are compiled into models and automatically computed during training/evaluation, with support for both eager and graph execution modes across all backends.
vs alternatives: Unlike PyTorch (requires manual metric computation) or TensorFlow (metrics are TensorFlow-specific), Keras provides a unified metric system across all backends with built-in metrics for common use cases and automatic computation during training.
optimizer implementations with learning rate scheduling
Provides optimizer implementations (keras/src/optimizers/) including SGD, Adam, RMSprop, and others that update model weights based on gradients. Optimizers are backend-agnostic and delegate gradient updates to backend-specific implementations. Learning rate scheduling is supported through LearningRateSchedule objects that adjust learning rate during training based on epoch or batch number. Optimizers support momentum, weight decay, gradient clipping, and other advanced features. All optimizers work identically across backends.
Unique: Implements optimizers as backend-agnostic objects in keras/src/optimizers/ that delegate gradient updates to backend-specific implementations. Learning rate scheduling is supported through LearningRateSchedule objects that adjust learning rate during training, with all optimizers working identically across backends.
vs alternatives: Unlike PyTorch (requires manual learning rate scheduling) or TensorFlow (optimizers are TensorFlow-specific), Keras provides a unified optimizer system across all backends with built-in learning rate scheduling and advanced features like gradient clipping and weight decay.
loss function computation and gradient backpropagation
Provides loss functions (keras/src/losses/) for training objectives including classification losses (categorical_crossentropy, sparse_categorical_crossentropy), regression losses (mean_squared_error, mean_absolute_error), and ranking losses. Loss functions are compiled into models via model.compile(loss=...) and automatically computed during training. The framework automatically computes gradients with respect to loss using the active backend's autodiff system (JAX's jax.grad, PyTorch's autograd, TensorFlow's GradientTape). Loss computation and gradient backpropagation are handled transparently without user code.
Unique: Implements loss functions as backend-agnostic objects in keras/src/losses/ with automatic gradient computation through the active backend's autodiff system. Loss computation and backpropagation are handled transparently during training without user code, leveraging JAX's jax.grad, PyTorch's autograd, or TensorFlow's GradientTape.
vs alternatives: Unlike PyTorch (requires manual loss computation and backpropagation) or TensorFlow (loss functions are TensorFlow-specific), Keras provides a unified loss system across all backends with automatic gradient computation and built-in loss functions for common use cases.
model introspection and weight access
Provides APIs for inspecting model structure and accessing weights: model.summary() displays layer structure and parameter counts, model.get_weights() returns all weights as NumPy arrays, model.set_weights() updates weights, model.get_config() returns model configuration as JSON, model.get_layer() retrieves specific layers by name. These APIs work identically across all backends and enable model analysis, weight manipulation, and configuration serialization without backend-specific code.
Unique: Implements model introspection APIs in keras/src/models/model.py that work identically across all backends, providing access to model structure, weights, and configuration without backend-specific code. Weight access converts from backend-native tensors to NumPy arrays, enabling framework-agnostic weight manipulation.
vs alternatives: Unlike PyTorch (requires framework-specific APIs like state_dict()) or TensorFlow (requires TensorFlow-specific APIs), Keras provides unified introspection APIs across all backends with automatic conversion to NumPy for framework-agnostic weight access.
numpy-compatible operation api with backend dispatch
Exposes a NumPy-compatible operation API (keras.ops.numpy.*) that mirrors NumPy's function signatures and behavior while dispatching to backend-specific implementations. Operations include array manipulation (reshape, concatenate, transpose), mathematical functions (sin, exp, matmul), and linear algebra (linalg.solve, linalg.eigh). The dispatch mechanism routes each operation call to the active backend's implementation in keras/src/backend/{backend}/numpy.py, ensuring numerical consistency across backends while leveraging backend-specific optimizations.
Unique: Implements NumPy API compatibility layer that maps NumPy function signatures to backend-specific implementations without requiring users to learn backend APIs. Each operation in keras/ops/numpy/ delegates to backend-specific versions in keras/src/backend/{jax,torch,tensorflow,openvino}/numpy.py, maintaining API consistency while preserving backend optimizations.
vs alternatives: Unlike raw JAX/PyTorch/TensorFlow APIs (which require learning framework-specific syntax), Keras ops.numpy provides familiar NumPy semantics across all backends; unlike NumPy itself, it supports automatic differentiation and GPU acceleration through any backend.
+7 more capabilities