Releases: keras-team/keras
Keras 3.8.0
New: OpenVINO backend
OpenVINO is now available as an infererence-only Keras backend. You can start using it by setting the backend field to "openvino" in your keras.json config file.
OpenVINO is a deep learning inference-only framework tailored for CPU (x86, ARM), certain GPUs (OpenCL capable, integrated and discrete) and certain AI accelerators (Intel NPU).
Because OpenVINO does not support gradients, you cannot use it for training (e.g. model.fit()) -- only inference. You can train your models with the JAX/TensorFlow/PyTorch backends, and when trained, reload them with the OpenVINO backend for inference on a target device supported by OpenVINO.
New: ONNX model export
You can now export your Keras models to the ONNX format from the JAX, TensorFlow, and PyTorch backends.
Just pass format="onnx" in your model.export() call:
# Export the model as a ONNX artifact
model.export("path/to/location", format="onnx")
# Load the artifact in a different process/environment
ort_session = onnxruntime.InferenceSession("path/to/location")
# Run inference
ort_inputs = {
k.name: v for k, v in zip(ort_session.get_inputs(), input_data)
}
predictions = ort_session.run(None, ort_inputs)New: Scikit-Learn API compatibility interface
It's now possible to easily integrate Keras models into Sciki-Learn pipelines! The following wrapper classes are available:
keras.wrappers.SKLearnClassifier: implements the sklearnClassifierAPIkeras.wrappers.SKLearnRegressor: implements the sklearnRegressorAPIkeras.wrappers.SKLearnTransformer: implements the sklearnTransformerAPI
Other feature additions
- Add new ops:
- Add
keras.ops.diagflat - Add
keras.ops.unravel_index
- Add
- Add new activations:
- Add
sparse_plusactivation - Add
sparsemaxactivation
- Add
- Add new image augmentation and preprocessing layers:
- Add
keras.layers.RandAugment - Add
keras.layers.Equalization - Add
keras.layers.MixUp - Add
keras.layers.RandomHue - Add
keras.layers.RandomGrayscale - Add
keras.layers.RandomSaturation - Add
keras.layers.RandomColorJitter - Add
keras.layers.RandomColorDegeneration - Add
keras.layers.RandomSharpness - Add
keras.layers.RandomShear
- Add
- Add argument
axistotverskyloss
JAX specific changes
- Add support for JAX named scope
TensorFlow specific changes
- Make
keras.random.shuffleXLA compilable
PyTorch specific changes
- Add support for
model.export()andkeras.export.ExportArchivewith the PyTorch backend, supporting both the TF SavedModel format and the ONNX format.
New Contributors
- @LavanyaKV1234 made their first contribution in #20553
- @jakubxy08 made their first contribution in #20563
- @dhantule made their first contribution in #20565
- @roebel made their first contribution in #20575
- @Surya2k1 made their first contribution in #20613
- @edge7 made their first contribution in #20584
- @adrinjalali made their first contribution in #20599
- @mmicu made their first contribution in #20655
- @rkazants made their first contribution in #19727
- @lkk7 made their first contribution in #20682
- @Furkan-rgb made their first contribution in #20684
- @punkeel made their first contribution in #20694
- @kas2020-commits made their first contribution in #20709
Full Changelog: v3.7.0...v3.8.0
Keras 3.7.0
API changes
- Add
flash_attentionargument tokeras.ops.dot_product_attentionand tokeras.layers.MultiHeadAttention. - Add
keras.layers.STFTSpectrogramlayer (to extract STFT spectrograms from inputs as a preprocessing step) as well as its initializerkeras.initializers.STFTInitializer. - Add
celu,glu,log_sigmoid,hard_tanh,hard_shrink,squareplusactivations. - Add
keras.losses.Circleloss. - Add image visualization utilities
keras.visualization.draw_bounding_boxes,keras.visualization.draw_segmentation_masks,keras.visualization.plot_image_gallery,keras.visualization.plot_segmentation_mask_gallery. - Add
double_checkpointargument toBackupAndRestoreto save a fallback checkpoint in case the first checkpoint gets corrupted. - Add bounding box preprocessing support to image augmentation layers
CenterCrop,RandomFlip,RandomZoom,RandomTranslation,RandomCrop. - Add
keras.ops.exp2,keras.ops.inneroperations.
Performance improvements
- JAX backend: add native Flash Attention support for GPU (via cuDNN) and TPU (via a Pallas kernel). Flash Attention is now used automatically when the hardware supports it.
- PyTorch backend: add native Flash Attention support for GPU (via cuDNN). It is currently opt-in.
- TensorFlow backend: enable more kernel fusion via
bias_add. - PyTorch backend: add support for Intel XPU devices.
New Contributors
- @mostafa-mahmoud made their first contribution in #20313
- @TrAyZeN made their first contribution in #20321
- @dryglicki made their first contribution in #20353
- @jm-willy made their first contribution in #20352
- @Gopi-Uppari made their first contribution in #20377
- @nicolaspi made their first contribution in #20383
- @sineeli made their first contribution in #20368
- @LakshmiKalaKadali made their first contribution in #20403
- @mwtoews made their first contribution in #20427
- @mrry made their first contribution in #20438
- @rohithpudari made their first contribution in #20447
- @ma7555 made their first contribution in #20452
- @jakevdp made their first contribution in #20469
- @lcs-crr made their first contribution in #20503
- @rameshdange5191 made their first contribution in #20525
Full Changelog: v3.6.0...v3.7.0
Keras 3.6.0
Highlights
- New file editor utility:
keras.saving.KerasFileEditor. Use it to inspect, diff, modify and resave Keras weights files. See basic workflow here. - New
keras.utils.Configclass for managing experiment config parameters.
BREAKING changes
- When using
keras.utils.get_file, withextract=Trueoruntar=True, the return value will be the path of the extracted directory, rather than the path of the archive.
Other changes and additions
- Logging is now asynchronous in
fit(),evaluate(),predict(). This enables 100% compact stacking oftrain_stepcalls on accelerators (e.g. when running small models on TPU).- If you are using custom callbacks that rely on
on_batch_end, this will disable async logging. You can force it back by addingself.async_safe = Trueto your callbacks. Note that theTensorBoardcallback isn't considered async safe by default. Default callbacks like the progress bar are async safe.
- If you are using custom callbacks that rely on
- Added
keras.saving.KerasFileEditorutility to inspect, diff, modify and resave Keras weights file. - Added
keras.utils.Configclass. It behaves like a dictionary, with a few nice features:- All entries are accessible and settable as attributes, in addition to dict-style (e.g.
config.foo = 2orconfig["foo"]are both valid) - You can easily serialize it to JSON via
config.to_json(). - You can easily freeze it, preventing future changes, via
config.freeze().
- All entries are accessible and settable as attributes, in addition to dict-style (e.g.
- Added bitwise numpy ops:
bitwise_andbitwise_invertbitwise_left_shiftbitwise_notbitwise_orbitwise_right_shiftbitwise_xor
- Added math op
keras.ops.logdet. - Added numpy op
keras.ops.trunc. - Added
keras.ops.dot_product_attention. - Added
keras.ops.histogram. - Allow infinite
PyDatasetinstances to use multithreading. - Added argument
verboseinkeras.saving.ExportArchive.write_out()method for exporting TF SavedModel. - Added
epsilonargument inkeras.ops.normalize. - Added
Model.get_state_tree()method for retrieving a nested dict mapping variable paths to variable values (either as numpy arrays or backend tensors (default)). This is useful for rolling out custom JAX training loops. - Added image augmentation/preprocessing layers
keras.layers.AutoContrast,keras.layers.Solarization. - Added
keras.layers.Pipelineclass, to apply a sequence of layers to an input. This class is useful to build a preprocessing pipeline. Compared to aSequentialmodel,Pipelinefeatures a few important differences:- It's not a
Model, just a plain layer. - When the layers in the pipeline are compatible with
tf.data, the pipeline will also remaintf.datacompatible, independently of the backend you use.
- It's not a
New Contributors
- @alexhartl made their first contribution in #20125
- @Doch88 made their first contribution in #20156
- @edbosne made their first contribution in #20151
- @ghsanti made their first contribution in #20185
- @joehiggi1758 made their first contribution in #20223
- @AryazE made their first contribution in #20228
- @sanskarmodi8 made their first contribution in #20237
- @himalayo made their first contribution in #20262
- @nate2s made their first contribution in #20305
- @DavidLandup0 made their first contribution in #20316
Full Changelog: v3.5.0...v3.6.0
Keras 3.5.0
What's Changed
- Add integration with the Hugging Face Hub. You can now save models to Hugging Face Hub directly from
keras.Model.save()and load.kerasmodels directly from Hugging Face Hub withkeras.saving.load_model(). - Ensure compatibility with NumPy 2.0.
- Add
keras.optimizers.Lamboptimizer. - Improve
keras.distributionAPI support for very large models. - Add
keras.ops.associative_scanop. - Add
keras.ops.searchsortedop. - Add
keras.utils.PyDataset.on_epoch_begin()method. - Add
data_formatargument tokeras.layers.ZeroPadding1Dlayer. - Bug fixes and performance improvements.
Full Changelog: v3.4.1...v3.5.0
Keras 3.4.1
This is a minor bugfix release.
Keras 3.4.0
Highlights
- Add support for arbitrary, deeply nested input/output structures in Functional models (e.g. dicts of dicts of lists of inputs or outputs...)
- Add support for optional Functional inputs.
- Introduce
keras.dtype_policies.DTypePolicyMapfor easy configuration of dtype policies of nested sublayers of a subclassed layer/model. - New ops:
keras.ops.argpartitionkeras.ops.scankeras.ops.lstsqkeras.ops.switchkeras.ops.dtypekeras.ops.mapkeras.ops.image.rgb_to_hsvkeras.ops.image.hsv_to_rgb
What's changed
- Add support for
float8inference forDenseandEinsumDenselayers. - Add custom
nameargument in all Keras Applications models. - Add
axisargument inkeras.losses.Dice. - Enable
keras.utils.FeatureSpaceto be used in atf.datapipeline even when the backend isn't TensorFlow. StringLookuplayer can now taketf.SparseTensoras input.Metric.variablesis now recursive.- Add
trainingargument toModel.compute_loss(). - Add
dtypeargument to all losses. keras.utils.split_datasetnow supports nested structures in dataset.- Bugs fixes and performance improvements.
Full Changelog: v3.3.3...v3.4.0
Keras 3.3.3
This is a minor bugfix release.
Keras 3.3.2
This is a simple fix release that re-surfaces legacy Keras 2 APIs that aren't part of Keras package proper, but that are still featured in tf.keras. No other content has changed.
Keras 3.3.1
This is a simple fix release that moves the legacy _tf_keras API directory to the root of the Keras pip package. This is done in order to preserve import paths like from tensorflow.keras import layers without making any changes to the TensorFlow API files.
No other content has changed.
Keras 3.3.0
What's Changed
- Introduce float8 training.
- Add LoRA to ConvND layers.
- Add
keras.ops.ctc_decodefor JAX and TensorFlow. - Add
keras.ops.vectorize,keras.ops.select. - Add
keras.ops.image.rgb_to_grayscale. - Add
keras.losses.Tverskyloss. - Add full
bincountanddigitizesparse support. - Models and layers now return owned metrics recursively.
- Add pickling support for Keras models. Note that pickling is not recommended, prefer using Keras saving APIs.
- Bug fixes and performance improvements.
In addition, the codebase structure has evolved:
- All source files are now in
keras/src/. - All API files are now in
keras/api/. - The codebase structure stays unchanged when building the Keras pip package. This means you can
pip installKeras directly from the GitHub sources.
New Contributors
- @kapoor1992 made their first contribution in #19484
- @IMvision12 made their first contribution in #19393
- @alanwilter made their first contribution in #19438
- @chococigar made their first contribution in #19323
- @LukeWood made their first contribution in #19555
- @AlexanderLavelle made their first contribution in #19575
Full Changelog: v3.2.1...v3.3.0