Please see https://github.com/tensorflow/tensorflow/blob/r2.9/RELEASE.md for Keras release notes.
Major Features and Improvements
* `tf.keras`:
* Added `tf.keras.applications.resnet_rs` models. This includes the `ResNetRS50`, `ResNetRS101`, `ResNetRS152`, `ResNetRS200`, `ResNetRS270`, `ResNetRS350` and `ResNetRS420` model architectures. The ResNetRS models are based on the architecture described in [Revisiting ResNets: Improved Training and Scaling Strategies](https://arxiv.org/pdf/2103.07579.pdf)
* Added `tf.keras.optimizers.experimental.Optimizer`. The reworked optimizer gives more control over different phases of optimizer calls, and is easier to customize. We provide Adam, SGD, Adadelta, AdaGrad and RMSprop optimizers based on `tf.keras.optimizers.experimental.Optimizer`. Generally the new optimizers work in the same way as the old ones, but support new constructor arguments. In the future, the symbols `tf.keras.optimizers.Optimizer`/`Adam`/etc will point to the new optimizers, and the previous generation of optimizers will be moved to `tf.keras.optimizers.legacy.Optimizer`/`Adam`/etc.
* Added L2 unit normalization layer `tf.keras.layers.UnitNormalization`.
* Added `tf.keras.regularizers.OrthogonalRegularizer`, a new regularizer that encourages orthogonality between the rows (or columns) or a weight matrix.
* Added `tf.keras.layers.RandomBrightness` layer for image preprocessing.
* Added APIs for switching between interactive logging and absl logging. By default, Keras always writes the logs to stdout. However, this is not optimal in a non-interactive environment, where you don't have access to stdout, but can only view the logs. You can use `tf.keras.utils.disable_interactive_logging()` to write the logs to ABSL logging. You can also use `tf.keras.utils.enable_interactive_logging()` to change it back to stdout, or `tf.keras.utils.is_interactive_logging_enabled()` to check if interactive logging is enabled.
* Changed default value for the `verbose` argument of `Model.evaluate()` and `Model.predict()` to `"auto"`, which defaults to `verbose=1` for most cases and defaults to `verbose=2` when used with `ParameterServerStrategy` or with interactive logging disabled.
* Argument `jit_compile` in `Model.compile()` now applies to `Model.evaluate()` and `Model.predict()`. Setting `jit_compile=True` in `compile()` compiles the model's training, evaluation, and inference steps to [XLA](https://www.tensorflow.org/xla). Note that `jit_compile=True` may not necessarily work for all models.
* Added DTensor-related Keras APIs under `tf.keras.dtensor` namespace. The APIs are still classified as experimental. You are welcome to try it out. Please check the tutoral and guide on https://www.tensorflow.org/ for more details about DTensor.
What's Changed
* Update_OptimizerV2.py by sachinprasadhs in https://github.com/keras-team/keras/pull/15819
* Use `assign_sub` when computing `moving_average_update` by lgeiger in https://github.com/keras-team/keras/pull/15773
* Document the verbose parameter in EarlyStopping by ThunderKey in https://github.com/keras-team/keras/pull/15817
* Fix LSTM and GRU cuDNN kernel failure for RaggedTensors. by foxik in https://github.com/keras-team/keras/pull/15756
* A tiny problem in an AttributeError message in base_layer.py by Aujkst in https://github.com/keras-team/keras/pull/15847
* Update training_generator_test.py by sachinprasadhs in https://github.com/keras-team/keras/pull/15876
* Minor correction in RegNet docs by AdityaKane2001 in https://github.com/keras-team/keras/pull/15901
* add scoring methods in Luong-style attention by old-school-kid in https://github.com/keras-team/keras/pull/15867
* refactoring code with List Comprehension by idiomaticrefactoring in https://github.com/keras-team/keras/pull/15924
* added clarifying statement to save_model example text by soosung80 in https://github.com/keras-team/keras/pull/15930
* Update base_conv.py by AdityaKane2001 in https://github.com/keras-team/keras/pull/15943
* Update global_clipnorm by sachinprasadhs in https://github.com/keras-team/keras/pull/15938
* Update callbacks.py by Cheril311 in https://github.com/keras-team/keras/pull/15977
* Applied correct reshaping to metric func sparse_top_k by dfossl in https://github.com/keras-team/keras/pull/15997
* Keras saving/loading: Add a custom object saving test to verify the `keras.utils.register_keras_serializable` flows we are expecting users to follow work, and will continue to work with the new design and implementation coming in. by copybara-service in https://github.com/keras-team/keras/pull/15992
* Metric accuracy bug fixes - Metrics Refactor proposal by dfossl in https://github.com/keras-team/keras/pull/16010
* Make `classifier_activation` argument accessible for DenseNet and NASNet models by adrhill in https://github.com/keras-team/keras/pull/16005
* Copy image utils from keras_preprocessing directly into core keras by copybara-service in https://github.com/keras-team/keras/pull/15975
* Update `keras.callbacks.BackupAndRestore` docs by lgeiger in https://github.com/keras-team/keras/pull/16018
* Updating the definition of an argument in the text_dataset_from_directory function by shraddhazpy in https://github.com/keras-team/keras/pull/16012
* Remove deprecated TF1 Layer APIs `apply()`, `get_updates_for()`, `get_losses_for()`, and remove the `inputs` argument in the `add_loss()` method. by copybara-service in https://github.com/keras-team/keras/pull/16046
* Fixed minor typos by hdubbs in https://github.com/keras-team/keras/pull/16071
* Fix typo in documentation by futtetennista in https://github.com/keras-team/keras/pull/16082
* Issue 16090: Split input_shapes horizontally in utils.vis_utils.plot_model by RicardFos in https://github.com/keras-team/keras/pull/16096
* Docker env setup related changes by shraddhazpy in https://github.com/keras-team/keras/pull/16040
* Fixed EfficientNetV2 b parameter not increasing with each block. by sebastian-sz in https://github.com/keras-team/keras/pull/16145
* Updated args of train_on_batch method by jvishnuvardhan in https://github.com/keras-team/keras/pull/16147
* Binary accuracy bug fixes - Metric accuracy method refactor by dfossl in https://github.com/keras-team/keras/pull/16083
* Fix the corner case for dtensor model layout map. by copybara-service in https://github.com/keras-team/keras/pull/16170
* Fix typo in docstring for `DenseFeatures` by gadagashwini in https://github.com/keras-team/keras/pull/16165
* Fix typo in Returns Section by chunduriv in https://github.com/keras-team/keras/pull/16182
* Some tests misusing assertTrue for comparisons fix by code-review-doctor in https://github.com/keras-team/keras/pull/16073
* Add .DS_Store to .gitignore for macOS users by tsheaff in https://github.com/keras-team/keras/pull/16198
* Solve memory inefficiency in RNNs by atmguille in https://github.com/keras-team/keras/pull/16174
* Update README.md by ahmedopolis in https://github.com/keras-team/keras/pull/16259
* Fix documentation text being mistakenly rendered as code by guberti in https://github.com/keras-team/keras/pull/16253
* Allow single input for merging layers Add, Average, Concatenate, Maximum, Minimum, Multiply by foxik in https://github.com/keras-team/keras/pull/16230
* Mention image dimensions format in image_dataset_from_directory by nrzimmermann in https://github.com/keras-team/keras/pull/16232
* fix thresholded_relu to support list datatype by old-school-kid in https://github.com/keras-team/keras/pull/16277
* Implement all tf interpolation upscaling methods by Mahrkeenerh in https://github.com/keras-team/keras/pull/16249
New Contributors
* lgeiger made their first contribution in https://github.com/keras-team/keras/pull/15773
* ThunderKey made their first contribution in https://github.com/keras-team/keras/pull/15817
* Aujkst made their first contribution in https://github.com/keras-team/keras/pull/15847
* idiomaticrefactoring made their first contribution in https://github.com/keras-team/keras/pull/15924
* soosung80 made their first contribution in https://github.com/keras-team/keras/pull/15930
* Cheril311 made their first contribution in https://github.com/keras-team/keras/pull/15977
* dfossl made their first contribution in https://github.com/keras-team/keras/pull/15997
* adrhill made their first contribution in https://github.com/keras-team/keras/pull/16005
* shraddhazpy made their first contribution in https://github.com/keras-team/keras/pull/16012
* hdubbs made their first contribution in https://github.com/keras-team/keras/pull/16071
* futtetennista made their first contribution in https://github.com/keras-team/keras/pull/16082
* RicardFos made their first contribution in https://github.com/keras-team/keras/pull/16096
* gadagashwini made their first contribution in https://github.com/keras-team/keras/pull/16165
* chunduriv made their first contribution in https://github.com/keras-team/keras/pull/16182
* code-review-doctor made their first contribution in https://github.com/keras-team/keras/pull/16073
* tsheaff made their first contribution in https://github.com/keras-team/keras/pull/16198
* atmguille made their first contribution in https://github.com/keras-team/keras/pull/16174
* ahmedopolis made their first contribution in https://github.com/keras-team/keras/pull/16259
* guberti made their first contribution in https://github.com/keras-team/keras/pull/16253
* nrzimmermann made their first contribution in https://github.com/keras-team/keras/pull/16232
* Mahrkeenerh made their first contribution in https://github.com/keras-team/keras/pull/16249
**Full Changelog**: https://github.com/keras-team/keras/compare/v2.8.0-rc0...v2.9.0-rc0