xref: /aosp_15_r20/external/tensorflow/RELEASE.md (revision b6fb3261f9314811a0f4371741dbb8839866f948)
1# Release 2.11.0
2
3<INSERT SMALL BLURB ABOUT RELEASE FOCUS AREA AND POTENTIAL TOOLCHAIN CHANGES>
4
5* `tensorflow::StatusOr::ConsumeValueOrDie`, deprecated in TF 2.10 has been
6  removed.
7
8* <DOCUMENT BREAKING CHANGES HERE>
9* <THIS SECTION SHOULD CONTAIN API, ABI AND BEHAVIORAL BREAKING CHANGES>
10
11# Known Caveats
12
13* <CAVEATS REGARDING THE RELEASE (BUT NOT BREAKING CHANGES).>
14* <ADDING/BUMPING DEPENDENCIES SHOULD GO HERE>
15* <KNOWN LACK OF SUPPORT ON SOME PLATFORM, SHOULD GO HERE>
16
17# Major Features and Improvements
18
19*   `tf.lite`:
20
21    *   New operations supported:
22          * tf.unsortedsegmentmin op is supported.
23          * tf.atan2 op is supported.
24    *   Updates to existing operations:
25          * tfl.mul now supports complex32 inputs.
26
27# Bug Fixes and Other Changes
28
29*   `tf.image`
30    *   Added an optional parameter `return_index_map` to `tf.image.ssim` which
31        causes the returned value to be the local SSIM map instead of the global
32        mean.
33
34# Thanks to our Contributors
35
36This release contains contributions from many people at Google, as well as:
37
38<INSERT>, <NAME>, <HERE>, <USING>, <GITHUB>, <HANDLE>
39
40# Release 2.10.0
41
42## Breaking Changes
43
44*   Causal attention in `keras.layers.Attention` and `keras.layers.AdditiveAttention` is now specified in the `call()` method via the `use_causal_mask` argument (rather than in the constructor), for consistency with other layers.
45*   Some files in `tensorflow/python/training` have been moved to `tensorflow/python/tracking` and `tensorflow/python/checkpoint`. Please update your imports accordingly, the old files will be removed in Release  2.11.
46*   `tf.keras.optimizers.experimental.Optimizer` will graduate in Release 2.11, which means `tf.keras.optimizers.Optimizer` will be an alias of `tf.keras.optimizers.experimental.Optimizer`. The current `tf.keras.optimizers.Optimizer` will continue to be supported as `tf.keras.optimizers.legacy.Optimizer`, e.g., `tf.keras.optimizers.legacy.Adam`. Most users won't be affected by this change, but please check the [API doc](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/experimental) if any API used in your workflow is changed or deprecated, and make adaptions. If you decide to keep using the old optimizer, please explicitly change your optimizer to `tf.keras.optimizers.legacy.Optimizer`.
47*   RNG behavior change for `tf.keras.initializers`. Keras initializers will now use stateless random ops to generate random numbers.
48*   Both seeded and unseeded initializers will always generate the same  values every time they are called (for a given variable shape). For unseeded initializers (`seed=None`), a random seed will be created and assigned at initializer creation  (different initializer instances get different seeds).
49*   An unseeded initializer will raise a warning if it is reused (called) multiple times. This is because it would produce the same values each time, which may not be intended.
50
51## Major Features and Improvements
52
53*   `tf.lite`:
54
55    *   New operations supported:
56          * tflite SelectV2 now supports 5D.
57          * tf.einsum is supported with multiple unknown shapes.
58          * tf.unsortedsegmentprod op is supported.
59          * tf.unsortedsegmentmax op is supported.
60          * tf.unsortedsegmentsum op is supported.
61    *   Updates to existing operations:
62          * tfl.scatter_nd now supports I1 for update arg.
63    *   Upgrade Flatbuffers v2.0.5 from v1.12.0
64    *   Better supporting `tf_type.variant` type in flatbuffer import/export.
65
66*   `tf.keras`:
67
68    *   `EinsumDense` layer moved from experimental to core. Its import path  moved from `tf.keras.layers.experimental.EinsumDense` to `tf.keras.layers.EinsumDense`.
69    *   Added `tf.keras.utils.audio_dataset_from_directory` utility to easily generate audio classification datasets from directories of `.wav` files.
70    *   Added `subset="both"` support in `tf.keras.utils.image_dataset_from_directory`,`tf.keras.utils.text_dataset_from_directory`, and `audio_dataset_from_directory`, to be used with the `validation_split` argument, for returning both dataset splits at once, as a tuple.
71    *   Added `tf.keras.utils.split_dataset` utility to split a `Dataset` object or a list/tuple of arrays into two `Dataset` objects (e.g. train/test).
72    *   Added step granularity to `BackupAndRestore` callback for handling distributed training failures & restarts. The training state can now be restored at the exact epoch and step at which it was previously saved before failing.
73    *   Added [`tf.keras.dtensor.experimental.optimizers.AdamW`](https://www.tensorflow.org/api_docs/python/tf/keras/dtensor/experimental/optimizers/AdamW). This optimizer is similar as the existing [`keras.optimizers.experimental.AdamW`](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/experimental/AdamW), and  works in the DTensor training use case.
74    *   Improved masking support for [tf.keras.layers.MultiHeadAttention](https://www.tensorflow.org/api_docs/python/tf/keras/layers/MultiHeadAttention).
75    *   Implicit masks for `query`, `key` and `value` inputs will automatically be used to compute a correct attention mask for the layer. These padding masks will be combined with any `attention_mask` passed in directly when calling the layer. This can be used with [tf.keras.layers.Embedding](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding) with `mask_zero=True` to automatically infer a correct padding mask.
76    *   Added a `use_causal_mask` call time arugment to the layer. Passing `use_causal_mask=True` will compute a causal attention mask, and optionally combine it with any `attention_mask` passed in directly when calling the layer.
77    *   Added `ignore_class` argument in the loss `SparseCategoricalCrossentropy` and metrics `IoU` and `MeanIoU`, to specify a class index to be ignored during loss/metric computation (e.g. a background/void class).
78    *   Added [`tf.keras.models.experimental.SharpnessAwareMinimization`](https://www.tensorflow.org/api_docs/python/tf/keras/models/experimental/SharpnessAwareMinimization). This class implements the sharpness-aware minimization technique, which boosts model performance on various tasks, e.g., ResNet on image classification.
79
80*   `tf.data`:
81
82    *   Added support for cross-trainer data caching in tf.data service. This saves computation resources when concurrent training jobs train from the same dataset. See
83        https://www.tensorflow.org/api_docs/python/tf/data/experimental/service#sharing_tfdata_service_with_concurrent_trainers for more details.
84    *   Added `dataset_id` to `tf.data.experimental.service.register_dataset`. If provided, tf.data service will use the provided ID for the dataset. If the dataset ID already exists, no new dataset will be registered. This is useful if multiple training jobs need to use the same dataset for training. In this case, users should call `register_dataset` with the same `dataset_id`.
85    *   Added a new field, `inject_prefetch`, to `tf.data.experimental.OptimizationOptions`. If it is set to `True`, tf.data will now automatically add a `prefetch` transformation to datasets that end in synchronous transformations. This enables data generation to be overlapped with  data consumption. This may cause a small increase in memory usage due to buffering. To enable this behavior, set `inject_prefetch=True` in `tf.data.experimental.OptimizationOptions`.
86    *   Added a new value to `tf.data.Options.autotune.autotune_algorithm`: STAGE_BASED. If the autotune algorithm is set to STAGE_BASED, then it runs a new algorithm that can get the same performance with lower CPU/memory usage.
87    *   Added [`tf.data.experimental.from_list`](https://www.tensorflow.org/api_docs/python/tf/data/experimental/from_list), a new API for creating `Dataset`s from lists of elements.
88
89*   `tf.distribute`:
90
91    *   Added [`tf.distribute.experimental.PreemptionCheckpointHandler`](https://www.tensorflow.org/api_docs/python/tf/distribute/experimental/PreemptionCheckpointHandler) to handle worker preemption/maintenance and cluster-wise consistent error reporting for `tf.distribute.MultiWorkerMirroredStrategy`. Specifically, for the type of interruption with advance notice, it automatically saves a checkpoint, exits the program without raising an unrecoverable error, and restores the progress when training restarts.
92
93*   `tf.math`:
94
95    *   Added `tf.math.approx_max_k` and `tf.math.approx_min_k` which are the optimized alternatives to `tf.math.top_k` on TPU. The performance difference range from 8 to 100 times depending on the size of k. When running on CPU and GPU, a non-optimized XLA kernel is used.
96
97*   `tf.train`:
98
99    *  Added `tf.train.TrackableView` which allows users to inspect the TensorFlow Trackable object (e.g. `tf.Module`, Keras Layers and models).
100    *  Added `tf.train.CheckpointView` which allows users to inspect SavedModel objects and Checkpoint objects.
101
102*   `tf.vectorized_map`:
103
104    *   Added an optional parameter: `warn`. This parameter controls whether or  not warnings will be printed when operations in the provided `fn` fall back to a while loop.
105
106*   XLA:
107    *   MWMS is now compilable with XLA.
108
109## Bug Fixes and Other Changes
110
111*  New argument `experimental_device_ordinal` in `LogicalDeviceConfiguration` to control the order of logical devices. (GPU only)
112
113*   `tf.keras`:
114
115    *   Changed the TensorBoard tag names produced by the `tf.keras.callbacks.TensorBoard` callback, so that summaries logged automatically for model weights now include either a `/histogram` or `/image` suffix in their tag names, in order to prevent tag name collisions across summary types.
116
117*   When running on GPU (with cuDNN version 7.6.3 or later),`tf.nn.depthwise_conv2d` backprop to `filter` (and therefore also `tf.keras.layers.DepthwiseConv2D`) now operate deterministically (and `tf.errors.UnimplementedError` is no longer thrown) when op-determinism has been enabled via `tf.config.experimental.enable_op_determinism`. This closes
118    issue [47174](https://github.com/tensorflow/tensorflow/issues/47174).
119
120* `tf.random`
121    * Added `tf.random.experimental.stateless_shuffle`, a stateless version of `tf.random.shuffle`.
122
123## Deprecations
124
125*   The C++ `tensorflow::Code` and `tensorflow::Status` will become aliases of respectively `absl::StatusCode` and `absl::Status` in some future release.
126    *   Use `tensorflow::OkStatus()` instead of `tensorflow::Status::OK()`.
127    *   Stop constructing `Status` objects from `tensorflow::error::Code`.
128    *   One MUST NOT access `tensorflow::errors::Code` fields. Accessing
129        `tensorflow::error::Code` fields is fine.
130        *   Use the constructors such as `tensorflow::errors:InvalidArgument` to create status using an error code without accessing it.
131        *   Use the free functions such as `tensorflow::errors::IsInvalidArgument` if needed.
132        *   In the last resort, use e.g. `static_cast<tensorflow::errors::Code>(error::Code::INVALID_ARGUMENT)` or `static_cast<int>(code)` for comparisons.
133*   `tensorflow::StatusOr` will also become in the future alias to `absl::StatusOr`, so use `StatusOr::value` instead of `StatusOr::ConsumeValueOrDie`.
134
135
136
137## Thanks to our Contributors
138
139This release contains contributions from many people at Google, as well as:
140
141Abolfazl Shahbazi, Adam Lanicek, Amin Benarieb, andreii, Andrew Fitzgibbon, Andrew Goodbody, angerson, Ashiq Imran, Aurélien Geron, Banikumar Maiti (Intel Aipg), Ben Barsdell, Ben Mares, bhack, Bhavani Subramanian, Bill Schnurr, Byungsoo Oh, Chandra Sr Potula, Chengji Yao, Chris Carpita, Christopher Bate, chunduriv, Cliff Woolley, Cliffs Dover, Cloud Han, Code-Review-Doctor, DEKHTIARJonathan, Deven Desai, Djacon, Duncan Riach, fedotoff, fo40225, Frederic Bastien, gadagashwini, Gauri1 Deshpande, guozhong.zhuang, Hui Peng, James Gerity, Jason Furmanek, Jonathan Dekhtiar, Jueon Park, Kaixi Hou, Kanvi Khanna, Keith Smiley, Koan-Sin Tan, Kulin Seth, kushanam, Learning-To-Play, Li-Wen Chang, lipracer, liuyuanqiang, Louis Sugy, Lucas David, Lukas Geiger, Mahmoud Abuzaina, Marius Brehler, Maxiwell S. Garcia, mdfaijul, Meenakshi Venkataraman, Michal Szutenberg, Michele Di Giorgio, Mickaël Salamin, Nathan John Sircombe, Nathan Luehr, Neil Girdhar, Nils Reichardt, Nishidha Panpaliya, Nobuo Tsukamoto, Om Thakkar, Patrice Vignola, Philipp Hack, Pooya Jannaty, Prianka Liz Kariat, pshiko, Rajeshwar Reddy T, rdl4199, Rohit Santhanam, Rsanthanam-Amd, Sachin Muradi, Saoirse Stewart, Serge Panev, Shu Wang, Srinivasan Narayanamoorthy, Stella Stamenova, Stephan Hartmann, Sunita Nadampalli, synandi, Tamas Bela Feher, Tao Xu, Thibaut Goetghebuer-Planchon, Trevor Morris, Xiaoming (Jason) Cui, Yimei Sun, Yong Tang, Yuanqiang Liu, Yulv-Git, Zhoulong Jiang, ZihengJiang
142
143# Release 2.9.1
144
145Add an upper bound for `protobuf` in `setup.py` since `protobuf` after version 3.20 is currently incompatible with TensorFlow. See https://github.com/tensorflow/tensorflow/issues/53234, https://github.com/protocolbuffers/protobuf/issues/9954 and https://github.com/tensorflow/tensorflow/issues/56077.
146
147# Release 2.8.2
148
149Add an upper bound for `protobuf` in `setup.py` since `protobuf` after version 3.20 is currently incompatible with TensorFlow. See https://github.com/tensorflow/tensorflow/issues/53234, https://github.com/protocolbuffers/protobuf/issues/9954 and https://github.com/tensorflow/tensorflow/issues/56077.
150
151# Release 2.7.3
152
153Add an upper bound for `protobuf` in `setup.py` since `protobuf` after version 3.20 is currently incompatible with TensorFlow. See https://github.com/tensorflow/tensorflow/issues/53234, https://github.com/protocolbuffers/protobuf/issues/9954 and https://github.com/tensorflow/tensorflow/issues/56077.
154
155# Release 2.6.5
156
157Add an upper bound for `protobuf` in `setup.py` since `protobuf` after version 3.20 is currently incompatible with TensorFlow. See https://github.com/tensorflow/tensorflow/issues/53234, https://github.com/protocolbuffers/protobuf/issues/9954 and https://github.com/tensorflow/tensorflow/issues/56077.
158
159# Release 2.9.0
160
161## Breaking Changes
162
163*   Due to security issues in TF 2.8, all boosted trees code has now been removed (after being deprecated in TF 2.8). Users should switch to [TensorFlow Decision Forests](https://github.com/tensorflow/decision-forests).
164*   Build, Compilation and Packaging
165    * TensorFlow is now compiled with `_GLIBCXX_USE_CXX11_ABI=1`. Downstream projects that encounter `std::__cxx11` or `[abi:cxx11]` linker errors will need to adopt this compiler option. See [the GNU C++ Library docs on Dual ABI](https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html).
166    * TensorFlow Python wheels now specifically conform to [manylinux2014](https://peps.python.org/pep-0599/), an upgrade from manylinux2010. The minimum Pip version supporting manylinux2014 is Pip 19.3 (see [pypa/manylinux](https://github.com/pypa/manylinux). This change may affect you if you have been using TensorFlow on a very old platform equivalent to CentOS 6, as manylinux2014 targets CentOS 7 as a compatibility base. Note that TensorFlow does not officially support either platform.
167    * Discussion for these changes can be found on SIG Build's [TensorFlow Community Forum thread](https://discuss.tensorflow.org/t/tensorflow-linux-wheels-are-being-upgraded-to-manylinux2014/8339)
168*   The `tf.keras.mixed_precision.experimental` API has been removed. The non-experimental symbols under `tf.keras.mixed_precision` have been available since TensorFlow 2.4 and should be used instead.
169    * The non-experimental API has some minor differences from the experimental API. In most cases, you only need to make three minor changes:
170      * Remove the word "experimental" from `tf.keras.mixed_precision` symbols. E.g., replace `tf.keras.mixed_precision.experimental.global_policy` with `tf.keras.mixed_precision.global_policy`.
171      * Replace `tf.keras.mixed_precision.experimental.set_policy` with `tf.keras.mixed_precision.set_global_policy`. The experimental symbol `set_policy` was renamed to `set_global_policy` in the non-experimental API.
172      * Replace `LossScaleOptimizer(opt, "dynamic")` with `LossScaleOptimizer(opt)`. If you pass anything other than `"dynamic"` to the second argument, see (1) of the next section.
173    * In the following rare cases, you need to make more changes when switching to the non-experimental API:
174      * If you passed anything other than `"dynamic"` to the `loss_scale` argument (the second argument) of `LossScaleOptimizer`:
175          * The LossScaleOptimizer constructor takes in different arguments. See the [TF 2.7 documentation of tf.keras.mixed_precision.experimental.LossScaleOptimizer](https://www.tensorflow.org/versions/r2.7/api_docs/python/tf/keras/mixed_precision/experimental/LossScaleOptimizer) for details on the differences, which has examples on how to convert to the non-experimental LossScaleOptimizer.
176      * If you passed a value to the `loss_scale` argument (the second argument) of `Policy`:
177          * The experimental version of `Policy` optionally took in a `tf.compat.v1.mixed_precision.LossScale` in the constructor, which defaulted to a dynamic loss scale for the `"mixed_float16"` policy and no loss scale for other policies. In `Model.compile`, if the model's policy had a loss scale, the optimizer would be wrapped with a `LossScaleOptimizer`. With the non-experimental `Policy`, there is no loss scale associated with the `Policy`, and `Model.compile` wraps the optimizer with a `LossScaleOptimizer` if and only if the policy is a `"mixed_float16"` policy. If you previously passed a `LossScale` to the experimental `Policy`, consider just removing it, as the default loss scaling behavior is usually what you want. If you really want to customize the loss scaling behavior, you can wrap your optimizer with a `LossScaleOptimizer` before passing it to `Model.compile`.
178      * If you use the very rarely-used function `tf.keras.mixed_precision.experimental.get_layer_policy`:
179          * Replace `tf.keras.mixed_precision.experimental.get_layer_policy(layer)` with `layer.dtype_policy`.
180* `tf.mixed_precision.experimental.LossScale` and its subclasses have been removed from the TF2 namespace. This symbols were very rarely used and were only useful in TF2 for use in the now-removed `tf.keras.mixed_precision.experimental` API. The symbols are still available under `tf.compat.v1.mixed_precision`.
181* The `experimental_relax_shapes` heuristic for `tf.function` has been deprecated and replaced with `reduce_retracing` which encompasses broader heuristics to reduce the number of retraces (see below)
182
183## Major Features and Improvements
184
185*   `tf.keras`:
186
187    *   Added `tf.keras.applications.resnet_rs` models. This includes the
188        `ResNetRS50`, `ResNetRS101`, `ResNetRS152`, `ResNetRS200`,
189        `ResNetRS270`, `ResNetRS350` and `ResNetRS420` model architectures. The
190        ResNetRS models are based on the architecture described in
191        [Revisiting ResNets: Improved Training and Scaling Strategies](https://arxiv.org/pdf/2103.07579.pdf)
192    *   Added `tf.keras.optimizers.experimental.Optimizer`. The reworked
193        optimizer gives more control over different phases of optimizer calls,
194        and is easier to customize. We provide Adam, SGD, Adadelta, AdaGrad and
195        RMSprop optimizers based on
196        `tf.keras.optimizers.experimental.Optimizer`. Generally the new
197        optimizers work in the same way as the old ones, but support new
198        constructor arguments. In the future, the symbols
199        `tf.keras.optimizers.Optimizer`/`Adam`/etc will point to the new
200        optimizers, and the previous generation of optimizers will be moved to
201        `tf.keras.optimizers.legacy.Optimizer`/`Adam`/etc.
202    *   Added L2 unit normalization layer `tf.keras.layers.UnitNormalization`.
203    *   Added `tf.keras.regularizers.OrthogonalRegularizer`, a new regularizer
204        that encourages orthogonality between the rows (or columns) or a weight
205        matrix.
206    *   Added `tf.keras.layers.RandomBrightness` layer for image preprocessing.
207    *   Added APIs for switching between interactive logging and absl logging.
208        By default, Keras always writes the logs to stdout. However, this is not
209        optimal in a non-interactive environment, where you don't have access to
210        stdout, but can only view the logs. You can use
211        `tf.keras.utils.disable_interactive_logging()` to write the logs to ABSL
212        logging. You can also use `tf.keras.utils.enable_interactive_logging()`
213        to change it back to stdout, or
214        `tf.keras.utils.is_interactive_logging_enabled()` to check if
215        interactive logging is enabled.
216    *   Changed default value for the `verbose` argument of `Model.evaluate()`
217        and `Model.predict()` to `"auto"`, which defaults to `verbose=1` for
218        most cases and defaults to `verbose=2` when used with
219        `ParameterServerStrategy` or with interactive logging disabled.
220    *   Argument `jit_compile` in `Model.compile()` now applies to
221        `Model.evaluate()` and `Model.predict()`. Setting `jit_compile=True` in
222        `compile()` compiles the model's training, evaluation, and inference
223        steps to [XLA](https://www.tensorflow.org/xla). Note that
224        `jit_compile=True` may not necessarily work for all models.
225    *   Added DTensor-related Keras APIs under `tf.keras.dtensor` namespace. The
226        APIs are still classified as experimental. You are welcome to try it
227        out. Please check the tutorial and guide on https://www.tensorflow.org/
228        for more details about DTensor.
229
230*   `tf.lite`:
231
232    *   Added TFLite builtin op support for the following TF ops:
233        *   `tf.math.argmin`/`tf.math.argmax` for input data type `tf.bool` on
234            CPU.
235        *   `tf.nn.gelu` op for output data type `tf.float32` and quantization
236            on CPU.
237    *   Add nominal support for unsigned 16-bit integer tensor types. Note that
238        very few TFLite kernels support this type natively, so its use in mobile
239        ML authoring is generally discouraged.
240    *   Add support for unsigned 16-bit integer tensor types in cast op.
241    *   Experimental support for lowering `list_ops.tensor_list_set_item` with
242        `DynamicUpdateSlice`.
243    *   Enabled a new MLIR-based dynamic range quantization backend by default
244        *   The new backend is used for post-training int8 dynamic range
245            quantization and post-training float16 quantization.
246        *   Set `experimental_new_dynamic_range_quantizer` in
247            tf.lite.TFLiteConverter to False to disable this change
248    *   Native TF Lite variables are now enabled during conversion by default on
249        all v2 TfLiteConverter entry points.
250        `experimental_enable_resource_variables` on tf.lite.TFLiteConverter is
251        now True by default and will be removed in the future.
252
253*   `tf.function`:
254
255    *   Custom classes used as arguments for `tf.function` can now specify rules
256        regarding when retracing needs to occur by implementing the Tracing
257        Protocol available through
258        `tf.types.experimental.SupportsTracingProtocol`.
259    *   `TypeSpec` classes (as associated with `ExtensionTypes`) also implement
260        the Tracing Protocol which can be overridden if necessary.
261    *   The newly introduced `reduce_retracing` option also uses the Tracing
262        Protocol to proactively generate generalized traces similar to
263        `experimental_relax_shapes` (which has now been deprecated).
264
265*   Unified eager and `tf.function` execution:
266
267    *   Eager mode can now execute each op as a `tf.function`, allowing for more
268        consistent feature support in future releases.
269    *   It is available for immediate use.
270        *   See the `TF_RUN_EAGER_OP_AS_FUNCTION` environment variable in
271            [eager context](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/eager/context.py).
272        *   Eager performance should be similar with this feature enabled.
273            *   A roughly 5us per-op overhead may be observed when running many
274                small functions.
275            *   Note a
276                [known issue](https://github.com/tensorflow/tensorflow/issues/55414)
277                with GPU performance.
278        *   The behavior of `tf.function` itself is unaffected.
279    *   Note: This feature will be enabled by default in an upcoming version of
280        TensorFlow.
281
282*   `tf.experimental.dtensor`: Added DTensor, an extension to TensorFlow for
283    large-scale modeling with minimal changes to user code. You are welcome to
284    try it out, though be aware that the DTensor API is experimental and up-to
285    backward-incompatible changes. DTensor and Keras integration is published
286    under `tf.keras.dtensor` in this release (refer to the `tf.keras` entry).
287    The tutoral and guide for DTensor will be published on
288    https://www.tensorflow.org/. Please stay tuned.
289
290*   [oneDNN CPU performance optimizations](https://github.com/tensorflow/community/blob/master/rfcs/20210930-enable-onednn-ops.md)
291    are available in Linux x86, Windows x86, and Linux aarch64 packages.
292
293    *   **Linux x86 packages:**
294        *   oneDNN optimizations are *enabled by default* on CPUs with
295            neural-network-focused hardware features such as AVX512_VNNI,
296            AVX512_BF16, AMX, etc.
297            ([Intel Cascade Lake](https://www.intel.com/content/www/us/en/products/platforms/details/cascade-lake.html)
298            and newer CPUs.)
299            *   [Example performance speedups.](https://medium.com/intel-analytics-software/leverage-intel-deep-learning-optimizations-in-tensorflow-129faa80ee07)
300        *   For older CPUs, oneDNN optimizations are disabled by default.
301    *   **Windows x86 package:** oneDNN optimizations are disabled by default.
302    *   **Linux aach64 (`--config=mkl_aarch64`) package:**
303        *   Experimental oneDNN optimizations are disabled by default.
304        *   If you experience issues with oneDNN optimizations on, we recommend
305            turning them off.
306    *   To explicitly enable or disable oneDNN optimizations, set the
307        environment variable `TF_ENABLE_ONEDNN_OPTS` to `1` (enable) or `0`
308        (disable) before running TensorFlow. (The variable is checked during
309        `import tensorflow`.) To fall back to default settings, unset the
310        environment variable.
311    *   These optimizations can yield slightly different numerical results from
312        when they are off due to floating-point round-off errors from different
313        computation approaches and orders.
314    *   To verify that the optimizations are on, look for a message with
315        *"oneDNN custom operations are on"* in the log. If the exact phrase is
316        not there, it means they are off.
317
318## Bug Fixes and Other Changes
319
320*   `tf.data`:
321    *   Fixed bug in `tf.data.experimental.parse_example_dataset` when `tf.io.RaggedFeatures` would specify `value_key` but no `partitions`. Before the fix, setting `value_key` but no `partitions` would result in the feature key being replaced by the value key, e.g. `{'value_key': <RaggedTensor>}` instead of `{'key': <RaggedTensor>}`. Now the correct feature key will be used. This aligns the behavior of `tf.data.experimental.parse_example_dataset` to match the behavior of `tf.io.parse_example`.
322    *   Added a new field, `filter_parallelization`, to `tf.data.experimental.OptimizationOptions`. If it is set to `True`, tf.data will run `Filter` transformation with multiple threads. Its default value is `False` if not specified.
323
324*   `tf.keras`:
325    *   Fixed bug in optimizers that prevented them from properly checkpointing slot variables when they are `ShardedVariable`s (used for training with `tf.distribute.experimental.ParameterServerStrategy`).
326
327*   `tf.random`:
328    * Added `tf.random.experimental.index_shuffle`, for shuffling a sequence without materializing the sequence in memory.
329
330*   `tf.RaggedTensor`:
331    *   Introduced `tf.experimental.RowPartition`, which encodes how one dimension in a RaggedTensor relates to another, into the public API.
332    *   Introduced `tf.experimental.DynamicRaggedShape`, which represents the shape of a RaggedTensor.
333
334## Security
335
336*   Fixes a code injection in `saved_model_cli` ([CVE-2022-29216](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29216))
337*   Fixes a missing validation which causes `TensorSummaryV2` to crash ([CVE-2022-29193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29193))
338*   Fixes a missing validation which crashes `QuantizeAndDequantizeV4Grad` ([CVE-2022-29192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29192))
339*   Fixes a missing validation which causes denial of service via `DeleteSessionTensor` ([CVE-2022-29194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29194))
340*   Fixes a missing validation which causes denial of service via `GetSessionTensor` ([CVE-2022-29191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29191))
341*   Fixes a missing validation which causes denial of service via `StagePeek` ([CVE-2022-29195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29195))
342*   Fixes a missing validation which causes denial of service via `UnsortedSegmentJoin` ([CVE-2022-29197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29197))
343*   Fixes a missing validation which causes denial of service via `LoadAndRemapMatrix` ([CVE-2022-29199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29199))
344*   Fixes a missing validation which causes denial of service via `SparseTensorToCSRSparseMatrix` ([CVE-2022-29198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29198))
345*   Fixes a missing validation which causes denial of service via `LSTMBlockCell` ([CVE-2022-29200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29200))
346*   Fixes a missing validation which causes denial of service via `Conv3DBackpropFilterV2` ([CVE-2022-29196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29196))
347*   Fixes a `CHECK` failure in depthwise ops via overflows ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
348*   Fixes issues arising from undefined behavior stemming from users supplying invalid resource handles ([CVE-2022-29207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29207))
349*   Fixes a segfault due to missing support for quantized types ([CVE-2022-29205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29205))
350*   Fixes a missing validation which results in undefined behavior in `SparseTensorDenseAdd` ([CVE-2022-29206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29206))
351*   Fixes a missing validation which results in undefined behavior in `QuantizedConv2D` ([CVE-2022-29201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29201))
352*   Fixes an integer overflow in `SpaceToBatchND` ([CVE-2022-29203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29203))
353*   Fixes a segfault and OOB write due to incomplete validation in `EditDistance` ([CVE-2022-29208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29208))
354*   Fixes a missing validation which causes denial of service via `Conv3DBackpropFilterV2` ([CVE-2022-29204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29204))
355*   Fixes a denial of service in `tf.ragged.constant` due to lack of validation ([CVE-2022-29202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29202))
356*   Fixes a segfault when `tf.histogram_fixed_width` is called with NaN values ([CVE-2022-29211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29211))
357*   Fixes a core dump when loading TFLite models with quantization ([CVE-2022-29212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29212))
358*   Fixes crashes stemming from incomplete validation in signal ops ([CVE-2022-29213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29213))
359*   Fixes a type confusion leading to `CHECK`-failure based denial of service ([CVE-2022-29209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29209))
360*   Fixes a heap buffer overflow due to incorrect hash function ([CVE-2022-29210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29210))
361*   Updates `curl` to `7.83.1` to handle ([CVE-2022-22576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-22576), ([CVE-2022-27774](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27774), ([CVE-2022-27775](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27775), ([CVE-2022-27776](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27776), ([CVE-2022-27778](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27778), ([CVE-2022-27779](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27779), ([CVE-2022-27780](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27780), ([CVE-2022-27781](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27781), ([CVE-2022-27782](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27782) and ([CVE-2022-30115](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-30115)
362*   Updates `zlib` to `1.2.12` after `1.2.11` was pulled due to [security issue](https://www.openwall.com/lists/oss-security/2022/03/28/1)
363
364## Thanks to our Contributors
365
366This release contains contributions from many people at Google, as well as:
367
368Aaron Debattista, Abel Soares Siqueira, Abhishek Varma, Andrei Ivanov, andreii, Andrew Goodbody, apeltop, Arnab Dutta, Ashiq Imran, Banikumar Maiti (Intel Aipg), Ben Greiner, Benjamin Peterson, bhack, Christopher Bate, chunduriv, Copybara-Service, DEKHTIARJonathan, Deven Desai, Duncan Riach, Eric Kunze, Everton Constantino, Faruk D, Fredrik Knutsson, gadagashwini, Gauri1 Deshpande, gtiHibGele, Guozhong Zhuang, Islem-Esi, Ivanov Viktor, Jason Furmanek, Jason Zaman, Jim, Jinzhe Zeng, John Laxson, Jonas Eschle, Jonas Eschle 'Mayou36, Jonathan Dekhtiar, Kaixi Hou, Kanvi Khanna, KaurkerDevourer, Koan-Sin Tan, kushanam, Laramie Leavitt, Li-Wen Chang, lipracer, Louis Sugy, Lu Teng, Mahmoud Abuzaina, Malcolm Slaney, Malik Shahzad Muzaffar, Marek Šuppa, Matt Conley, Michael Melesse, Milos Puzovic, mohantym, Nathan John Sircombe, Nathan Luehr, Nilesh Agarwalla, Patrice Vignola, peterjc123, Philip Turner, Rajeshwar Reddy T, Robert Kalmar, Rodrigo Formigone, Rohit Santhanam, rui, Sachin Muradi, Saduf2019, sandip, Scott Leishman, Serge Panev, Shi,Guangyong, Srinivasan Narayanamoorthy, stanley, Steven I Reeves, stevenireeves, sushreebarsa, Tamas Bela Feher, Tao He, Thomas Schmeyer, Tiago Almeida, Trevor Morris, Uday Bondhugula, Uwe L. Korn, Varghese, Jojimon, Vishnuvardhan Janapati, William Muir, William Raveane, xutianming, Yasuhiro Matsumoto, Yimei Sun, Yong Tang, Yu Feng, Yuriy Chernyshov, zhaozheng09
369
370# Release 2.8.1
371
372This releases introduces several vulnerability fixes:
373
374*   Fixes a code injection in `saved_model_cli` ([CVE-2022-29216](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29216))
375*   Fixes a missing validation which causes `TensorSummaryV2` to crash ([CVE-2022-29193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29193))
376*   Fixes a missing validation which crashes `QuantizeAndDequantizeV4Grad` ([CVE-2022-29192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29192))
377*   Fixes a missing validation which causes denial of service via `DeleteSessionTensor` ([CVE-2022-29194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29194))
378*   Fixes a missing validation which causes denial of service via `GetSessionTensor` ([CVE-2022-29191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29191))
379*   Fixes a missing validation which causes denial of service via `StagePeek` ([CVE-2022-29195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29195))
380*   Fixes a missing validation which causes denial of service via `UnsortedSegmentJoin` ([CVE-2022-29197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29197))
381*   Fixes a missing validation which causes denial of service via `LoadAndRemapMatrix` ([CVE-2022-29199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29199))
382*   Fixes a missing validation which causes denial of service via `SparseTensorToCSRSparseMatrix` ([CVE-2022-29198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29198))
383*   Fixes a missing validation which causes denial of service via `LSTMBlockCell` ([CVE-2022-29200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29200))
384*   Fixes a missing validation which causes denial of service via `Conv3DBackpropFilterV2` ([CVE-2022-29196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29196))
385*   Fixes a `CHECK` failure in depthwise ops via overflows ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
386*   Fixes issues arising from undefined behavior stemming from users supplying invalid resource handles ([CVE-2022-29207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29207))
387*   Fixes a segfault due to missing support for quantized types ([CVE-2022-29205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29205))
388*   Fixes a missing validation which results in undefined behavior in `SparseTensorDenseAdd` ([CVE-2022-29206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29206))
389*   Fixes a missing validation which results in undefined behavior in `QuantizedConv2D` ([CVE-2022-29201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29201))
390*   Fixes an integer overflow in `SpaceToBatchND` ([CVE-2022-29203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29203))
391*   Fixes a segfault and OOB write due to incomplete validation in `EditDistance` ([CVE-2022-29208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29208))
392*   Fixes a missing validation which causes denial of service via `Conv3DBackpropFilterV2` ([CVE-2022-29204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29204))
393*   Fixes a denial of service in `tf.ragged.constant` due to lack of validation ([CVE-2022-29202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29202))
394*   Fixes a segfault when `tf.histogram_fixed_width` is called with NaN values ([CVE-2022-29211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29211))
395*   Fixes a core dump when loading TFLite models with quantization ([CVE-2022-29212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29212))
396*   Fixes crashes stemming from incomplete validation in signal ops ([CVE-2022-29213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29213))
397*   Fixes a type confusion leading to `CHECK`-failure based denial of service ([CVE-2022-29209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29209))
398*   Fixes a heap buffer overflow due to incorrect hash function ([CVE-2022-29210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29210))
399*   Updates `curl` to `7.83.1` to handle ([CVE-2022-22576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-22576), ([CVE-2022-27774](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27774), ([CVE-2022-27775](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27775), ([CVE-2022-27776](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27776), ([CVE-2022-27778](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27778), ([CVE-2022-27779](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27779), ([CVE-2022-27780](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27780), ([CVE-2022-27781](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27781), ([CVE-2022-27782](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27782) and ([CVE-2022-30115](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-30115)
400*   Updates `zlib` to `1.2.12` after `1.2.11` was pulled due to [security issue](https://www.openwall.com/lists/oss-security/2022/03/28/1)
401# Release 2.7.2
402
403This releases introduces several vulnerability fixes:
404
405*   Fixes a code injection in `saved_model_cli` ([CVE-2022-29216](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29216))
406*   Fixes a missing validation which causes `TensorSummaryV2` to crash ([CVE-2022-29193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29193))
407*   Fixes a missing validation which crashes `QuantizeAndDequantizeV4Grad` ([CVE-2022-29192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29192))
408*   Fixes a missing validation which causes denial of service via `DeleteSessionTensor` ([CVE-2022-29194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29194))
409*   Fixes a missing validation which causes denial of service via `GetSessionTensor` ([CVE-2022-29191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29191))
410*   Fixes a missing validation which causes denial of service via `StagePeek` ([CVE-2022-29195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29195))
411*   Fixes a missing validation which causes denial of service via `UnsortedSegmentJoin` ([CVE-2022-29197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29197))
412*   Fixes a missing validation which causes denial of service via `LoadAndRemapMatrix` ([CVE-2022-29199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29199))
413*   Fixes a missing validation which causes denial of service via `SparseTensorToCSRSparseMatrix` ([CVE-2022-29198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29198))
414*   Fixes a missing validation which causes denial of service via `LSTMBlockCell` ([CVE-2022-29200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29200))
415*   Fixes a missing validation which causes denial of service via `Conv3DBackpropFilterV2` ([CVE-2022-29196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29196))
416*   Fixes a `CHECK` failure in depthwise ops via overflows ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
417*   Fixes issues arising from undefined behavior stemming from users supplying invalid resource handles ([CVE-2022-29207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29207))
418*   Fixes a segfault due to missing support for quantized types ([CVE-2022-29205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29205))
419*   Fixes a missing validation which results in undefined behavior in `SparseTensorDenseAdd` ([CVE-2022-29206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29206))
420*   Fixes a missing validation which results in undefined behavior in `QuantizedConv2D` ([CVE-2022-29201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29201))
421*   Fixes an integer overflow in `SpaceToBatchND` ([CVE-2022-29203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29203))
422*   Fixes a segfault and OOB write due to incomplete validation in `EditDistance` ([CVE-2022-29208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29208))
423*   Fixes a missing validation which causes denial of service via `Conv3DBackpropFilterV2` ([CVE-2022-29204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29204))
424*   Fixes a denial of service in `tf.ragged.constant` due to lack of validation ([CVE-2022-29202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29202))
425*   Fixes a segfault when `tf.histogram_fixed_width` is called with NaN values ([CVE-2022-29211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29211))
426*   Fixes a core dump when loading TFLite models with quantization ([CVE-2022-29212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29212))
427*   Fixes crashes stemming from incomplete validation in signal ops ([CVE-2022-29213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29213))
428*   Fixes a type confusion leading to `CHECK`-failure based denial of service ([CVE-2022-29209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29209))
429*   Updates `curl` to `7.83.1` to handle ([CVE-2022-22576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-22576), ([CVE-2022-27774](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27774), ([CVE-2022-27775](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27775), ([CVE-2022-27776](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27776), ([CVE-2022-27778](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27778), ([CVE-2022-27779](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27779), ([CVE-2022-27780](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27780), ([CVE-2022-27781](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27781), ([CVE-2022-27782](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27782) and ([CVE-2022-30115](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-30115)
430*   Updates `zlib` to `1.2.12` after `1.2.11` was pulled due to [security issue](https://www.openwall.com/lists/oss-security/2022/03/28/1)
431
432# Release 2.6.4
433
434This releases introduces several vulnerability fixes:
435
436*   Fixes a code injection in `saved_model_cli` ([CVE-2022-29216](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29216))
437*   Fixes a missing validation which causes `TensorSummaryV2` to crash ([CVE-2022-29193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29193))
438*   Fixes a missing validation which crashes `QuantizeAndDequantizeV4Grad` ([CVE-2022-29192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29192))
439*   Fixes a missing validation which causes denial of service via `DeleteSessionTensor` ([CVE-2022-29194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29194))
440*   Fixes a missing validation which causes denial of service via `GetSessionTensor` ([CVE-2022-29191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29191))
441*   Fixes a missing validation which causes denial of service via `StagePeek` ([CVE-2022-29195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29195))
442*   Fixes a missing validation which causes denial of service via `UnsortedSegmentJoin` ([CVE-2022-29197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29197))
443*   Fixes a missing validation which causes denial of service via `LoadAndRemapMatrix` ([CVE-2022-29199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29199))
444*   Fixes a missing validation which causes denial of service via `SparseTensorToCSRSparseMatrix` ([CVE-2022-29198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29198))
445*   Fixes a missing validation which causes denial of service via `LSTMBlockCell` ([CVE-2022-29200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29200))
446*   Fixes a missing validation which causes denial of service via `Conv3DBackpropFilterV2` ([CVE-2022-29196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29196))
447*   Fixes a `CHECK` failure in depthwise ops via overflows ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
448*   Fixes issues arising from undefined behavior stemming from users supplying invalid resource handles ([CVE-2022-29207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29207))
449*   Fixes a segfault due to missing support for quantized types ([CVE-2022-29205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29205))
450*   Fixes a missing validation which results in undefined behavior in `SparseTensorDenseAdd` ([CVE-2022-29206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29206))
451*   Fixes a missing validation which results in undefined behavior in `QuantizedConv2D` ([CVE-2022-29201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29201))
452*   Fixes an integer overflow in `SpaceToBatchND` ([CVE-2022-29203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29203))
453*   Fixes a segfault and OOB write due to incomplete validation in `EditDistance` ([CVE-2022-29208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29208))
454*   Fixes a missing validation which causes denial of service via `Conv3DBackpropFilterV2` ([CVE-2022-29204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29204))
455*   Fixes a denial of service in `tf.ragged.constant` due to lack of validation ([CVE-2022-29202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29202))
456*   Fixes a segfault when `tf.histogram_fixed_width` is called with NaN values ([CVE-2022-29211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29211))
457*   Fixes a core dump when loading TFLite models with quantization ([CVE-2022-29212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29212))
458*   Fixes crashes stemming from incomplete validation in signal ops ([CVE-2022-29213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29213))
459*   Fixes a type confusion leading to `CHECK`-failure based denial of service ([CVE-2022-29209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29209))
460*   Updates `curl` to `7.83.1` to handle ([CVE-2022-22576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-22576), ([CVE-2022-27774](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27774), ([CVE-2022-27775](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27775), ([CVE-2022-27776](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27776), ([CVE-2022-27778](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27778), ([CVE-2022-27779](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27779), ([CVE-2022-27780](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27780), ([CVE-2022-27781](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27781), ([CVE-2022-27782](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-27782) and ([CVE-2022-30115](https://cve.mitre.org/cgi-bin/cvename.cgi?name=VE-2022-30115)
461*   Updates `zlib` to `1.2.12` after `1.2.11` was pulled due to [security issue](https://www.openwall.com/lists/oss-security/2022/03/28/1)
462
463# Release 2.8.0
464
465## Major Features and Improvements
466
467*   `tf.lite`:
468
469    *   Added TFLite builtin op support for the following TF ops:
470        *   `tf.raw_ops.Bucketize` op on CPU.
471        *   `tf.where` op for data types
472            `tf.int32`/`tf.uint32`/`tf.int8`/`tf.uint8`/`tf.int64`.
473        *   `tf.random.normal` op for output data type `tf.float32` on CPU.
474        *   `tf.random.uniform` op for output data type `tf.float32` on CPU.
475        *   `tf.random.categorical` op for output data type `tf.int64` on CPU.
476
477*   `tensorflow.experimental.tensorrt`:
478
479    *   `conversion_params` is now deprecated inside `TrtGraphConverterV2` in
480        favor of direct arguments: `max_workspace_size_bytes`, `precision_mode`,
481        `minimum_segment_size`, `maximum_cached_engines`, `use_calibration` and
482        `allow_build_at_runtime`.
483    *   Added a new parameter called `save_gpu_specific_engines` to the
484        `.save()` function inside `TrtGraphConverterV2`. When `False`, the
485        `.save()` function won't save any TRT engines that have been built. When
486        `True` (default), the original behavior is preserved.
487    *   `TrtGraphConverterV2` provides a new API called `.summary()` which
488        outputs a summary of the inference converted by TF-TRT. It namely shows
489        each `TRTEngineOp` with their input(s)' and output(s)' shape and dtype.
490        A detailed version of the summary is available which prints additionally
491        all the TensorFlow OPs included in each of the `TRTEngineOp`s.
492
493*   `tf.tpu.experimental.embedding`:
494
495    *   `tf.tpu.experimental.embedding.FeatureConfig` now takes an additional
496        argument `output_shape` which can specify the shape of the output
497        activation for the feature.
498    *   `tf.tpu.experimental.embedding.TPUEmbedding` now has the same behavior
499        as `tf.tpu.experimental.embedding.serving_embedding_lookup` which can
500        take arbitrary rank of dense and sparse tensor. For ragged tensor,
501        though the input tensor remains to be rank 2, the activations now can be
502        rank 2 or above by specifying the output shape in the feature config or
503        via the build method.
504
505*   Add
506    [`tf.config.experimental.enable_op_determinism`](https://www.tensorflow.org/api_docs/python/tf/config/experimental/enable_op_determinism),
507    which makes TensorFlow ops run deterministically at the cost of performance.
508    Replaces the `TF_DETERMINISTIC_OPS` environmental variable, which is now
509    deprecated. The "Bug Fixes and Other Changes" section lists more
510    determinism-related changes.
511
512*   (Since TF 2.7) Add
513    [PluggableDevice](https://blog.tensorflow.org/2021/06/pluggabledevice-device-plugins-for-TensorFlow.html)
514    support to
515    [TensorFlow Profiler](https://github.com/tensorflow/community/blob/master/rfcs/20210513-pluggable-profiler-for-tensorflow.md).
516
517## Bug Fixes and Other Changes
518
519*   `tf.data`:
520
521    *   Fixed a bug where setting `options.deterministic = False` would only
522        modify one transformation to run non-deterministically, leaving other
523        transformations deterministic. The option will now apply the same across
524        all transformations.
525    *   The optimization `parallel_batch` now becomes default if not disabled by
526        users, which will parallelize copying of batch elements.
527    *   Added the ability for `TensorSliceDataset` to identify and handle inputs
528        that are files. This enables creating hermetic SavedModels when using
529        datasets created from files.
530
531*   `tf.lite`:
532
533    *   Adds GPU Delegation support for serialization to Java API. This boosts
534        initialization time up to 90% when OpenCL is available.
535    *   Deprecated `Interpreter::SetNumThreads`, in favor of
536        `InterpreterBuilder::SetNumThreads`.
537
538*   `tf.keras`:
539
540    *   Adds `tf.compat.v1.keras.utils.get_or_create_layer` to aid migration to
541        TF2 by enabling tracking of nested keras models created in TF1-style,
542        when used with the `tf.compat.v1.keras.utils.track_tf1_style_variables`
543        decorator.
544    *   Added a `tf.keras.layers.experimental.preprocessing.HashedCrossing`
545        layer which applies the hashing trick to the concatenation of crossed
546        scalar inputs. This provides a stateless way to try adding feature
547        crosses of integer or string data to a model.
548    *   Removed `keras.layers.experimental.preprocessing.CategoryCrossing`.
549        Users should migrate to the `HashedCrossing` layer or use
550        `tf.sparse.cross`/`tf.ragged.cross` directly.
551    *   Added additional `standardize` and `split` modes to `TextVectorization`:
552        *   `standardize="lower"` will lowercase inputs.
553        *   `standardize="string_punctuation"` will remove all punctuation.
554        *   `split="character"` will split on every unicode character.
555    *   Added an `output_mode` argument to the `Discretization` and `Hashing`
556        layers with the same semantics as other preprocessing layers. All
557        categorical preprocessing layers now support `output_mode`.
558    *   All preprocessing layer output will follow the compute dtype of a
559        `tf.keras.mixed_precision.Policy`, unless constructed with
560        `output_mode="int"` in which case output will be `tf.int64`. The output
561        type of any preprocessing layer can be controlled individually by
562        passing a `dtype` argument to the layer.
563    *   `tf.random.Generator` for keras initializers and all RNG code.
564    *   Added 3 new APIs for enable/disable/check the usage of
565        `tf.random.Generator` in keras backend, which will be the new backend
566        for all the RNG in Keras. We plan to switch on the new code path by
567        default in tf 2.8, and the behavior change will likely to cause some
568        breakage on user side (eg if the test is checking against some golden
569        number). These 3 APIs will allow user to disable and switch back to
570        legacy behavior if they prefer. In future (eg TF 2.10), we expect to
571        totally remove the legacy code path (stateful random Ops), and these 3
572        APIs will be removed as well.
573    *   `tf.keras.callbacks.experimental.BackupAndRestore` is now available as
574        `tf.keras.callbacks.BackupAndRestore`. The experimental endpoint is
575        deprecated and will be removed in a future release.
576    *   `tf.keras.experimental.SidecarEvaluator` is now available as
577        `tf.keras.utils.SidecarEvaluator`. The experimental endpoint is
578        deprecated and will be removed in a future release.
579    *   Metrics update and collection logic in default `Model.train_step()` is
580        now customizable via overriding `Model.compute_metrics()`.
581    *   Losses computation logic in default `Model.train_step()` is now
582        customizable via overriding `Model.compute_loss()`.
583    *   `jit_compile` added to `Model.compile()` on an opt-in basis to compile
584        the model's training step with [XLA](https://www.tensorflow.org/xla).
585        Note that `jit_compile=True` may not necessarily work for all models.
586
587*   Deterministic Op Functionality:
588
589    *   Fix regression in deterministic selection of deterministic cuDNN
590        convolution algorithms, a regression that was introduced in v2.5. Note
591        that nondeterministic out-of-memory events while selecting algorithms
592        could still lead to nondeterminism, although this is very unlikely. This
593        additional, unlikely source will be eliminated in a later version.
594    *   Add deterministic GPU implementations of:
595        *   `tf.function(jit_compile=True)`'s that use `Scatter`.
596        *   (since v2.7) Stateful ops used in `tf.data.Dataset`
597        *   (since v2.7) `tf.convert_to_tensor` when fed with (sparse)
598            `tf.IndexedSlices` (because it uses `tf.math.unsorted_segment_sum`)
599        *   (since v2.7) `tf.gather` backprop (because `tf.convert_to_tensor`
600            reduces `tf.gather`'s (sparse) `tf.IndexedSlices` gradients into its
601            dense `params` input)
602        *   (since v2.7) `tf.math.segment_mean`
603        *   (since v2.7) `tf.math.segment_prod`
604        *   (since v2.7) `tf.math.segment_sum`
605        *   (since v2.7) `tf.math.unsorted_segment_mean`
606        *   (since v2.7) `tf.math.unsorted_segment_prod`
607        *   (since v2.7) `tf.math.unsorted_segment_sum`
608        *   (since v2.7) `tf.math.unsorted_segment_sqrt`
609        *   (since v2.7) `tf.nn.ctc_loss` (resolved, possibly in prior release,
610            and confirmed with tests)
611        *   (since v2.7)`tf.nn.sparse_softmax_crossentropy_with_logits`
612    *   (since v2.7) Run `tf.scatter_nd` and other related scatter functions,
613        such as `tf.tensor_scatter_nd_update`, on CPU (with significant
614        performance penalty).
615    *   Add determinism-unimplemented exception-throwing to the following ops.
616        When op-determinism is expected (i.e. after
617        `tf.config.experimental.enable_op_determinism` has been called), an
618        attempt to use the specified paths through the following ops on a GPU
619        will cause `tf.errors.UnimplementedError` (with an understandable
620        message), unless otherwise specified, to be thrown.
621        *   `FakeQuantWithMinMaxVarsGradient` and
622            `FakeQuantWithMinMaxVarsPerChannelGradient`
623        *   (since v2.7) `tf.compat.v1.get_seed` if the global random seed has
624            not yet been set (via `tf.random.set_seed`). Throws `RuntimeError`
625            from Python or `InvalidArgument` from C++
626        *   (since v2.7) `tf.compat.v1.nn.fused_batch_norm` backprop to `offset`
627            when `is_training=False`
628        *   (since v2.7) `tf.image.adjust_contrast` forward
629        *   (since v2.7) `tf.image.resize` with `method=ResizeMethod.NEAREST`
630            backprop
631        *   (since v2.7) `tf.linalg.svd`
632        *   (since v2.7) `tf.math.bincount`
633        *   (since v2.7) `tf.nn.depthwise_conv2d` backprop to `filter` when not
634            using cuDNN convolution
635        *   (since v2.7) `tf.nn.dilation2d` gradient
636        *   (since v2.7) `tf.nn.max_pool_with_argmax` gradient
637        *   (since v2.7) `tf.raw_ops.DebugNumericSummary` and
638            `tf.raw_ops.DebugNumericSummaryV2`
639        *   (since v2.7) `tf.timestamp`. Throws `FailedPrecondition`
640        *   (since v2.7) `tf.Variable.scatter_add` (and other scatter methods,
641            both on ref and resource variables)
642        *   (since v2.7) The random-number-generating ops in the `tf.random`
643            module when the global random seed has not yet been set (via
644            `tf.random.set_seed`). Throws `RuntimeError` from Python or
645            `InvalidArgument` from C++
646
647*   TensorFlow-oneDNN no longer supports
648    [explicit use of oneDNN blocked tensor format](https://github.com/tensorflow/tensorflow/pull/53288),
649    e.g., setting the environment variable `TF_ENABLE_MKL_NATIVE_FORMAT` will
650    not have any effect.
651
652*   TensorFlow has been validated on Windows Subsystem for Linux 2 (aka WSL 2)
653    for both GPUs and CPUs.
654
655*   Due to security issues (see section below), all boosted trees code has been
656    deprecated. Users should switch to
657    [TensorFlow Decision Forests](https://github.com/tensorflow/decision-forests).
658    TF's boosted trees code will be eliminated before the branch cut for TF 2.9
659    and will no longer be present since that release.
660
661## Security
662
663*   Fixes a floating point division by 0 when executing convolution operators
664    ([CVE-2022-21725](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21725))
665*   Fixes a heap OOB read in shape inference for `ReverseSequence`
666    ([CVE-2022-21728](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21728))
667*   Fixes a heap OOB access in `Dequantize`
668    ([CVE-2022-21726](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21726))
669*   Fixes an integer overflow in shape inference for `Dequantize`
670    ([CVE-2022-21727](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21727))
671*   Fixes a heap OOB access in `FractionalAvgPoolGrad`
672    ([CVE-2022-21730](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21730))
673*   Fixes an overflow and divide by zero in `UnravelIndex`
674    ([CVE-2022-21729](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21729))
675*   Fixes a type confusion in shape inference for `ConcatV2`
676    ([CVE-2022-21731](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21731))
677*   Fixes an OOM in `ThreadPoolHandle`
678    ([CVE-2022-21732](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21732))
679*   Fixes an OOM due to integer overflow in `StringNGrams`
680    ([CVE-2022-21733](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21733))
681*   Fixes more issues caused by incomplete validation in boosted trees code
682    ([CVE-2021-41208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41208))
683*   Fixes an integer overflows in most sparse component-wise ops
684    ([CVE-2022-23567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23567))
685*   Fixes an integer overflows in `AddManySparseToTensorsMap`
686    ([CVE-2022-23568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23568))
687*   Fixes a number of `CHECK`-failures in `MapStage`
688    ([CVE-2022-21734](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21734))
689*   Fixes a division by zero in `FractionalMaxPool`
690    ([CVE-2022-21735](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21735))
691*   Fixes a number of `CHECK`-fails when building invalid/overflowing tensor
692    shapes
693    ([CVE-2022-23569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23569))
694*   Fixes an undefined behavior in `SparseTensorSliceDataset`
695    ([CVE-2022-21736](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21736))
696*   Fixes an assertion failure based denial of service via faulty bin count
697    operations
698    ([CVE-2022-21737](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21737))
699*   Fixes a reference binding to null pointer in `QuantizedMaxPool`
700    ([CVE-2022-21739](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21739))
701*   Fixes an integer overflow leading to crash in `SparseCountSparseOutput`
702    ([CVE-2022-21738](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21738))
703*   Fixes a heap overflow in `SparseCountSparseOutput`
704    ([CVE-2022-21740](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21740))
705*   Fixes an FPE in `BiasAndClamp` in TFLite
706    ([CVE-2022-23557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23557))
707*   Fixes an FPE in depthwise convolutions in TFLite
708    ([CVE-2022-21741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21741))
709*   Fixes an integer overflow in TFLite array creation
710    ([CVE-2022-23558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23558))
711*   Fixes an integer overflow in TFLite
712    ([CVE-2022-23559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23559))
713*   Fixes a dangerous OOB write in TFLite
714    ([CVE-2022-23561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23561))
715*   Fixes a vulnerability leading to read and write outside of bounds in TFLite
716    ([CVE-2022-23560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23560))
717*   Fixes a set of vulnerabilities caused by using insecure temporary files
718    ([CVE-2022-23563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23563))
719*   Fixes an integer overflow in Range resulting in undefined behavior and OOM
720    ([CVE-2022-23562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23562))
721*   Fixes a vulnerability where missing validation causes `tf.sparse.split` to
722    crash when `axis` is a tuple
723    ([CVE-2021-41206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41206))
724*   Fixes a `CHECK`-fail when decoding resource handles from proto
725    ([CVE-2022-23564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23564))
726*   Fixes a `CHECK`-fail with repeated `AttrDef`
727    ([CVE-2022-23565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23565))
728*   Fixes a heap OOB write in Grappler
729    ([CVE-2022-23566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23566))
730*   Fixes a `CHECK`-fail when decoding invalid tensors from proto
731    ([CVE-2022-23571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23571))
732*   Fixes a null-dereference when specializing tensor type
733    ([CVE-2022-23570](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23570))
734*   Fixes a crash when type cannot be specialized
735    ([CVE-2022-23572](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23572))
736*   Fixes a heap OOB read/write in `SpecializeType`
737    ([CVE-2022-23574](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23574))
738*   Fixes an unitialized variable access in `AssignOp`
739    ([CVE-2022-23573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23573))
740*   Fixes an integer overflow in `OpLevelCostEstimator::CalculateTensorSize`
741    ([CVE-2022-23575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23575))
742*   Fixes an integer overflow in `OpLevelCostEstimator::CalculateOutputSize`
743    ([CVE-2022-23576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23576))
744*   Fixes a null dereference in `GetInitOp`
745    ([CVE-2022-23577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23577))
746*   Fixes a memory leak when a graph node is invalid
747    ([CVE-2022-23578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23578))
748*   Fixes an abort caused by allocating a vector that is too large
749    ([CVE-2022-23580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23580))
750*   Fixes multiple `CHECK`-failures during Grappler's `IsSimplifiableReshape`
751    ([CVE-2022-23581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23581))
752*   Fixes multiple `CHECK`-failures during Grappler's `SafeToRemoveIdentity`
753    ([CVE-2022-23579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23579))
754*   Fixes multiple `CHECK`-failures in `TensorByteSize`
755    ([CVE-2022-23582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23582))
756*   Fixes multiple `CHECK`-failures in binary ops due to type confusion
757    ([CVE-2022-23583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23583))
758*   Fixes a use after free in `DecodePng` kernel
759    ([CVE-2022-23584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23584))
760*   Fixes a memory leak in decoding PNG images
761    ([CVE-2022-23585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23585))
762*   Fixes multiple `CHECK`-fails in `function.cc`
763    ([CVE-2022-23586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23586))
764*   Fixes multiple `CHECK`-fails due to attempting to build a reference tensor
765    ([CVE-2022-23588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23588))
766*   Fixes an integer overflow in Grappler cost estimation of crop and resize
767    operation
768    ([CVE-2022-23587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23587))
769*   Fixes a null pointer dereference in Grappler's `IsConstant`
770    ([CVE-2022-23589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23589))
771*   Fixes a `CHECK` failure in constant folding
772    ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
773*   Fixes a stack overflow due to self-recursive function in `GraphDef`
774    ([CVE-2022-23591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23591))
775*   Fixes a heap OOB access in `RunForwardTypeInference`
776    ([CVE-2022-23592](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23592))
777*   Fixes a crash due to erroneous `StatusOr`
778    ([CVE-2022-23590](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23590))
779*   Fixes multiple crashes and heap OOB accesses in TFG dialect (MLIR)
780    ([CVE-2022-23594](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23594))
781*   Fixes a segfault in `simplifyBroadcast` (MLIR)
782    ([CVE-2022-23593](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23593))
783*   Fixes a null pointer dereference in `BuildXlaCompilationCache` (XLA)
784    ([CVE-2022-23595](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23595))
785*   Updates `icu` to `69.1` to handle
786    [CVE-2020-10531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10531)
787
788## Thanks to our Contributors
789
790This release contains contributions from many people at Google, as well as:
791
7928bitmp3, Adam Lanicek, ag.ramesh, alesapin, Andrew Goodbody, annasuheyla, Ariel
793Elkin, Arnab Dutta, Ben Barsdell, bhack, cfRod, Chengji Yao, Christopher Bate,
794dan, Dan F-M, David Korczynski, DEKHTIARJonathan, dengzhiyuan, Deven Desai,
795Duncan Riach, Eli Osherovich, Ewout Ter Hoeven, ez2take, Faijul Amin, fo40225,
796Frederic Bastien, gadagashwini, Gauri1 Deshpande, Georgiy Manuilov, Guilherme De
797Lázari, Guozhong Zhuang, H1Gdev, homuler, Hongxu Jia, Jacky_Yin, jayfurmanek,
798jgehw, Jhalak Patel, Jinzhe Zeng, Johan Gunnarsson, Jonathan Dekhtiar, Kaixi
799Hou, Kanvi Khanna, Kevin Cheng, Koan-Sin Tan, Kruglov-Dmitry, Kun Lu, Lemo,
800Lequn Chen, long.chen, Louis Sugy, Mahmoud Abuzaina, Mao, Marius Brehler, Mark
801Harfouche, Martin Patz, Maxiwell S. Garcia, Meenakshi Venkataraman, Michael
802Melesse, Mrinal Tyagi, Måns Nilsson, Nathan John Sircombe, Nathan Luehr, Nilesh
803Agarwalla, Oktay Ozturk, Patrice Vignola, Pawel-Polyai, Rama Ketineni, Ramesh
804Sampath, Reza Rahimi, Rob Suderman, Robert Kalmar, Rohit Santhanam, Sachin
805Muradi, Saduf2019, Samuel Marks, Shi,Guangyong, Sidong-Wei, Srinivasan
806Narayanamoorthy, Srishti Srivastava, Steven I Reeves, stevenireeves, Supernovae,
807Tamas Bela Feher, Tao Xu, Thibaut Goetghebuer-Planchon, Thomas Schmeyer,
808tilakrayal, Valery Mironov, Victor Guo, Vignesh Kothapalli, Vishnuvardhan
809Janapati, wamuir, Wang,Quintin, William Muir, William Raveane, Yash Goel, Yimei
810Sun, Yong Tang, Yuduo Wu
811
812# Release 2.7.1
813
814This releases introduces several vulnerability fixes:
815
816*   Fixes a floating point division by 0 when executing convolution operators
817    ([CVE-2022-21725](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21725))
818*   Fixes a heap OOB read in shape inference for `ReverseSequence`
819    ([CVE-2022-21728](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21728))
820*   Fixes a heap OOB access in `Dequantize`
821    ([CVE-2022-21726](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21726))
822*   Fixes an integer overflow in shape inference for `Dequantize`
823    ([CVE-2022-21727](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21727))
824*   Fixes a heap OOB access in `FractionalAvgPoolGrad`
825    ([CVE-2022-21730](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21730))
826*   Fixes an overflow and divide by zero in `UnravelIndex`
827    ([CVE-2022-21729](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21729))
828*   Fixes a type confusion in shape inference for `ConcatV2`
829    ([CVE-2022-21731](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21731))
830*   Fixes an OOM in `ThreadPoolHandle`
831    ([CVE-2022-21732](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21732))
832*   Fixes an OOM due to integer overflow in `StringNGrams`
833    ([CVE-2022-21733](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21733))
834*   Fixes more issues caused by incomplete validation in boosted trees code
835    ([CVE-2021-41208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41208))
836*   Fixes an integer overflows in most sparse component-wise ops
837    ([CVE-2022-23567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23567))
838*   Fixes an integer overflows in `AddManySparseToTensorsMap`
839    ([CVE-2022-23568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23568))
840*   Fixes a number of `CHECK`-failures in `MapStage`
841    ([CVE-2022-21734](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21734))
842*   Fixes a division by zero in `FractionalMaxPool`
843    ([CVE-2022-21735](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21735))
844*   Fixes a number of `CHECK`-fails when building invalid/overflowing tensor
845    shapes
846    ([CVE-2022-23569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23569))
847*   Fixes an undefined behavior in `SparseTensorSliceDataset`
848    ([CVE-2022-21736](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21736))
849*   Fixes an assertion failure based denial of service via faulty bin count
850    operations
851    ([CVE-2022-21737](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21737))
852*   Fixes a reference binding to null pointer in `QuantizedMaxPool`
853    ([CVE-2022-21739](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21739))
854*   Fixes an integer overflow leading to crash in `SparseCountSparseOutput`
855    ([CVE-2022-21738](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21738))
856*   Fixes a heap overflow in `SparseCountSparseOutput`
857    ([CVE-2022-21740](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21740))
858*   Fixes an FPE in `BiasAndClamp` in TFLite
859    ([CVE-2022-23557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23557))
860*   Fixes an FPE in depthwise convolutions in TFLite
861    ([CVE-2022-21741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21741))
862*   Fixes an integer overflow in TFLite array creation
863    ([CVE-2022-23558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23558))
864*   Fixes an integer overflow in TFLite
865    ([CVE-2022-23559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23559))
866*   Fixes a dangerous OOB write in TFLite
867    ([CVE-2022-23561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23561))
868*   Fixes a vulnerability leading to read and write outside of bounds in TFLite
869    ([CVE-2022-23560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23560))
870*   Fixes a set of vulnerabilities caused by using insecure temporary files
871    ([CVE-2022-23563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23563))
872*   Fixes an integer overflow in Range resulting in undefined behavior and OOM
873    ([CVE-2022-23562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23562))
874*   Fixes a vulnerability where missing validation causes `tf.sparse.split` to
875    crash when `axis` is a tuple
876    ([CVE-2021-41206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41206))
877*   Fixes a `CHECK`-fail when decoding resource handles from proto
878    ([CVE-2022-23564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23564))
879*   Fixes a `CHECK`-fail with repeated `AttrDef`
880    ([CVE-2022-23565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23565))
881*   Fixes a heap OOB write in Grappler
882    ([CVE-2022-23566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23566))
883*   Fixes a `CHECK`-fail when decoding invalid tensors from proto
884    ([CVE-2022-23571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23571))
885*   Fixes a null-dereference when specializing tensor type
886    ([CVE-2022-23570](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23570))
887*   Fixes a crash when type cannot be specialized
888    ([CVE-2022-23572](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23572))
889*   Fixes a heap OOB read/write in `SpecializeType`
890    ([CVE-2022-23574](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23574))
891*   Fixes an uninitialized variable access in `AssignOp`
892    ([CVE-2022-23573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23573))
893*   Fixes an integer overflow in `OpLevelCostEstimator::CalculateTensorSize`
894    ([CVE-2022-23575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23575))
895*   Fixes an integer overflow in `OpLevelCostEstimator::CalculateOutputSize`
896    ([CVE-2022-23576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23576))
897*   Fixes a null dereference in `GetInitOp`
898    ([CVE-2022-23577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23577))
899*   Fixes a memory leak when a graph node is invalid
900    ([CVE-2022-23578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23578))
901*   Fixes an abort caused by allocating a vector that is too large
902    ([CVE-2022-23580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23580))
903*   Fixes multiple `CHECK`-failures during Grappler's `IsSimplifiableReshape`
904    ([CVE-2022-23581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23581))
905*   Fixes multiple `CHECK`-failures during Grappler's `SafeToRemoveIdentity`
906    ([CVE-2022-23579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23579))
907*   Fixes multiple `CHECK`-failures in `TensorByteSize`
908    ([CVE-2022-23582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23582))
909*   Fixes multiple `CHECK`-failures in binary ops due to type confusion
910    ([CVE-2022-23583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23583))
911*   Fixes a use after free in `DecodePng` kernel
912    ([CVE-2022-23584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23584))
913*   Fixes a memory leak in decoding PNG images
914    ([CVE-2022-23585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23585))
915*   Fixes multiple `CHECK`-fails in `function.cc`
916    ([CVE-2022-23586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23586))
917*   Fixes multiple `CHECK`-fails due to attempting to build a reference tensor
918    ([CVE-2022-23588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23588))
919*   Fixes an integer overflow in Grappler cost estimation of crop and resize
920    operation
921    ([CVE-2022-23587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23587))
922*   Fixes a null pointer dereference in Grappler's `IsConstant`
923    ([CVE-2022-23589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23589))
924*   Fixes a `CHECK` failure in constant folding
925    ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
926*   Fixes a stack overflow due to self-recursive function in `GraphDef`
927    ([CVE-2022-23591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23591))
928*   Fixes a crash due to erroneous `StatusOr`
929    ([CVE-2022-23590](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23590))
930*   Fixes multiple crashes and heap OOB accesses in TFG dialect (MLIR)
931    ([CVE-2022-23594](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23594))
932*   Fixes a null pointer dereference in `BuildXlaCompilationCache` (XLA)
933    ([CVE-2022-23595](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23595))
934*   Updates `icu` to `69.1` to handle
935    [CVE-2020-10531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10531)
936
937# Release 2.6.3
938
939This releases introduces several vulnerability fixes:
940
941*   Fixes a floating point division by 0 when executing convolution operators
942    ([CVE-2022-21725](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21725))
943*   Fixes a heap OOB read in shape inference for `ReverseSequence`
944    ([CVE-2022-21728](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21728))
945*   Fixes a heap OOB access in `Dequantize`
946    ([CVE-2022-21726](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21726))
947*   Fixes an integer overflow in shape inference for `Dequantize`
948    ([CVE-2022-21727](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21727))
949*   Fixes a heap OOB access in `FractionalAvgPoolGrad`
950    ([CVE-2022-21730](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21730))
951*   Fixes an overflow and divide by zero in `UnravelIndex`
952    ([CVE-2022-21729](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21729))
953*   Fixes a type confusion in shape inference for `ConcatV2`
954    ([CVE-2022-21731](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21731))
955*   Fixes an OOM in `ThreadPoolHandle`
956    ([CVE-2022-21732](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21732))
957*   Fixes an OOM due to integer overflow in `StringNGrams`
958    ([CVE-2022-21733](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21733))
959*   Fixes more issues caused by incomplete validation in boosted trees code
960    ([CVE-2021-41208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41208))
961*   Fixes an integer overflows in most sparse component-wise ops
962    ([CVE-2022-23567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23567))
963*   Fixes an integer overflows in `AddManySparseToTensorsMap`
964    ([CVE-2022-23568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23568))
965*   Fixes a number of `CHECK`-failures in `MapStage`
966    ([CVE-2022-21734](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21734))
967*   Fixes a division by zero in `FractionalMaxPool`
968    ([CVE-2022-21735](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21735))
969*   Fixes a number of `CHECK`-fails when building invalid/overflowing tensor
970    shapes
971    ([CVE-2022-23569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23569))
972*   Fixes an undefined behavior in `SparseTensorSliceDataset`
973    ([CVE-2022-21736](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21736))
974*   Fixes an assertion failure based denial of service via faulty bin count
975    operations
976    ([CVE-2022-21737](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21737))
977*   Fixes a reference binding to null pointer in `QuantizedMaxPool`
978    ([CVE-2022-21739](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21739))
979*   Fixes an integer overflow leading to crash in `SparseCountSparseOutput`
980    ([CVE-2022-21738](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21738))
981*   Fixes a heap overflow in `SparseCountSparseOutput`
982    ([CVE-2022-21740](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21740))
983*   Fixes an FPE in `BiasAndClamp` in TFLite
984    ([CVE-2022-23557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23557))
985*   Fixes an FPE in depthwise convolutions in TFLite
986    ([CVE-2022-21741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21741))
987*   Fixes an integer overflow in TFLite array creation
988    ([CVE-2022-23558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23558))
989*   Fixes an integer overflow in TFLite
990    ([CVE-2022-23559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23559))
991*   Fixes a dangerous OOB write in TFLite
992    ([CVE-2022-23561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23561))
993*   Fixes a vulnerability leading to read and write outside of bounds in TFLite
994    ([CVE-2022-23560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23560))
995*   Fixes a set of vulnerabilities caused by using insecure temporary files
996    ([CVE-2022-23563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23563))
997*   Fixes an integer overflow in Range resulting in undefined behavior and OOM
998    ([CVE-2022-23562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23562))
999*   Fixes a vulnerability where missing validation causes `tf.sparse.split` to
1000    crash when `axis` is a tuple
1001    ([CVE-2021-41206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41206))
1002*   Fixes a `CHECK`-fail when decoding resource handles from proto
1003    ([CVE-2022-23564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23564))
1004*   Fixes a `CHECK`-fail with repeated `AttrDef`
1005    ([CVE-2022-23565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23565))
1006*   Fixes a heap OOB write in Grappler
1007    ([CVE-2022-23566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23566))
1008*   Fixes a `CHECK`-fail when decoding invalid tensors from proto
1009    ([CVE-2022-23571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23571))
1010*   Fixes a null-dereference when specializing tensor type
1011    ([CVE-2022-23570](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23570))
1012*   Fixes a crash when type cannot be specialized
1013    ([CVE-2022-23572](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23572))
1014*   Fixes a heap OOB read/write in `SpecializeType`
1015    ([CVE-2022-23574](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23574))
1016*   Fixes an unitialized variable access in `AssignOp`
1017    ([CVE-2022-23573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23573))
1018*   Fixes an integer overflow in `OpLevelCostEstimator::CalculateTensorSize`
1019    ([CVE-2022-23575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23575))
1020*   Fixes an integer overflow in `OpLevelCostEstimator::CalculateOutputSize`
1021    ([CVE-2022-23576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23576))
1022*   Fixes a null dereference in `GetInitOp`
1023    ([CVE-2022-23577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23577))
1024*   Fixes a memory leak when a graph node is invalid
1025    ([CVE-2022-23578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23578))
1026*   Fixes an abort caused by allocating a vector that is too large
1027    ([CVE-2022-23580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23580))
1028*   Fixes multiple `CHECK`-failures during Grappler's `IsSimplifiableReshape`
1029    ([CVE-2022-23581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23581))
1030*   Fixes multiple `CHECK`-failures during Grappler's `SafeToRemoveIdentity`
1031    ([CVE-2022-23579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23579))
1032*   Fixes multiple `CHECK`-failures in `TensorByteSize`
1033    ([CVE-2022-23582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23582))
1034*   Fixes multiple `CHECK`-failures in binary ops due to type confusion
1035    ([CVE-2022-23583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23583))
1036*   Fixes a use after free in `DecodePng` kernel
1037    ([CVE-2022-23584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23584))
1038*   Fixes a memory leak in decoding PNG images
1039    ([CVE-2022-23585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23585))
1040*   Fixes multiple `CHECK`-fails in `function.cc`
1041    ([CVE-2022-23586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23586))
1042*   Fixes multiple `CHECK`-fails due to attempting to build a reference tensor
1043    ([CVE-2022-23588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23588))
1044*   Fixes an integer overflow in Grappler cost estimation of crop and resize
1045    operation
1046    ([CVE-2022-23587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23587))
1047*   Fixes a null pointer dereference in Grappler's `IsConstant`
1048    ([CVE-2022-23589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23589))
1049*   Fixes a `CHECK` failure in constant folding
1050    ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
1051*   Fixes a stack overflow due to self-recursive function in `GraphDef`
1052    ([CVE-2022-23591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23591))
1053*   Fixes a null pointer dereference in `BuildXlaCompilationCache` (XLA)
1054    ([CVE-2022-23595](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23595))
1055*   Updates `icu` to `69.1` to handle
1056    [CVE-2020-10531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10531)
1057
1058# Release 2.5.3
1059
1060This releases introduces several vulnerability fixes:
1061
1062*   Fixes a floating point division by 0 when executing convolution operators
1063    ([CVE-2022-21725](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21725))
1064*   Fixes a heap OOB read in shape inference for `ReverseSequence`
1065    ([CVE-2022-21728](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21728))
1066*   Fixes a heap OOB access in `Dequantize`
1067    ([CVE-2022-21726](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21726))
1068*   Fixes an integer overflow in shape inference for `Dequantize`
1069    ([CVE-2022-21727](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21727))
1070*   Fixes a heap OOB access in `FractionalAvgPoolGrad`
1071    ([CVE-2022-21730](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21730))
1072*   Fixes an overflow and divide by zero in `UnravelIndex`
1073    ([CVE-2022-21729](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21729))
1074*   Fixes a type confusion in shape inference for `ConcatV2`
1075    ([CVE-2022-21731](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21731))
1076*   Fixes an OOM in `ThreadPoolHandle`
1077    ([CVE-2022-21732](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21732))
1078*   Fixes an OOM due to integer overflow in `StringNGrams`
1079    ([CVE-2022-21733](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21733))
1080*   Fixes more issues caused by incomplete validation in boosted trees code
1081    ([CVE-2021-41208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41208))
1082*   Fixes an integer overflows in most sparse component-wise ops
1083    ([CVE-2022-23567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23567))
1084*   Fixes an integer overflows in `AddManySparseToTensorsMap`
1085    ([CVE-2022-23568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23568))
1086*   Fixes a number of `CHECK`-failures in `MapStage`
1087    ([CVE-2022-21734](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21734))
1088*   Fixes a division by zero in `FractionalMaxPool`
1089    ([CVE-2022-21735](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21735))
1090*   Fixes a number of `CHECK`-fails when building invalid/overflowing tensor
1091    shapes
1092    ([CVE-2022-23569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23569))
1093*   Fixes an undefined behavior in `SparseTensorSliceDataset`
1094    ([CVE-2022-21736](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21736))
1095*   Fixes an assertion failure based denial of service via faulty bin count
1096    operations
1097    ([CVE-2022-21737](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21737))
1098*   Fixes a reference binding to null pointer in `QuantizedMaxPool`
1099    ([CVE-2022-21739](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21739))
1100*   Fixes an integer overflow leading to crash in `SparseCountSparseOutput`
1101    ([CVE-2022-21738](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21738))
1102*   Fixes a heap overflow in `SparseCountSparseOutput`
1103    ([CVE-2022-21740](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21740))
1104*   Fixes an FPE in `BiasAndClamp` in TFLite
1105    ([CVE-2022-23557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23557))
1106*   Fixes an FPE in depthwise convolutions in TFLite
1107    ([CVE-2022-21741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21741))
1108*   Fixes an integer overflow in TFLite array creation
1109    ([CVE-2022-23558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23558))
1110*   Fixes an integer overflow in TFLite
1111    ([CVE-2022-23559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23559))
1112*   Fixes a dangerous OOB write in TFLite
1113    ([CVE-2022-23561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23561))
1114*   Fixes a vulnerability leading to read and write outside of bounds in TFLite
1115    ([CVE-2022-23560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23560))
1116*   Fixes a set of vulnerabilities caused by using insecure temporary files
1117    ([CVE-2022-23563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23563))
1118*   Fixes an integer overflow in Range resulting in undefined behavior and OOM
1119    ([CVE-2022-23562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23562))
1120*   Fixes a vulnerability where missing validation causes `tf.sparse.split` to
1121    crash when `axis` is a tuple
1122    ([CVE-2021-41206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41206))
1123*   Fixes a `CHECK`-fail when decoding resource handles from proto
1124    ([CVE-2022-23564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23564))
1125*   Fixes a `CHECK`-fail with repeated `AttrDef`
1126    ([CVE-2022-23565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23565))
1127*   Fixes a heap OOB write in Grappler
1128    ([CVE-2022-23566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23566))
1129*   Fixes a `CHECK`-fail when decoding invalid tensors from proto
1130    ([CVE-2022-23571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23571))
1131*   Fixes an unitialized variable access in `AssignOp`
1132    ([CVE-2022-23573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23573))
1133*   Fixes an integer overflow in `OpLevelCostEstimator::CalculateTensorSize`
1134    ([CVE-2022-23575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23575))
1135*   Fixes an integer overflow in `OpLevelCostEstimator::CalculateOutputSize`
1136    ([CVE-2022-23576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23576))
1137*   Fixes a null dereference in `GetInitOp`
1138    ([CVE-2022-23577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23577))
1139*   Fixes a memory leak when a graph node is invalid
1140    ([CVE-2022-23578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23578))
1141*   Fixes an abort caused by allocating a vector that is too large
1142    ([CVE-2022-23580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23580))
1143*   Fixes multiple `CHECK`-failures during Grappler's `IsSimplifiableReshape`
1144    ([CVE-2022-23581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23581))
1145*   Fixes multiple `CHECK`-failures during Grappler's `SafeToRemoveIdentity`
1146    ([CVE-2022-23579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23579))
1147*   Fixes multiple `CHECK`-failures in `TensorByteSize`
1148    ([CVE-2022-23582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23582))
1149*   Fixes multiple `CHECK`-failures in binary ops due to type confusion
1150    ([CVE-2022-23583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23583))
1151*   Fixes a use after free in `DecodePng` kernel
1152    ([CVE-2022-23584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23584))
1153*   Fixes a memory leak in decoding PNG images
1154    ([CVE-2022-23585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23585))
1155*   Fixes multiple `CHECK`-fails in `function.cc`
1156    ([CVE-2022-23586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23586))
1157*   Fixes multiple `CHECK`-fails due to attempting to build a reference tensor
1158    ([CVE-2022-23588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23588))
1159*   Fixes an integer overflow in Grappler cost estimation of crop and resize
1160    operation
1161    ([CVE-2022-23587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23587))
1162*   Fixes a null pointer dereference in Grappler's `IsConstant`
1163    ([CVE-2022-23589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23589))
1164*   Fixes a `CHECK` failure in constant folding
1165    ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
1166*   Fixes a stack overflow due to self-recursive function in `GraphDef`
1167    ([CVE-2022-23591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23591))
1168*   Updates `icu` to `69.1` to handle
1169    [CVE-2020-10531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10531)
1170
1171# Release 2.7.0
1172
1173## Breaking Changes
1174
1175*   `tf.keras`:
1176
1177    *   The methods `Model.fit()`, `Model.predict()`, and `Model.evaluate()`
1178        will no longer uprank input data of shape `(batch_size,)` to become
1179        `(batch_size, 1)`. This enables `Model` subclasses to process scalar
1180        data in their `train_step()`/`test_step()`/`predict_step()` methods. \
1181        Note that this change may break certain subclassed models. You can
1182        revert back to the previous behavior by adding upranking yourself in the
1183        `train_step()`/`test_step()`/`predict_step()` methods, e.g. `if
1184        x.shape.rank == 1: x = tf.expand_dims(x, axis=-1)`. Functional models as
1185        well as Sequential models built with an explicit input shape are not
1186        affected.
1187    *   The methods `Model.to_yaml()` and `keras.models.model_from_yaml` have
1188        been replaced to raise a `RuntimeError` as they can be abused to cause
1189        arbitrary code execution. It is recommended to use JSON serialization
1190        instead of YAML, or, a better alternative, serialize to H5.
1191    *   `LinearModel` and `WideDeepModel` are moved to the
1192        `tf.compat.v1.keras.models.` namespace
1193        (`tf.compat.v1.keras.models.LinearModel` and
1194        `tf.compat.v1.keras.models.WideDeepModel`), and their `experimental`
1195        endpoints (`tf.keras.experimental.models.LinearModel` and
1196        `tf.keras.experimental.models.WideDeepModel`) are being deprecated.
1197    *   RNG behavior change for all `tf.keras.initializers` classes. For any
1198        class constructed with a fixed seed, it will no longer generate same
1199        value when invoked multiple times. Instead, it will return different
1200        value, but a deterministic sequence. This change will make the
1201        initialize behavior align between v1 and v2.
1202
1203*   `tf.lite`:
1204
1205    *   Rename fields `SignatureDef` table in schema to maximize the parity with
1206        TF SavedModel's Signature concept.
1207    *   Deprecate Makefile builds. Makefile users need to migrate their builds
1208        to CMake or Bazel. Please refer to the
1209        [Build TensorFlow Lite with CMake](https://www.tensorflow.org/lite/guide/build_cmake)
1210        and
1211        [Build TensorFlow Lite for ARM boards](https://www.tensorflow.org/lite/guide/build_arm)
1212        for the migration.
1213    *   Deprecate `tflite::OpResolver::GetDelegates`. The list returned by
1214        TfLite's `BuiltinOpResolver::GetDelegates` is now always empty. Instead,
1215        recommend using new method `tflite::OpResolver::GetDelegateCreators` in
1216        order to achieve lazy initialization on TfLite delegate instances.
1217
1218*   TF Core:
1219
1220    *   `tf.Graph.get_name_scope()` now always returns a string, as documented.
1221        Previously, when called within `name_scope("")` or `name_scope(None)`
1222        contexts, it returned `None`; now it returns the empty string.
1223    *   `tensorflow/core/ir/` contains a new MLIR-based Graph dialect that is
1224        isomorphic to GraphDef and will be used to replace GraphDef-based (e.g.,
1225        Grappler) optimizations.
1226    *   Deprecated and removed `attrs()` function in shape inference. All
1227        attributes should be queried by name now (rather than range returned) to
1228        enable changing the underlying storage there.
1229    *   The following Python symbols were accidentally added in earlier versions
1230        of TensorFlow and now are removed. Each symbol has a replacement that
1231        should be used instead, but note the replacement's argument names are
1232        different.
1233        *   `tf.quantize_and_dequantize_v4` (accidentally introduced in
1234            TensorFlow 2.4): Use `tf.quantization.quantize_and_dequantize_v2`
1235            instead.
1236        *   `tf.batch_mat_mul_v3` (accidentally introduced in TensorFlow 2.6):
1237            Use `tf.linalg.matmul` instead.
1238        *   `tf.sparse_segment_sum_grad` (accidentally introduced in TensorFlow
1239            2.6): Use `tf.raw_ops.SparseSegmentSumGrad` instead. Directly
1240            calling this op is typically not necessary, as it is automatically
1241            used when computing the gradient of `tf.sparse.segment_sum`.
1242    *   Renaming of tensorflow::int64 to int_64_t in numerous places (the former
1243        is an alias for the latter) which could result in needing to regenerate
1244        selective op registration headers else execution would fail with
1245        unregistered kernels error.
1246
1247*   Modular File System Migration:
1248
1249    *   Support for S3 and HDFS file systems has been migrated to a modular file
1250        systems based approach and is now available in
1251        https://github.com/tensorflow/io. The `tensorflow-io` python package
1252        should be installed for S3 and HDFS support with tensorflow.
1253
1254## Major Features and Improvements
1255
1256*   Improvements to the TensorFlow debugging experience:
1257
1258    *   Previously, TensorFlow error stack traces involved many internal frames,
1259        which could be challenging to read through, while not being actionable
1260        for end users. As of TF 2.7, TensorFlow filters internal frames in most
1261        errors that it raises, to keep stack traces short, readable, and focused
1262        on what's actionable for end users (their own code).
1263
1264    This behavior can be disabled by calling
1265    `tf.debugging.disable_traceback_filtering()`, and can be re-enabled via
1266    `tf.debugging.enable_traceback_filtering()`. If you are debugging a
1267    TensorFlow-internal issue (e.g. to prepare a TensorFlow PR), make sure to
1268    disable traceback filtering. You can check whether this feature is currently
1269    enabled by calling `tf.debugging.is_traceback_filtering_enabled()`.
1270
1271    Note that this feature is only available with Python 3.7 or higher.
1272
1273    *   Improve the informativeness of error messages raised by Keras
1274        `Layer.__call__()`, by adding the full list of argument values passed to
1275        the layer in every exception.
1276
1277*   Introduce the `tf.compat.v1.keras.utils.track_tf1_style_variables`
1278    decorator, which enables using large classes of tf1-style variable_scope,
1279    `get_variable`, and `compat.v1.layer`-based components from within TF2
1280    models running with TF2 behavior enabled.
1281
1282*   `tf.data`:
1283
1284    *   tf.data service now supports auto-sharding. Users specify the sharding
1285        policy with `tf.data.experimental.service.ShardingPolicy` enum. It can
1286        be one of `OFF` (equivalent to today's `"parallel_epochs"` mode),
1287        `DYNAMIC` (equivalent to today's `"distributed_epoch"` mode), or one of
1288        the static sharding policies: `FILE`, `DATA`, `FILE_OR_DATA`, or `HINT`
1289        (corresponding to values of `tf.data.experimental.AutoShardPolicy`).
1290
1291        Static sharding (auto-sharding) requires the number of tf.data service
1292        workers be fixed. Users need to specify the worker addresses in
1293        `tensorflow.data.experimental.DispatcherConfig`.
1294
1295    *   `tf.data.experimental.service.register_dataset` now accepts optional
1296        `compression` argument.
1297
1298*   Keras:
1299
1300    *   `tf.keras.layers.Conv` now includes a public `convolution_op` method.
1301        This method can be used to simplify the implementation of Conv
1302        subclasses. There are two primary ways to use this new method. The first
1303        is to use the method directly in your own `call` method: `python class
1304        StandardizedConv2D(tf.keras.layers.Conv2D): def call(self, inputs):
1305        mean, var = tf.nn.moments(self.kernel, axes=[0, 1, 2], keepdims=True)
1306        return self.convolution_op(inputs, (self.kernel - mean) / tf.sqrt(var +
1307        1e-10))` Alternatively, you can override `convolution_op`: `python class
1308        StandardizedConv2D(tf.keras.Layer): def convolution_op(self, inputs,
1309        kernel): mean, var = tf.nn.moments(kernel, axes=[0, 1, 2],
1310        keepdims=True) # Author code uses std + 1e-5 return
1311        super().convolution_op(inputs, (kernel - mean) / tf.sqrt(var + 1e-10))`
1312    *   Added `merge_state()` method to `tf.keras.metrics.Metric` for use in
1313        distributed computations.
1314    *   Added `sparse` and `ragged` options to
1315        `tf.keras.layers.TextVectorization` to allow for `SparseTensor` and
1316        `RaggedTensor` outputs from the layer.
1317
1318*   distribute.experimental.rpc package:
1319
1320    *   distribute.experimental.rpc package introduces APIs to create a GRPC
1321        based server to register tf.function methods and a GRPC client to invoke
1322        remote registered methods. RPC APIs are intended for multi-client setups
1323        i.e. server and clients are started in separate binaries independently.
1324
1325    *   Example usage to create server: ```python server =
1326        tf.distribute.experimental.rpc.Server.create("grpc", "127.0.0.1:1234")
1327        @tf.function(input_signature=[ tf.TensorSpec([], tf.int32),
1328        tf.TensorSpec([], dtypes.int32) ]) def _remote_multiply(a, b): return
1329        tf.math.multiply(a, b)
1330
1331        server.register("multiply", _remote_multiply) ```
1332
1333    *   Example usage to create client: `python client =
1334        tf.distribute.experimental.rpc.Client.create("grpc", address) a =
1335        tf.constant(2, dtype=tf.int32) b = tf.constant(3, dtype=tf.int32)
1336        result = client.multiply(a, b)`
1337
1338*   `tf.lite`:
1339
1340    *   Add experimental API `experimental_from_jax` to support conversion from
1341        Jax models to TensorFlow Lite.
1342    *   Support uint32 data type for cast op.
1343    *   Support int8 data type for cast op.
1344    *   Add experimental quantization debugger `tf.lite.QuantizationDebugger`
1345    *   Add lite.experimental.authoring.compatible API
1346        *   A Python decorator to provide a way to check TFLite compatibility
1347            issue of `tf.function`. This returns a callable object which
1348            validates TFLite compatibility. If an incompatible operation is
1349            encountered during execution, an exception will be raised with
1350            information about the incompatible ops.
1351    *   Add lite.experimental.Analyzer API
1352        *   An experimental tool to analyze TFLite flatbuffer models. This API
1353            can be used to investigate TFLite model structure and check
1354            compatibility with GPU delegate.
1355
1356*   Extension Types
1357
1358    *   Add experimental API to define new Python classes that can be handled by
1359        TensorFlow APIs. To create an extension type, simply define a Python
1360        class with `tf.experimental.ExtensionType` as its base, and use type
1361        annotations to specify the type for each field. E.g.: `python class
1362        MaskedTensor(tf.experimental.ExtensionType): values: tf.Tensor mask:
1363        tf.Tensor` The `tf.ExtensionType` base class works similarly to
1364        [`typing.NamedTuple`](https://docs.python.org/3/library/typing.html#typing.NamedTuple)
1365        and
1366        [`@dataclasses.dataclass`](https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass)
1367        from the standard Python library.
1368    *   Extension types are supported by Keras, tf.data, TF-hub, SavedModel,
1369        tf.function, control flow ops, py_function, and distribution strategy.
1370    *   Add "dispatch decorators" that can be used to override the default
1371        behavior of TensorFlow ops (such as `tf.add` or `tf.concat`) when they
1372        are applied to ExtensionType values.
1373    *   The `BatchableExtensionType` API can be used to define extension types
1374        that support APIs that make use of batching, such as `tf.data.Dataset`
1375        and `tf.map_fn`.
1376    *   For more information, see the
1377        [Extension types guide](https://www.tensorflow.org/guide/extension_type).
1378
1379## Bug Fixes and Other Changes
1380
1381*   TF Core:
1382    *   Random number generation (RNG) system
1383        *   Add argument `alg` to `tf.random.stateless_*` functions to
1384            explicitly select the RNG algorithm.
1385        *   Add `tf.nn.experimental.stateless_dropout`, a stateless version of
1386            `tf.nn.dropout`.
1387        *   `tf.random.Generator` now can be created inside the scope of
1388            `tf.distribute.experimental.ParameterServerStrategy` and
1389            `tf.distribute.experimental.CentralStorageStrategy`.
1390    *   Add an experimental session config
1391        `tf.experimental.disable_functional_ops_lowering` which disables
1392        functional control flow op lowering optimization. This is useful when
1393        executing within a portable runtime where control flow op kernels may
1394        not be loaded due to selective registration.
1395    *   Add a new experimental argument `experimental_is_anonymous` to
1396        `tf.lookup.StaticHashTable.__init__` to create the table in anonymous
1397        mode. In this mode, the table resource can only be accessed via resource
1398        handles (not resource names) and will be deleted automatically when all
1399        resource handles pointing to it are gone.
1400*   `tf.data`:
1401    *   Introduce the `tf.data.experimental.at` API which provides random access
1402        for input pipelines that consist of transformations that support random
1403        access. The initial set of transformations that support random access
1404        includes:
1405        `tf.data.Dataset.from_tensor_slices`,`tf.data.Dataset.shuffle`,
1406        `tf.data.Dataset.batch`, `tf.data.Dataset.shard`, `tf.data.Dataset.map`,
1407        and `tf.data.Dataset.range`.
1408    *   Promote `tf.data.Options.experimental_deterministic` API to
1409        `tf.data.Options.deterministic` and deprecate the experimental endpoint.
1410    *   Move autotuning options
1411        from`tf.data.Options.experimental_optimization.autotune*` to a newly
1412        created `tf.data.Options.autotune.*` and remove support for
1413        `tf.data.Options.experimental_optimization.autotune_buffers`.
1414    *   Add support for user-defined names of tf.data core Python API, which can
1415        be used to disambiguate tf.data events in TF Profiler Trace Viewer.
1416    *   Promote `tf.data.experimental.sample_from_datasets` API to
1417        `tf.data.Dataset.sample_from_datasets` and deprecate the experimental
1418        endpoint.
1419    *   Added `TF_GPU_ALLOCATOR=cuda_malloc_async` that use cudaMallocAsync from
1420        CUDA 11.2. This could become the default in the future.
1421*   TF SavedModel:
1422    *   Custom gradients are now saved by default. See
1423        `tf.saved_model.SaveOptions` to disable this.
1424    *   The saved_model_cli's `--input_examples` inputs are now restricted to
1425        python literals to avoid code injection.
1426*   XLA:
1427    *   Add a new API that allows custom call functions to signal errors. The
1428        old API will be deprecated in a future release. See
1429        https://www.tensorflow.org/xla/custom_call for details.
1430    *   XLA:GPU reductions are deterministic by default (reductions within
1431        `jit_compile=True` are now deterministic).
1432    *   XLA:GPU works with Horovod (OSS contribution by Trent Lo from NVidia)
1433    *   XLA:CPU and XLA:GPU can compile tf.unique and tf.where when shapes are
1434        provably correct at compile time.
1435*   `tf.saved_model.save`:
1436    *   When saving a model, not specifying a namespace whitelist for custom ops
1437        with a namespace will now default to allowing rather than rejecting them
1438        all.
1439*   Deterministic Op Functionality (enabled by setting the environment variable
1440    `TF_DETERMINISTIC_OPS` to `"true"` or `"1"`):
1441    *   Add determinsitic GPU implementations of:
1442        *   `tf.math.segment_sum`
1443        *   `tf.math.segment_prod`
1444        *   `tf.math.segment_mean`
1445        *   `tf.math.unsorted_segment_sum`
1446        *   `tf.math.unsorted_segment_prod`
1447        *   `tf.math.unsorted_segment_sqrt`
1448        *   `tf.math.unsorted_segment_mean`
1449        *   `tf.gather` backprop
1450        *   `tf.convert_to_tensor` when fed with (sparse) `tf.IndexedSlices`
1451        *   `tf.nn.sparse_softmax_crossentropy_with_logits`
1452        *   `tf.nn.ctc_loss` (resolved, possibly in prior release, and confirmed
1453            with tests)
1454        *   stateful ops used in `tf.data.Dataset`
1455    *   Run the following ops on CPU (with significant performance penalty):
1456        *   `tf.scatter_nd` and other related scatter functions, such as
1457            `tf.tensor_scatter_nd_update`
1458    *   Add determinism-unimplemented exception-throwing to the following ops.
1459        When op-determinism is expected (i.e. when the environment variable
1460        `TF_DETERMINISTIC_OPS` is set to `"true"` or `"1"`), an attempt to use
1461        the specified paths through the following ops on a GPU will cause
1462        `tf.errors.UnimplementedError` (with an understandable message), unless
1463        otherwise specified, to be thrown.
1464        *   `tf.compat.v1.nn.fused_batch_norm` backprop to `offset` when
1465            `is_training=False`
1466        *   `tf.image.adjust_contrast` forward
1467        *   `tf.nn.depthwise_conv2d` backprop to `filter` when not using cuDNN
1468            convolution
1469        *   `tf.image.resize` with `method=ResizeMethod.NEAREST` backprop
1470        *   `tf.math.bincount` - TODO: confirm exception added
1471        *   `tf.raw_ops.DebugNumericSummary` and
1472            `tf.raw_ops.DebugNumericSummaryV2`
1473        *   `tf.Variable.scatter_add` (and other scatter methods, both on ref
1474            and resource variables)
1475        *   `tf.linalg.svd`
1476        *   `tf.nn.dilation2d` gradient
1477        *   `tf.nn.max_pool_with_argmax` gradient
1478        *   `tf.timestamp`. Throws `FailedPrecondition`
1479        *   The random-number-generating ops in the `tf.random` module when the
1480            global random seed has not yet been set (via `tf.random.set_seed`).
1481            Throws `RuntimeError` from Python or `InvalidArgument` from C++
1482        *   `tf.compat.v1.get_seed` if the global random seed has not yet been
1483            set (via `tf.random.set_seed`). Throws `RuntimeError` from Python or
1484            `InvalidArgument` from C++
1485
1486## Security
1487
1488*   Fixes a code injection issue in `saved_model_cli`
1489    ([CVE-2021-41228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41228))
1490*   Fixes a vulnerability due to use of uninitialized value in Tensorflow
1491    ([CVE-2021-41225](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41225))
1492*   Fixes a heap OOB in `FusedBatchNorm` kernels
1493    ([CVE-2021-41223](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41223))
1494*   Fixes an arbitrary memory read in `ImmutableConst`
1495    ([CVE-2021-41227](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41227))
1496*   Fixes a heap OOB in `SparseBinCount`
1497    ([CVE-2021-41226](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41226))
1498*   Fixes a heap OOB in `SparseFillEmptyRows`
1499    ([CVE-2021-41224](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41224))
1500*   Fixes a segfault due to negative splits in `SplitV`
1501    ([CVE-2021-41222](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41222))
1502*   Fixes segfaults and vulnerabilities caused by accesses to invalid memory
1503    during shape inference in `Cudnn*` ops
1504    ([CVE-2021-41221](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41221))
1505*   Fixes a null pointer exception when `Exit` node is not preceded by `Enter`
1506    op
1507    ([CVE-2021-41217](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41217))
1508*   Fixes an integer division by 0 in `tf.raw_ops.AllToAll`
1509    ([CVE-2021-41218](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41218))
1510*   Fixes a use after free and a memory leak in `CollectiveReduceV2`
1511    ([CVE-2021-41220](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41220))
1512*   Fixes an undefined behavior via `nullptr` reference binding in sparse matrix
1513    multiplication
1514    ([CVE-2021-41219](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41219))
1515*   Fixes a heap buffer overflow in `Transpose`
1516    ([CVE-2021-41216](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41216))
1517*   Prevents deadlocks arising from mutually recursive `tf.function` objects
1518    ([CVE-2021-41213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41213))
1519*   Fixes a null pointer exception in `DeserializeSparse`
1520    ([CVE-2021-41215](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41215))
1521*   Fixes an undefined behavior arising from reference binding to `nullptr` in
1522    `tf.ragged.cross`
1523    ([CVE-2021-41214](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41214))
1524*   Fixes a heap OOB read in `tf.ragged.cross`
1525    ([CVE-2021-41212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41212))
1526*   Fixes a heap OOB in shape inference for `QuantizeV2`
1527    ([CVE-2021-41211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41211))
1528*   Fixes a heap OOB read in all `tf.raw_ops.QuantizeAndDequantizeV*` ops
1529    ([CVE-2021-41205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41205))
1530*   Fixes an FPE in `ParallelConcat`
1531    ([CVE-2021-41207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41207))
1532*   Fixes FPE issues in convolutions with zero size filters
1533    ([CVE-2021-41209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41209))
1534*   Fixes a heap OOB read in `tf.raw_ops.SparseCountSparseOutput`
1535    ([CVE-2021-41210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41210))
1536*   Fixes vulnerabilities caused by incomplete validation in boosted trees code
1537    ([CVE-2021-41208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41208))
1538*   Fixes vulnerabilities caused by incomplete validation of shapes in multiple
1539    TF ops
1540    ([CVE-2021-41206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41206))
1541*   Fixes a segfault produced while copying constant resource tensor
1542    ([CVE-2021-41204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41204))
1543*   Fixes a vulnerability caused by unitialized access in
1544    `EinsumHelper::ParseEquation`
1545    ([CVE-2021-41201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41201))
1546*   Fixes several vulnerabilities and segfaults caused by missing validation
1547    during checkpoint loading
1548    ([CVE-2021-41203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41203))
1549*   Fixes an overflow producing a crash in `tf.range`
1550    ([CVE-2021-41202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41202))
1551*   Fixes an overflow producing a crash in `tf.image.resize` when size is large
1552    ([CVE-2021-41199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41199))
1553*   Fixes an overflow producing a crash in `tf.tile` when tiling tensor is large
1554    ([CVE-2021-41198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41198))
1555*   Fixes a vulnerability produced due to incomplete validation in
1556    `tf.summary.create_file_writer`
1557    ([CVE-2021-41200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41200))
1558*   Fixes multiple crashes due to overflow and `CHECK`-fail in ops with large
1559    tensor shapes
1560    ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
1561*   Fixes a crash in `max_pool3d` when size argument is 0 or negative
1562    ([CVE-2021-41196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41196))
1563*   Fixes a crash in `tf.math.segment_*` operations
1564    ([CVE-2021-41195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41195))
1565*   Updates `curl` to `7.78.0` to handle
1566    [CVE-2021-22922](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22922),
1567    [CVE-2021-22923](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22923),
1568    [CVE-2021-22924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22924),
1569    [CVE-2021-22925](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22925),
1570    and
1571    [CVE-2021-22926](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22926).
1572
1573## Thanks to our Contributors
1574
1575This release contains contributions from many people at Google, as well as:
1576
15778bitmp3, Abhilash Majumder, abhilash1910, AdeshChoudhar, Adrian Garcia
1578Badaracco, Adrian Ratiu, ag.ramesh, Aleksandr Nikolaev, Alexander Bosch,
1579Alexander Grund, Annie Tallund, Anush Elangovan, Artem Sokolovskii, azazhu,
1580Balint Cristian, Bas Aarts, Ben Barsdell, bhack, cfRod, Cheney-Wang, Cheng Ren,
1581Christopher Bate, collin, Danila Bespalov, David Datascientist, Deven Desai,
1582Duncan Riach, Ehsan Kia, Ellie, Fan Du, fo40225, Frederic Bastien, fsx950223,
1583Gauri1 Deshpande, geetachavan1, Guillaume Klein, guozhong.zhuang, helen, Håkon
1584Sandsmark, japm48, jgehw, Jinzhe Zeng, Jonathan Dekhtiar, Kai Zhu, Kaixi Hou,
1585Kanvi Khanna, Koan-Sin Tan, Koki Ibukuro, Kulin Seth, KumaTea, Kun-Lu, Lemo,
1586lipracer, liuyuanqiang, Mahmoud Abuzaina, Marius Brehler, Maxiwell S. Garcia,
1587mdfaijul, metarutaiga, Michal Szutenberg, nammbash, Neil Girdhar, Nishidha
1588Panpaliya, Nyadla-Sys, Patrice Vignola, Peter Kasting, Philipp Hack, PINTO0309,
1589Prateek Gupta, puneeshkhanna, Rahul Butani, Rajeshwar Reddy T, Reza Rahimi,
1590RinozaJiffry, rmothukuru, Rohit Santhanam, Saduf2019, Samuel Marks, sclarkson,
1591Sergii Khomenko, Sheng, Yang, Sidong-Wei, slowy07, Srinivasan Narayanamoorthy,
1592Srishti Srivastava, stanley, Stella Alice Schlotter, Steven I Reeves,
1593stevenireeves, svobora, Takayoshi Koizumi, Tamas Bela Feher, Thibaut
1594Goetghebuer-Planchon, Trent Lo, Twice, Varghese, Jojimon, Vishnuvardhan
1595Janapati, Wang Yanzhang, Wang,Quintin, William Muir, William Raveane, Yasir
1596Modak, Yasuhiro Matsumoto, Yi Li, Yong Tang, zhaozheng09, Zhoulong Jiang,
1597zzpmiracle
1598
1599# Release 2.6.2
1600
1601Fixes an issue where `keras`, `tensorflow_estimator` and `tensorboard` were
1602missing proper upper bounds and resulted in broken installs after TF 2.7 release
1603
1604# Release 2.6.1
1605
1606This release introduces several vulnerability fixes:
1607
1608*   Fixes a code injection issue in `saved_model_cli`
1609    ([CVE-2021-41228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41228))
1610*   Fixes a vulnerability due to use of uninitialized value in Tensorflow
1611    ([CVE-2021-41225](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41225))
1612*   Fixes a heap OOB in `FusedBatchNorm` kernels
1613    ([CVE-2021-41223](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41223))
1614*   Fixes an arbitrary memory read in `ImmutableConst`
1615    ([CVE-2021-41227](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41227))
1616*   Fixes a heap OOB in `SparseBinCount`
1617    ([CVE-2021-41226](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41226))
1618*   Fixes a heap OOB in `SparseFillEmptyRows`
1619    ([CVE-2021-41224](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41224))
1620*   Fixes a segfault due to negative splits in `SplitV`
1621    ([CVE-2021-41222](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41222))
1622*   Fixes segfaults and vulnerabilities caused by accesses to invalid memory
1623    during shape inference in `Cudnn*` ops
1624    ([CVE-2021-41221](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41221))
1625*   Fixes a null pointer exception when `Exit` node is not preceded by `Enter`
1626    op
1627    ([CVE-2021-41217](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41217))
1628*   Fixes an integer division by 0 in `tf.raw_ops.AllToAll`
1629    ([CVE-2021-41218](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41218))
1630*   Fixes a use after free and a memory leak in `CollectiveReduceV2`
1631    ([CVE-2021-41220](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41220))
1632*   Fixes an undefined behavior via `nullptr` reference binding in sparse matrix
1633    multiplication
1634    ([CVE-2021-41219](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41219))
1635*   Fixes a heap buffer overflow in `Transpose`
1636    ([CVE-2021-41216](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41216))
1637*   Prevents deadlocks arising from mutually recursive `tf.function` objects
1638    ([CVE-2021-41213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41213))
1639*   Fixes a null pointer exception in `DeserializeSparse`
1640    ([CVE-2021-41215](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41215))
1641*   Fixes an undefined behavior arising from reference binding to `nullptr` in
1642    `tf.ragged.cross`
1643    ([CVE-2021-41214](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41214))
1644*   Fixes a heap OOB read in `tf.ragged.cross`
1645    ([CVE-2021-41212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41212))
1646*   Fixes a heap OOB in shape inference for `QuantizeV2`
1647    ([CVE-2021-41211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41211))
1648*   Fixes a heap OOB read in all `tf.raw_ops.QuantizeAndDequantizeV*` ops
1649    ([CVE-2021-41205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41205))
1650*   Fixes an FPE in `ParallelConcat`
1651    ([CVE-2021-41207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41207))
1652*   Fixes FPE issues in convolutions with zero size filters
1653    ([CVE-2021-41209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41209))
1654*   Fixes a heap OOB read in `tf.raw_ops.SparseCountSparseOutput`
1655    ([CVE-2021-41210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41210))
1656*   Fixes vulnerabilities caused by incomplete validation in boosted trees code
1657    ([CVE-2021-41208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41208))
1658*   Fixes vulnerabilities caused by incomplete validation of shapes in multiple
1659    TF ops
1660    ([CVE-2021-41206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41206))
1661*   Fixes a segfault produced while copying constant resource tensor
1662    ([CVE-2021-41204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41204))
1663*   Fixes a vulnerability caused by unitialized access in
1664    `EinsumHelper::ParseEquation`
1665    ([CVE-2021-41201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41201))
1666*   Fixes several vulnerabilities and segfaults caused by missing validation
1667    during checkpoint loading
1668    ([CVE-2021-41203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41203))
1669*   Fixes an overflow producing a crash in `tf.range`
1670    ([CVE-2021-41202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41202))
1671*   Fixes an overflow producing a crash in `tf.image.resize` when size is large
1672    ([CVE-2021-41199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41199))
1673*   Fixes an overflow producing a crash in `tf.tile` when tiling tensor is large
1674    ([CVE-2021-41198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41198))
1675*   Fixes a vulnerability produced due to incomplete validation in
1676    `tf.summary.create_file_writer`
1677    ([CVE-2021-41200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41200))
1678*   Fixes multiple crashes due to overflow and `CHECK`-fail in ops with large
1679    tensor shapes
1680    ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
1681*   Fixes a crash in `max_pool3d` when size argument is 0 or negative
1682    ([CVE-2021-41196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41196))
1683*   Fixes a crash in `tf.math.segment_*` operations
1684    ([CVE-2021-41195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41195))
1685*   Updates `curl` to `7.78.0` to handle
1686    [CVE-2021-22922](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22922),
1687    [CVE-2021-22923](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22923),
1688    [CVE-2021-22924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22924),
1689    [CVE-2021-22925](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22925),
1690    and
1691    [CVE-2021-22926](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22926).
1692
1693# Release 2.6.0
1694
1695## Breaking Changes
1696
1697*   `tf.train.experimental.enable_mixed_precision_graph_rewrite` is removed, as
1698    the API only works in graph mode and is not customizable. The function is
1699    still accessible under
1700    `tf.compat.v1.mixed_precision.enable_mixed_precision_graph_rewrite`, but it
1701    is recommended to use the
1702    [Keras mixed precision API](https://www.tensorflow.org/guide/mixed_precision)
1703    instead.
1704
1705*   `tf.lite`:
1706
1707    *   Remove `experimental.nn.dynamic_rnn`, `experimental.nn.TfLiteRNNCell`
1708        and `experimental.nn.TfLiteLSTMCell` since they're no longer supported.
1709        It's recommended to just use
1710        [keras lstm](https://www.tensorflow.org/api_docs/python/tf/keras/layers/LSTM)
1711        instead.
1712
1713*   `tf.keras`:
1714
1715    *   Keras been split into a separate PIP package (`keras`), and its code has
1716        been moved to the GitHub
1717        repository[keras-team/keras](http://github.com/keras-team/keras). The
1718        API endpoints for `tf.keras` stay unchanged, but are now backed by the
1719        `keras` PIP package. The existing code in tensorflow/python/keras is a
1720        staled copy and will be removed in future release (2.7). Please remove
1721        any imports to `tensorflow.python.keras` and replace them with public
1722        tf.keras API instead.
1723    *   The methods `Model.to_yaml()` and `keras.models.model_from_yaml` have
1724        been replaced to raise a `RuntimeError` as they can be abused to cause
1725        arbitrary code execution. It is recommended to use JSON serialization
1726        instead of YAML, or, a better alternative, serialize to H5.
1727
1728## Known Caveats
1729
1730*   TF Core:
1731    *   A longstanding bug in `tf.while_loop`, which caused it to execute
1732        sequentially, even when `parallel_iterations>1`, has now been fixed.
1733        However, the increased parallelism may result in increased memory use.
1734        Users who experience unwanted regressions should reset their
1735        `while_loop`'s `parallel_iterations` value to 1, which is consistent
1736        with prior behavior.
1737
1738## Major Features and Improvements
1739
1740*   `tf.keras`:
1741
1742    *   Keras has been split into a separate PIP package (`keras`), and its code
1743        has been moved to the GitHub repository
1744        [keras-team/keras](http://github.com/keras-team/keras). The API
1745        endpoints for `tf.keras` stay unchanged, but are now backed by the
1746        `keras` PIP package. All Keras-related PRs and issues should now be
1747        directed to the GitHub repository.
1748        [keras-team/keras](http://github.com/keras-team/keras).
1749    *   `tf.keras.utils.experimental.DatasetCreator` now takes an optional
1750        `tf.distribute.InputOptions` for specific options when used with
1751        distribution.
1752    *   `tf.keras.experimental.SidecarEvaluator` is now available for a program
1753        intended to be run on an evaluator task, which is commonly used to
1754        supplement a training cluster running with
1755        `tf.distribute.experimental.ParameterServerStrategy` (see
1756        `https://www.tensorflow.org/tutorials/distribute/parameter_server_training).
1757        It can also be used with single-worker training or other strategies. See
1758        docstring for more info.
1759    *   Preprocessing layers moved from experimental to core.
1760        *   Import paths moved from `tf.keras.layers.preprocessing.experimental`
1761            to `tf.keras.layers`.
1762    *   Updates to Preprocessing layers API for consistency and clarity:
1763        *   `StringLookup` and `IntegerLookup` default for `mask_token` changed
1764            to `None`. This matches the default masking behavior of `Hashing`
1765            and `Embedding` layers. To keep existing behavior, pass
1766            `mask_token=""` during layer creation.
1767        *   Renamed `"binary"` output mode to `"multi_hot"` for
1768            `CategoryEncoding`, `StringLookup`, `IntegerLookup`, and
1769            `TextVectorization`. Multi-hot encoding will no longer automatically
1770            uprank rank 1 inputs, so these layers can now multi-hot encode
1771            unbatched multi-dimensional samples.
1772        *   Added a new output mode `"one_hot"` for `CategoryEncoding`,
1773            `StringLookup`, `IntegerLookup`, which will encode each element in
1774            an input batch individually, and automatically append a new output
1775            dimension if necessary. Use this mode on rank 1 inputs for the old
1776            `"binary"` behavior of one-hot encoding a batch of scalars.
1777        *   `Normalization` will no longer automatically uprank rank 1 inputs,
1778            allowing normalization of unbatched multi-dimensional samples.
1779
1780*   `tf.lite`:
1781
1782    *   The recommended Android NDK version for building TensorFlow Lite has
1783        been changed from r18b to r19c.
1784    *   Supports int64 for mul.
1785    *   Supports native variable builtin ops - ReadVariable, AssignVariable.
1786    *   Converter:
1787        *   Experimental support for variables in TFLite. To enable through
1788            conversion, users need to set
1789            `experimental_enable_resource_variables` on tf.lite.TFLiteConverter
1790            to True. Note: mutable variables is only available using
1791            `from_saved_model` in this release, support for other methods is
1792            coming soon.
1793        *   Old Converter (TOCO) is getting removed from next release. It's been
1794            deprecated for few releases already.
1795
1796*   `tf.saved_model`:
1797
1798    *   SavedModels can now save custom gradients. Use the option
1799        `tf.saved_model.SaveOption(experimental_custom_gradients=True)` to
1800        enable this feature. The documentation in
1801        [Advanced autodiff](https://www.tensorflow.org/guide/advanced_autodiff#custom_gradients)
1802        has been updated.
1803    *   Object metadata has now been deprecated and no longer saved to the
1804        SavedModel.
1805
1806*   TF Core:
1807
1808    *   Added `tf.config.experimental.reset_memory_stats` to reset the tracked
1809        peak memory returned by `tf.config.experimental.get_memory_info`.
1810
1811*   `tf.data`:
1812
1813    *   Added `target_workers` param to `data_service_ops.from_dataset_id` and
1814        `data_service_ops.distribute`. Users can specify `"AUTO"`, `"ANY"`, or
1815        `"LOCAL"` (case insensitive). If `"AUTO"`, tf.data service runtime
1816        decides which workers to read from. If `"ANY"`, TF workers read from any
1817        tf.data service workers. If `"LOCAL"`, TF workers will only read from
1818        local in-processs tf.data service workers. `"AUTO"` works well for most
1819        cases, while users can specify other targets. For example, `"LOCAL"`
1820        would help avoid RPCs and data copy if every TF worker colocates with a
1821        tf.data service worker. Currently, `"AUTO"` reads from any tf.data
1822        service workers to preserve existing behavior. The default value is
1823        `"AUTO"`.
1824
1825## Bug Fixes and Other Changes
1826
1827*   TF Core:
1828    *   Added `tf.lookup.experimental.MutableHashTable`, which provides a
1829        generic mutable hash table implementation.
1830        *   Compared to `tf.lookup.experimental.DenseHashTable` this offers
1831            lower overall memory usage, and a cleaner API. It does not require
1832            specifying a `delete_key` and `empty_key` that cannot be inserted
1833            into the table.
1834    *   Added support for specifying number of subdivisions in all reduce host
1835        collective. This parallelizes work on CPU and speeds up the collective
1836        performance. Default behavior is unchanged.
1837    *   Add an option `perturb_singular` to `tf.linalg.tridiagonal_solve` that
1838        allows solving linear systems with a numerically singular tridiagonal
1839        matrix, e.g. for use in inverse iteration.
1840    *   Added `tf.linalg.eigh_tridiagonal` that computes the eigenvalues of a
1841        Hermitian tridiagonal matrix.
1842    *   `tf.constant` now places its output on the current default device.
1843    *   SavedModel
1844        *   Added `tf.saved_model.experimental.TrackableResource`, which allows
1845            the creation of custom wrapper objects for resource tensors.
1846        *   Added a SavedModel load option to allow restoring partial
1847            checkpoints into the SavedModel. See
1848            [`tf.saved_model.LoadOptions`](https://www.tensorflow.org/api_docs/python/tf/saved_model/LoadOptions)
1849            for details.
1850    *   Added a new op `SparseSegmentSumGrad` to match the other sparse segment
1851        gradient ops and avoid an extra gather operation that was in the
1852        previous gradient implementation.
1853    *   Added a new session config setting `internal_fragmentation_fraction`,
1854        which controls when the BFC Allocator needs to split an oversized chunk
1855        to satisfy an allocation request.
1856    *   Added `tf.get_current_name_scope()` which returns the current full name
1857        scope string that will be prepended to op names.
1858*   `tf.data`:
1859    *   Promoting `tf.data.experimental.bucket_by_sequence_length` API to
1860        `tf.data.Dataset.bucket_by_sequence_length` and deprecating the
1861        experimental endpoint.
1862    *   Promoting `tf.data.experimental.get_single_element` API to
1863        `tf.data.Dataset.get_single_element` and deprecating the experimental
1864        endpoint.
1865    *   Promoting `tf.data.experimental.group_by_window` API to
1866        `tf.data.Dataset.group_by_window` and deprecating the experimental
1867        endpoint.
1868    *   Promoting `tf.data.experimental.RandomDataset` API to
1869        `tf.data.Dataset.random` and deprecating the experimental endpoint.
1870    *   Promoting `tf.data.experimental.scan` API to `tf.data.Dataset.scan` and
1871        deprecating the experimental endpoint.
1872    *   Promoting `tf.data.experimental.snapshot` API to
1873        `tf.data.Dataset.shapshot` and deprecating the experimental endpoint.
1874    *   Promoting `tf.data.experimental.take_while` API to
1875        `tf.data.Dataset.take_while` and deprecating the experimental endpoint.
1876    *   Promoting `tf.data.experimental.ThreadingOptions` API to
1877        `tf.data.ThreadingOptions` and deprecating the experimental endpoint.
1878    *   Promoting `tf.data.experimental.unique` API to `tf.data.Dataset.unique`
1879        and deprecating the experimental endpoint.
1880    *   Added `stop_on_empty_dataset` parameter to `sample_from_datasets` and
1881        `choose_from_datasets`. Setting `stop_on_empty_dataset=True` will stop
1882        sampling if it encounters an empty dataset. This preserves the sampling
1883        ratio throughout training. The prior behavior was to continue sampling,
1884        skipping over exhausted datasets, until all datasets are exhausted. By
1885        default, the original behavior (`stop_on_empty_dataset=False`) is
1886        preserved.
1887    *   Removed previously deprecated tf.data statistics related APIs:
1888        *   `tf.data.Options.experimental_stats`
1889        *   `tf.data.experimental.StatsAggregator`
1890        *   `tf.data.experimental.StatsOptions.*`
1891        *   `tf.data.experimental.bytes_produced_stats`
1892        *   `tf.data.experimental.latency_stats`
1893    *   Removed the following experimental tf.data optimization APIs:
1894        *   `tf.data.experimental.MapVectorizationOptions.*`
1895        *   `tf.data.experimental.OptimizationOptions.filter_with_random_uniform_fusion`
1896        *   `tf.data.experimental.OptimizationOptions.hoist_random_uniform`
1897        *   `tf.data.experimental.OptimizationOptions.map_vectorization` *
1898            `tf.data.experimental.OptimizationOptions.reorder_data_discarding_ops`
1899*   `tf.keras`:
1900    *   Fix usage of `__getitem__` slicing in Keras Functional APIs when the
1901        inputs are `RaggedTensor` objects.
1902    *   Add `keepdims` argument to all `GlobalPooling` layers.
1903    *   Add `include_preprocessing` argument to `MobileNetV3` architectures to
1904        control the inclusion of `Rescaling` layer in the model.
1905    *   Add optional argument (`force`) to `make_(train|test|predict)_funtion`
1906        methods to skip the cached function and generate a new one. This is
1907        useful to regenerate in a single call the compiled training function
1908        when any `.trainable` attribute of any model's layer has changed.
1909    *   Models now have a `save_spec` property which contains the `TensorSpec`
1910        specs for calling the model. This spec is automatically saved when the
1911        model is called for the first time.
1912*   `tf.linalg`:
1913    *   Add `CompositeTensor` as a base class to `LinearOperator`.
1914*   `tf.lite`:
1915    *   Fix mean op reference quantization rounding issue.
1916    *   Added `framework_stable` BUILD target, which links in only the
1917        non-experimental TF Lite APIs.
1918    *   Remove deprecated Java `Interpreter` methods:
1919        *   `modifyGraphWithDelegate` - Use `Interpreter.Options.addDelegate`
1920        *   `setNumThreads` - Use `Interpreter.Options.setNumThreads`
1921    *   Add Conv3DTranspose as a builtin op.
1922*   `tf.summary`:
1923    *   Fix `tf.summary.should_record_summaries()` so it correctly reflects when
1924        summaries will be written, even when `tf.summary.record_if()` is not n
1925        effect, by returning True tensor if default writer is present.
1926*   Grappler:
1927    *   Disable default Grappler optimization timeout to make the optimization
1928        pipeline deterministic. This may lead to increased model loading time,
1929        because time spent in graph optimizations is now unbounded (was 20
1930        minutes).
1931*   Deterministic Op Functionality (enabled by setting `TF_DETERMINISTIC_OPS` to
1932    `"true"` or `"1"`):
1933    *   Add a deterministic GPU implementation of
1934        `tf.nn.softmax_cross_entropy_with_logits`. See PR
1935        [49178](https://github.com/tensorflow/tensorflow/pull/49178).
1936    *   Add a deterministic CPU implementation of `tf.image.crop_and_resize`.
1937        See PR [48905](https://github.com/tensorflow/tensorflow/pull/48905).
1938    *   Add determinism-unimplemented exception-throwing to the following ops.
1939        When op-determinism is expected, an attempt to use the specified paths
1940        through the following ops on a GPU will cause
1941        `tf.errors.UnimplementedError` (with an understandable message) to be
1942        thrown.
1943        *   `tf.nn.sparse_softmax_cross_entropy_with_logits` forwards and/or
1944            backwards. See PR
1945            [47925](https://github.com/tensorflow/tensorflow/pull/47925).
1946        *   `tf.image.crop_and_resize` gradient w.r.t. either `image` or
1947            `boxes`. See PR
1948            [48905](https://github.com/tensorflow/tensorflow/pull/48905).
1949        *   `tf.sparse.sparse_dense_matmul` forwards. See PR
1950            [50355](https://github.com/tensorflow/tensorflow/pull/50355).
1951
1952## Security
1953
1954*   Fixes a heap out of bounds access in sparse reduction operations
1955    ([CVE-2021-37635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37635))
1956*   Fixes a floating point exception in `SparseDenseCwiseDiv`
1957    ([CVE-2021-37636](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37636))
1958*   Fixes a null pointer dereference in `CompressElement`
1959    ([CVE-2021-37637](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37637))
1960*   Fixes a null pointer dereference in `RaggedTensorToTensor`
1961    ([CVE-2021-37638](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37638))
1962*   Fixes a null pointer dereference and a heap OOB read arising from operations
1963    restoring tensors
1964    ([CVE-2021-37639](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37639))
1965*   Fixes an integer division by 0 in sparse reshaping
1966    ([CVE-2021-37640](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37640))
1967*   Fixes a division by 0 in `ResourceScatterDiv`
1968    ([CVE-2021-37642](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37642))
1969*   Fixes a heap OOB in `RaggedGather`
1970    ([CVE-2021-37641](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37641))
1971*   Fixes a `std::abort` raised from `TensorListReserve`
1972    ([CVE-2021-37644](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37644))
1973*   Fixes a null pointer dereference in `MatrixDiagPartOp`
1974    ([CVE-2021-37643](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37643))
1975*   Fixes an integer overflow due to conversion to unsigned
1976    ([CVE-2021-37645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37645))
1977*   Fixes a bad allocation error in `StringNGrams` caused by integer conversion
1978    ([CVE-2021-37646](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37646))
1979*   Fixes a null pointer dereference in `SparseTensorSliceDataset`
1980    ([CVE-2021-37647](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37647))
1981*   Fixes an incorrect validation of `SaveV2` inputs
1982    ([CVE-2021-37648](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37648))
1983*   Fixes a null pointer dereference in `UncompressElement`
1984    ([CVE-2021-37649](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37649))
1985*   Fixes a segfault and a heap buffer overflow in
1986    `{Experimental,}DatasetToTFRecord`
1987    ([CVE-2021-37650](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37650))
1988*   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
1989    ([CVE-2021-37651](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37651))
1990*   Fixes a use after free in boosted trees creation
1991    ([CVE-2021-37652](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37652))
1992*   Fixes a division by 0 in `ResourceGather`
1993    ([CVE-2021-37653](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37653))
1994*   Fixes a heap OOB and a `CHECK` fail in `ResourceGather`
1995    ([CVE-2021-37654](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37654))
1996*   Fixes a heap OOB in `ResourceScatterUpdate`
1997    ([CVE-2021-37655](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37655))
1998*   Fixes an undefined behavior arising from reference binding to nullptr in
1999    `RaggedTensorToSparse`
2000    ([CVE-2021-37656](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37656))
2001*   Fixes an undefined behavior arising from reference binding to nullptr in
2002    `MatrixDiagV*` ops
2003    ([CVE-2021-37657](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37657))
2004*   Fixes an undefined behavior arising from reference binding to nullptr in
2005    `MatrixSetDiagV*` ops
2006    ([CVE-2021-37658](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37658))
2007*   Fixes an undefined behavior arising from reference binding to nullptr and
2008    heap OOB in binary cwise ops
2009    ([CVE-2021-37659](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37659))
2010*   Fixes a division by 0 in inplace operations
2011    ([CVE-2021-37660](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37660))
2012*   Fixes a crash caused by integer conversion to unsigned
2013    ([CVE-2021-37661](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37661))
2014*   Fixes an undefined behavior arising from reference binding to nullptr in
2015    boosted trees
2016    ([CVE-2021-37662](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37662))
2017*   Fixes a heap OOB in boosted trees
2018    ([CVE-2021-37664](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37664))
2019*   Fixes vulnerabilities arising from incomplete validation in `QuantizeV2`
2020    ([CVE-2021-37663](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37663))
2021*   Fixes vulnerabilities arising from incomplete validation in MKL
2022    requantization
2023    ([CVE-2021-37665](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37665))
2024*   Fixes an undefined behavior arising from reference binding to nullptr in
2025    `RaggedTensorToVariant`
2026    ([CVE-2021-37666](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37666))
2027*   Fixes an undefined behavior arising from reference binding to nullptr in
2028    unicode encoding
2029    ([CVE-2021-37667](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37667))
2030*   Fixes an FPE in `tf.raw_ops.UnravelIndex`
2031    ([CVE-2021-37668](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37668))
2032*   Fixes a crash in NMS ops caused by integer conversion to unsigned
2033    ([CVE-2021-37669](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37669))
2034*   Fixes a heap OOB in `UpperBound` and `LowerBound`
2035    ([CVE-2021-37670](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37670))
2036*   Fixes an undefined behavior arising from reference binding to nullptr in map
2037    operations
2038    ([CVE-2021-37671](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37671))
2039*   Fixes a heap OOB in `SdcaOptimizerV2`
2040    ([CVE-2021-37672](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37672))
2041*   Fixes a `CHECK`-fail in `MapStage`
2042    ([CVE-2021-37673](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37673))
2043*   Fixes a vulnerability arising from incomplete validation in `MaxPoolGrad`
2044    ([CVE-2021-37674](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37674))
2045*   Fixes an undefined behavior arising from reference binding to nullptr in
2046    shape inference
2047    ([CVE-2021-37676](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37676))
2048*   Fixes a division by 0 in most convolution operators
2049    ([CVE-2021-37675](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37675))
2050*   Fixes vulnerabilities arising from missing validation in shape inference for
2051    `Dequantize`
2052    ([CVE-2021-37677](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37677))
2053*   Fixes an arbitrary code execution due to YAML deserialization
2054    ([CVE-2021-37678](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37678))
2055*   Fixes a heap OOB in nested `tf.map_fn` with `RaggedTensor`s
2056    ([CVE-2021-37679](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37679))
2057*   Fixes a division by zero in TFLite
2058    ([CVE-2021-37680](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37680))
2059*   Fixes an NPE in TFLite
2060    ([CVE-2021-37681](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37681))
2061*   Fixes a vulnerability arising from use of unitialized value in TFLite
2062    ([CVE-2021-37682](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37682))
2063*   Fixes an FPE in TFLite division operations
2064    ([CVE-2021-37683](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37683))
2065*   Fixes an FPE in TFLite pooling operations
2066    ([CVE-2021-37684](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37684))
2067*   Fixes an infinite loop in TFLite
2068    ([CVE-2021-37686](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37686))
2069*   Fixes a heap OOB in TFLite
2070    ([CVE-2021-37685](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37685))
2071*   Fixes a heap OOB in TFLite's `Gather*` implementations
2072    ([CVE-2021-37687](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37687))
2073*   Fixes an undefined behavior arising from null pointer dereference in TFLite
2074    ([CVE-2021-37688](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37688))
2075*   Fixes an undefined behavior arising from null pointer dereference in TFLite
2076    MLIR optimizations
2077    ([CVE-2021-37689](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37689))
2078*   Fixes a FPE in LSH in TFLite
2079    ([CVE-2021-37691](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37691))
2080*   Fixes a segfault on strings tensors with mismatched dimensions, arising in
2081    Go code
2082    ([CVE-2021-37692](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37692))
2083*   Fixes a use after free and a potential segfault in shape inference functions
2084    ([CVE-2021-37690](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37690))
2085*   Updates `curl` to `7.77.0` to handle
2086    [CVE-2021-22876](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22876),
2087    [CVE-2021-22897](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22897),
2088    [CVE-2021-22898](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22898),
2089    and
2090    [CVE-2021-22901](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22901).
2091
2092## Thanks to our Contributors
2093
2094This release contains contributions from many people at Google, as well as:
2095
2096Aadhitya A, Abhilash Mahendrakar, Abhishek Varma, Abin Shahab, Adam Hillier,
2097Aditya Kane, AdityaKane2001, ag.ramesh, Amogh Joshi, Armen Poghosov,
2098armkevincheng, Avrosh K, Ayan Moitra, azazhu, Banikumar Maiti, Bas Aarts, bhack,
2099Bhanu Prakash Bandaru Venkata, Billy Cao, Bohumir Zamecnik, Bradley Reece,
2100CyanXu, Daniel Situnayake, David Pal, Ddavis-2015, DEKHTIARJonathan, Deven
2101Desai, Duncan Riach, Edward, Eli Osherovich, Eugene Kuznetsov, europeanplaice,
2102evelynmitchell, Evgeniy Polyakov, Felix Vollmer, Florentin Hennecker, François
2103Chollet, Frederic Bastien, Fredrik Knutsson, Gabriele Macchi, Gaurav Shukla,
2104Gauri1 Deshpande, geetachavan1, Georgiy Manuilov, H, Hengwen Tong, Henri
2105Woodcock, Hiran Sarkar, Ilya Arzhannikov, Janghoo Lee, jdematos, Jens Meder,
2106Jerry Shih, jgehw, Jim Fisher, Jingbei Li, Jiri Podivin, Joachim Gehweiler,
2107Johannes Lade, Jonas I. Liechti, Jonas Liechti, Jonas Ohlsson, Jonathan
2108Dekhtiar, Julian Gross, Kaixi Hou, Kevin Cheng, Koan-Sin Tan, Kulin Seth,
2109linzewen, Liubov Batanina, luisleee, Lukas Geiger, Mahmoud Abuzaina, mathgaming,
2110Matt Conley, Max H. Gerlach, mdfaijul, Mh Kwon, Michael Martis, Michal
2111Szutenberg, Måns Nilsson, nammbash, Neil Girdhar, Nicholas Vadivelu, Nick
2112Kreeger, Nirjas Jakilim, okyanusoz, Patrice Vignola, Patrik Laurell, Pedro
2113Marques, Philipp Hack, Phillip Cloud, Piergiacomo De Marchi, Prashant Kumar,
2114puneeshkhanna, pvarouktsis, QQ喵, Rajeshwar Reddy T, Rama Ketineni, Reza Rahimi,
2115Robert Kalmar, rsun, Ryan Kuester, Saduf2019, Sean Morgan, Sean Moriarity,
2116Shaochen Shi, Sheng, Yang, Shu Wang, Shuai Zhang, Soojeong, Stanley-Nod, Steven
2117I Reeves, stevenireeves, Suraj Sudhir, Sven Mayer, Tamas Bela Feher,
2118tashuang.zk, tcervi, Teng Lu, Thales Elero Cervi, Thibaut Goetghebuer-Planchon,
2119Thomas Walther, Till Brychcy, Trent Lo, Uday Bondhugula, vishakha.agrawal,
2120Vishnuvardhan Janapati, wamuir, Wenwen Ouyang, wenwu, Williard Joshua Jose,
2121xiaohong1031, Xiaoming (Jason) Cui, Xinan Jiang, Yasir Modak, Yi Li, Yong Tang,
2122zilinzhu, 박상준, 이장
2123
2124# Release 2.5.2
2125
2126This release introduces several vulnerability fixes:
2127
2128*   Fixes a code injection issue in `saved_model_cli`
2129    ([CVE-2021-41228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41228))
2130*   Fixes a vulnerability due to use of uninitialized value in Tensorflow
2131    ([CVE-2021-41225](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41225))
2132*   Fixes a heap OOB in `FusedBatchNorm` kernels
2133    ([CVE-2021-41223](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41223))
2134*   Fixes an arbitrary memory read in `ImmutableConst`
2135    ([CVE-2021-41227](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41227))
2136*   Fixes a heap OOB in `SparseBinCount`
2137    ([CVE-2021-41226](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41226))
2138*   Fixes a heap OOB in `SparseFillEmptyRows`
2139    ([CVE-2021-41224](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41224))
2140*   Fixes a segfault due to negative splits in `SplitV`
2141    ([CVE-2021-41222](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41222))
2142*   Fixes segfaults and vulnerabilities caused by accesses to invalid memory
2143    during shape inference in `Cudnn*` ops
2144    ([CVE-2021-41221](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41221))
2145*   Fixes a null pointer exception when `Exit` node is not preceded by `Enter`
2146    op
2147    ([CVE-2021-41217](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41217))
2148*   Fixes an integer division by 0 in `tf.raw_ops.AllToAll`
2149    ([CVE-2021-41218](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41218))
2150*   Fixes an undefined behavior via `nullptr` reference binding in sparse matrix
2151    multiplication
2152    ([CVE-2021-41219](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41219))
2153*   Fixes a heap buffer overflow in `Transpose`
2154    ([CVE-2021-41216](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41216))
2155*   Prevents deadlocks arising from mutually recursive `tf.function` objects
2156    ([CVE-2021-41213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41213))
2157*   Fixes a null pointer exception in `DeserializeSparse`
2158    ([CVE-2021-41215](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41215))
2159*   Fixes an undefined behavior arising from reference binding to `nullptr` in
2160    `tf.ragged.cross`
2161    ([CVE-2021-41214](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41214))
2162*   Fixes a heap OOB read in `tf.ragged.cross`
2163    ([CVE-2021-41212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41212))
2164*   Fixes a heap OOB read in all `tf.raw_ops.QuantizeAndDequantizeV*` ops
2165    ([CVE-2021-41205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41205))
2166*   Fixes an FPE in `ParallelConcat`
2167    ([CVE-2021-41207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41207))
2168*   Fixes FPE issues in convolutions with zero size filters
2169    ([CVE-2021-41209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41209))
2170*   Fixes a heap OOB read in `tf.raw_ops.SparseCountSparseOutput`
2171    ([CVE-2021-41210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41210))
2172*   Fixes vulnerabilities caused by incomplete validation in boosted trees code
2173    ([CVE-2021-41208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41208))
2174*   Fixes vulnerabilities caused by incomplete validation of shapes in multiple
2175    TF ops
2176    ([CVE-2021-41206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41206))
2177*   Fixes a segfault produced while copying constant resource tensor
2178    ([CVE-2021-41204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41204))
2179*   Fixes a vulnerability caused by unitialized access in
2180    `EinsumHelper::ParseEquation`
2181    ([CVE-2021-41201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41201))
2182*   Fixes several vulnerabilities and segfaults caused by missing validation
2183    during checkpoint loading
2184    ([CVE-2021-41203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41203))
2185*   Fixes an overflow producing a crash in `tf.range`
2186    ([CVE-2021-41202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41202))
2187*   Fixes an overflow producing a crash in `tf.image.resize` when size is large
2188    ([CVE-2021-41199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41199))
2189*   Fixes an overflow producing a crash in `tf.tile` when tiling tensor is large
2190    ([CVE-2021-41198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41198))
2191*   Fixes a vulnerability produced due to incomplete validation in
2192    `tf.summary.create_file_writer`
2193    ([CVE-2021-41200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41200))
2194*   Fixes multiple crashes due to overflow and `CHECK`-fail in ops with large
2195    tensor shapes
2196    ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
2197*   Fixes a crash in `max_pool3d` when size argument is 0 or negative
2198    ([CVE-2021-41196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41196))
2199*   Fixes a crash in `tf.math.segment_*` operations
2200    ([CVE-2021-41195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41195))
2201*   Updates `curl` to `7.78.0` to handle
2202    [CVE-2021-22922](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22922),
2203    [CVE-2021-22923](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22923),
2204    [CVE-2021-22924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22924),
2205    [CVE-2021-22925](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22925),
2206    and
2207    [CVE-2021-22926](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22926).
2208
2209# Release 2.5.1
2210
2211This release introduces several vulnerability fixes:
2212
2213*   Fixes a heap out of bounds access in sparse reduction operations
2214    ([CVE-2021-37635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37635))
2215*   Fixes a floating point exception in `SparseDenseCwiseDiv`
2216    ([CVE-2021-37636](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37636))
2217*   Fixes a null pointer dereference in `CompressElement`
2218    ([CVE-2021-37637](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37637))
2219*   Fixes a null pointer dereference in `RaggedTensorToTensor`
2220    ([CVE-2021-37638](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37638))
2221*   Fixes a null pointer dereference and a heap OOB read arising from operations
2222    restoring tensors
2223    ([CVE-2021-37639](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37639))
2224*   Fixes an integer division by 0 in sparse reshaping
2225    ([CVE-2021-37640](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37640))
2226*   Fixes a division by 0 in `ResourceScatterDiv`
2227    ([CVE-2021-37642](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37642))
2228*   Fixes a heap OOB in `RaggedGather`
2229    ([CVE-2021-37641](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37641))
2230*   Fixes a `std::abort` raised from `TensorListReserve`
2231    ([CVE-2021-37644](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37644))
2232*   Fixes a null pointer dereference in `MatrixDiagPartOp`
2233    ([CVE-2021-37643](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37643))
2234*   Fixes an integer overflow due to conversion to unsigned
2235    ([CVE-2021-37645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37645))
2236*   Fixes a bad allocation error in `StringNGrams` caused by integer conversion
2237    ([CVE-2021-37646](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37646))
2238*   Fixes a null pointer dereference in `SparseTensorSliceDataset`
2239    ([CVE-2021-37647](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37647))
2240*   Fixes an incorrect validation of `SaveV2` inputs
2241    ([CVE-2021-37648](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37648))
2242*   Fixes a null pointer dereference in `UncompressElement`
2243    ([CVE-2021-37649](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37649))
2244*   Fixes a segfault and a heap buffer overflow in
2245    `{Experimental,}DatasetToTFRecord`
2246    ([CVE-2021-37650](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37650))
2247*   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
2248    ([CVE-2021-37651](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37651))
2249*   Fixes a use after free in boosted trees creation
2250    ([CVE-2021-37652](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37652))
2251*   Fixes a division by 0 in `ResourceGather`
2252    ([CVE-2021-37653](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37653))
2253*   Fixes a heap OOB and a `CHECK` fail in `ResourceGather`
2254    ([CVE-2021-37654](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37654))
2255*   Fixes a heap OOB in `ResourceScatterUpdate`
2256    ([CVE-2021-37655](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37655))
2257*   Fixes an undefined behavior arising from reference binding to nullptr in
2258    `RaggedTensorToSparse`
2259    ([CVE-2021-37656](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37656))
2260*   Fixes an undefined behavior arising from reference binding to nullptr in
2261    `MatrixDiagV*` ops
2262    ([CVE-2021-37657](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37657))
2263*   Fixes an undefined behavior arising from reference binding to nullptr in
2264    `MatrixSetDiagV*` ops
2265    ([CVE-2021-37658](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37658))
2266*   Fixes an undefined behavior arising from reference binding to nullptr and
2267    heap OOB in binary cwise ops
2268    ([CVE-2021-37659](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37659))
2269*   Fixes a division by 0 in inplace operations
2270    ([CVE-2021-37660](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37660))
2271*   Fixes a crash caused by integer conversion to unsigned
2272    ([CVE-2021-37661](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37661))
2273*   Fixes an undefined behavior arising from reference binding to nullptr in
2274    boosted trees
2275    ([CVE-2021-37662](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37662))
2276*   Fixes a heap OOB in boosted trees
2277    ([CVE-2021-37664](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37664))
2278*   Fixes vulnerabilities arising from incomplete validation in `QuantizeV2`
2279    ([CVE-2021-37663](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37663))
2280*   Fixes vulnerabilities arising from incomplete validation in MKL
2281    requantization
2282    ([CVE-2021-37665](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37665))
2283*   Fixes an undefined behavior arising from reference binding to nullptr in
2284    `RaggedTensorToVariant`
2285    ([CVE-2021-37666](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37666))
2286*   Fixes an undefined behavior arising from reference binding to nullptr in
2287    unicode encoding
2288    ([CVE-2021-37667](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37667))
2289*   Fixes an FPE in `tf.raw_ops.UnravelIndex`
2290    ([CVE-2021-37668](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37668))
2291*   Fixes a crash in NMS ops caused by integer conversion to unsigned
2292    ([CVE-2021-37669](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37669))
2293*   Fixes a heap OOB in `UpperBound` and `LowerBound`
2294    ([CVE-2021-37670](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37670))
2295*   Fixes an undefined behavior arising from reference binding to nullptr in map
2296    operations
2297    ([CVE-2021-37671](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37671))
2298*   Fixes a heap OOB in `SdcaOptimizerV2`
2299    ([CVE-2021-37672](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37672))
2300*   Fixes a `CHECK`-fail in `MapStage`
2301    ([CVE-2021-37673](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37673))
2302*   Fixes a vulnerability arising from incomplete validation in `MaxPoolGrad`
2303    ([CVE-2021-37674](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37674))
2304*   Fixes an undefined behavior arising from reference binding to nullptr in
2305    shape inference
2306    ([CVE-2021-37676](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37676))
2307*   Fixes a division by 0 in most convolution operators
2308    ([CVE-2021-37675](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37675))
2309*   Fixes vulnerabilities arising from missing validation in shape inference for
2310    `Dequantize`
2311    ([CVE-2021-37677](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37677))
2312*   Fixes an arbitrary code execution due to YAML deserialization
2313    ([CVE-2021-37678](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37678))
2314*   Fixes a heap OOB in nested `tf.map_fn` with `RaggedTensor`s
2315    ([CVE-2021-37679](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37679))
2316*   Fixes a division by zero in TFLite
2317    ([CVE-2021-37680](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37680))
2318*   Fixes an NPE in TFLite
2319    ([CVE-2021-37681](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37681))
2320*   Fixes a vulnerability arising from use of unitialized value in TFLite
2321    ([CVE-2021-37682](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37682))
2322*   Fixes an FPE in TFLite division operations
2323    ([CVE-2021-37683](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37683))
2324*   Fixes an FPE in TFLite pooling operations
2325    ([CVE-2021-37684](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37684))
2326*   Fixes an infinite loop in TFLite
2327    ([CVE-2021-37686](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37686))
2328*   Fixes a heap OOB in TFLite
2329    ([CVE-2021-37685](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37685))
2330*   Fixes a heap OOB in TFLite's `Gather*` implementations
2331    ([CVE-2021-37687](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37687))
2332*   Fixes an undefined behavior arising from null pointer dereference in TFLite
2333    ([CVE-2021-37688](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37688))
2334*   Fixes an undefined behavior arising from null pointer dereference in TFLite
2335    MLIR optimizations
2336    ([CVE-2021-37689](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37689))
2337*   Fixes a FPE in LSH in TFLite
2338    ([CVE-2021-37691](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37691))
2339*   Fixes a segfault on strings tensors with mismatched dimensions, arising in
2340    Go code
2341    ([CVE-2021-37692](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37692))
2342*   Fixes a use after free and a potential segfault in shape inference functions
2343    ([CVE-2021-37690](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37690))
2344*   Updates `curl` to `7.77.0` to handle
2345    [CVE-2021-22876](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22876),
2346    [CVE-2021-22897](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22897),
2347    [CVE-2021-22898](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22898),
2348    and
2349    [CVE-2021-22901](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22901).
2350
2351# Release 2.4.4
2352
2353This release introduces several vulnerability fixes:
2354
2355*   Fixes a code injection issue in `saved_model_cli`
2356    ([CVE-2021-41228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41228))
2357*   Fixes a vulnerability due to use of uninitialized value in Tensorflow
2358    ([CVE-2021-41225](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41225))
2359*   Fixes a heap OOB in `FusedBatchNorm` kernels
2360    ([CVE-2021-41223](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41223))
2361*   Fixes an arbitrary memory read in `ImmutableConst`
2362    ([CVE-2021-41227](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41227))
2363*   Fixes a heap OOB in `SparseBinCount`
2364    ([CVE-2021-41226](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41226))
2365*   Fixes a heap OOB in `SparseFillEmptyRows`
2366    ([CVE-2021-41224](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41224))
2367*   Fixes a segfault due to negative splits in `SplitV`
2368    ([CVE-2021-41222](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41222))
2369*   Fixes segfaults and vulnerabilities caused by accesses to invalid memory
2370    during shape inference in `Cudnn*` ops
2371    ([CVE-2021-41221](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41221))
2372*   Fixes a null pointer exception when `Exit` node is not preceded by `Enter`
2373    op
2374    ([CVE-2021-41217](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41217))
2375*   Fixes an integer division by 0 in `tf.raw_ops.AllToAll`
2376    ([CVE-2021-41218](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41218))
2377*   Fixes an undefined behavior via `nullptr` reference binding in sparse matrix
2378    multiplication
2379    ([CVE-2021-41219](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41219))
2380*   Fixes a heap buffer overflow in `Transpose`
2381    ([CVE-2021-41216](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41216))
2382*   Prevents deadlocks arising from mutually recursive `tf.function` objects
2383    ([CVE-2021-41213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41213))
2384*   Fixes a null pointer exception in `DeserializeSparse`
2385    ([CVE-2021-41215](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41215))
2386*   Fixes an undefined behavior arising from reference binding to `nullptr` in
2387    `tf.ragged.cross`
2388    ([CVE-2021-41214](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41214))
2389*   Fixes a heap OOB read in `tf.ragged.cross`
2390    ([CVE-2021-41212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41212))
2391*   Fixes a heap OOB read in all `tf.raw_ops.QuantizeAndDequantizeV*` ops
2392    ([CVE-2021-41205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41205))
2393*   Fixes an FPE in `ParallelConcat`
2394    ([CVE-2021-41207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41207))
2395*   Fixes FPE issues in convolutions with zero size filters
2396    ([CVE-2021-41209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41209))
2397*   Fixes a heap OOB read in `tf.raw_ops.SparseCountSparseOutput`
2398    ([CVE-2021-41210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41210))
2399*   Fixes vulnerabilities caused by incomplete validation in boosted trees code
2400    ([CVE-2021-41208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41208))
2401*   Fixes vulnerabilities caused by incomplete validation of shapes in multiple
2402    TF ops
2403    ([CVE-2021-41206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41206))
2404*   Fixes a segfault produced while copying constant resource tensor
2405    ([CVE-2021-41204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41204))
2406*   Fixes a vulnerability caused by unitialized access in
2407    `EinsumHelper::ParseEquation`
2408    ([CVE-2021-41201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41201))
2409*   Fixes several vulnerabilities and segfaults caused by missing validation
2410    during checkpoint loading
2411    ([CVE-2021-41203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41203))
2412*   Fixes an overflow producing a crash in `tf.range`
2413    ([CVE-2021-41202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41202))
2414*   Fixes an overflow producing a crash in `tf.image.resize` when size is large
2415    ([CVE-2021-41199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41199))
2416*   Fixes an overflow producing a crash in `tf.tile` when tiling tensor is large
2417    ([CVE-2021-41198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41198))
2418*   Fixes a vulnerability produced due to incomplete validation in
2419    `tf.summary.create_file_writer`
2420    ([CVE-2021-41200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41200))
2421*   Fixes multiple crashes due to overflow and `CHECK`-fail in ops with large
2422    tensor shapes
2423    ([CVE-2021-41197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41197))
2424*   Fixes a crash in `max_pool3d` when size argument is 0 or negative
2425    ([CVE-2021-41196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41196))
2426*   Fixes a crash in `tf.math.segment_*` operations
2427    ([CVE-2021-41195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41195))
2428*   Updates `curl` to `7.78.0` to handle
2429    [CVE-2021-22922](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22922),
2430    [CVE-2021-22923](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22923),
2431    [CVE-2021-22924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22924),
2432    [CVE-2021-22925](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22925),
2433    and
2434    [CVE-2021-22926](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22926).
2435
2436# Release 2.4.3
2437
2438This release introduces several vulnerability fixes:
2439
2440*   Fixes a heap out of bounds access in sparse reduction operations
2441    ([CVE-2021-37635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37635))
2442*   Fixes a floating point exception in `SparseDenseCwiseDiv`
2443    ([CVE-2021-37636](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37636))
2444*   Fixes a null pointer dereference in `CompressElement`
2445    ([CVE-2021-37637](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37637))
2446*   Fixes a null pointer dereference in `RaggedTensorToTensor`
2447    ([CVE-2021-37638](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37638))
2448*   Fixes a null pointer dereference and a heap OOB read arising from operations
2449    restoring tensors
2450    ([CVE-2021-37639](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37639))
2451*   Fixes an integer division by 0 in sparse reshaping
2452    ([CVE-2021-37640](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37640))
2453*   Fixes a division by 0 in `ResourceScatterDiv`
2454    ([CVE-2021-37642](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37642))
2455*   Fixes a heap OOB in `RaggedGather`
2456    ([CVE-2021-37641](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37641))
2457*   Fixes a `std::abort` raised from `TensorListReserve`
2458    ([CVE-2021-37644](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37644))
2459*   Fixes a null pointer dereference in `MatrixDiagPartOp`
2460    ([CVE-2021-37643](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37643))
2461*   Fixes an integer overflow due to conversion to unsigned
2462    ([CVE-2021-37645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37645))
2463*   Fixes a bad allocation error in `StringNGrams` caused by integer conversion
2464    ([CVE-2021-37646](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37646))
2465*   Fixes a null pointer dereference in `SparseTensorSliceDataset`
2466    ([CVE-2021-37647](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37647))
2467*   Fixes an incorrect validation of `SaveV2` inputs
2468    ([CVE-2021-37648](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37648))
2469*   Fixes a null pointer dereference in `UncompressElement`
2470    ([CVE-2021-37649](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37649))
2471*   Fixes a segfault and a heap buffer overflow in
2472    `{Experimental,}DatasetToTFRecord`
2473    ([CVE-2021-37650](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37650))
2474*   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
2475    ([CVE-2021-37651](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37651))
2476*   Fixes a use after free in boosted trees creation
2477    ([CVE-2021-37652](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37652))
2478*   Fixes a division by 0 in `ResourceGather`
2479    ([CVE-2021-37653](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37653))
2480*   Fixes a heap OOB and a `CHECK` fail in `ResourceGather`
2481    ([CVE-2021-37654](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37654))
2482*   Fixes a heap OOB in `ResourceScatterUpdate`
2483    ([CVE-2021-37655](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37655))
2484*   Fixes an undefined behavior arising from reference binding to nullptr in
2485    `RaggedTensorToSparse`
2486    ([CVE-2021-37656](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37656))
2487*   Fixes an undefined behavior arising from reference binding to nullptr in
2488    `MatrixDiagV*` ops
2489    ([CVE-2021-37657](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37657))
2490*   Fixes an undefined behavior arising from reference binding to nullptr in
2491    `MatrixSetDiagV*` ops
2492    ([CVE-2021-37658](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37658))
2493*   Fixes an undefined behavior arising from reference binding to nullptr and
2494    heap OOB in binary cwise ops
2495    ([CVE-2021-37659](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37659))
2496*   Fixes a division by 0 in inplace operations
2497    ([CVE-2021-37660](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37660))
2498*   Fixes a crash caused by integer conversion to unsigned
2499    ([CVE-2021-37661](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37661))
2500*   Fixes an undefined behavior arising from reference binding to nullptr in
2501    boosted trees
2502    ([CVE-2021-37662](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37662))
2503*   Fixes a heap OOB in boosted trees
2504    ([CVE-2021-37664](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37664))
2505*   Fixes vulnerabilities arising from incomplete validation in `QuantizeV2`
2506    ([CVE-2021-37663](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37663))
2507*   Fixes vulnerabilities arising from incomplete validation in MKL
2508    requantization
2509    ([CVE-2021-37665](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37665))
2510*   Fixes an undefined behavior arising from reference binding to nullptr in
2511    `RaggedTensorToVariant`
2512    ([CVE-2021-37666](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37666))
2513*   Fixes an undefined behavior arising from reference binding to nullptr in
2514    unicode encoding
2515    ([CVE-2021-37667](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37667))
2516*   Fixes an FPE in `tf.raw_ops.UnravelIndex`
2517    ([CVE-2021-37668](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37668))
2518*   Fixes a crash in NMS ops caused by integer conversion to unsigned
2519    ([CVE-2021-37669](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37669))
2520*   Fixes a heap OOB in `UpperBound` and `LowerBound`
2521    ([CVE-2021-37670](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37670))
2522*   Fixes an undefined behavior arising from reference binding to nullptr in map
2523    operations
2524    ([CVE-2021-37671](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37671))
2525*   Fixes a heap OOB in `SdcaOptimizerV2`
2526    ([CVE-2021-37672](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37672))
2527*   Fixes a `CHECK`-fail in `MapStage`
2528    ([CVE-2021-37673](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37673))
2529*   Fixes a vulnerability arising from incomplete validation in `MaxPoolGrad`
2530    ([CVE-2021-37674](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37674))
2531*   Fixes an undefined behavior arising from reference binding to nullptr in
2532    shape inference
2533    ([CVE-2021-37676](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37676))
2534*   Fixes a division by 0 in most convolution operators
2535    ([CVE-2021-37675](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37675))
2536*   Fixes vulnerabilities arising from missing validation in shape inference for
2537    `Dequantize`
2538    ([CVE-2021-37677](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37677))
2539*   Fixes an arbitrary code execution due to YAML deserialization
2540    ([CVE-2021-37678](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37678))
2541*   Fixes a heap OOB in nested `tf.map_fn` with `RaggedTensor`s
2542    ([CVE-2021-37679](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37679))
2543*   Fixes a division by zero in TFLite
2544    ([CVE-2021-37680](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37680))
2545*   Fixes an NPE in TFLite
2546    ([CVE-2021-37681](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37681))
2547*   Fixes a vulnerability arising from use of unitialized value in TFLite
2548    ([CVE-2021-37682](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37682))
2549*   Fixes an FPE in TFLite division operations
2550    ([CVE-2021-37683](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37683))
2551*   Fixes an FPE in TFLite pooling operations
2552    ([CVE-2021-37684](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37684))
2553*   Fixes an infinite loop in TFLite
2554    ([CVE-2021-37686](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37686))
2555*   Fixes a heap OOB in TFLite
2556    ([CVE-2021-37685](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37685))
2557*   Fixes a heap OOB in TFLite's `Gather*` implementations
2558    ([CVE-2021-37687](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37687))
2559*   Fixes an undefined behavior arising from null pointer dereference in TFLite
2560    ([CVE-2021-37688](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37688))
2561*   Fixes an undefined behavior arising from null pointer dereference in TFLite
2562    MLIR optimizations
2563    ([CVE-2021-37689](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37689))
2564*   Fixes a FPE in LSH in TFLite
2565    ([CVE-2021-37691](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37691))
2566*   Fixes a segfault on strings tensors with mismatched dimensions, arising in
2567    Go code
2568    ([CVE-2021-37692](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37692))
2569*   Fixes a use after free and a potential segfault in shape inference functions
2570    ([CVE-2021-37690](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37690))
2571*   Updates `curl` to `7.77.0` to handle
2572    [CVE-2021-22876](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22876),
2573    [CVE-2021-22897](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22897),
2574    [CVE-2021-22898](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22898),
2575    and
2576    [CVE-2021-22901](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22901).
2577
2578# Release 2.3.4
2579
2580This release introduces several vulnerability fixes:
2581
2582*   Fixes a heap out of bounds access in sparse reduction operations
2583    ([CVE-2021-37635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37635))
2584*   Fixes a floating point exception in `SparseDenseCwiseDiv`
2585    ([CVE-2021-37636](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37636))
2586*   Fixes a null pointer dereference in `CompressElement`
2587    ([CVE-2021-37637](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37637))
2588*   Fixes a null pointer dereference in `RaggedTensorToTensor`
2589    ([CVE-2021-37638](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37638))
2590*   Fixes a null pointer dereference and a heap OOB read arising from operations
2591    restoring tensors
2592    ([CVE-2021-37639](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37639))
2593*   Fixes an integer division by 0 in sparse reshaping
2594    ([CVE-2021-37640](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37640))
2595*   Fixes a division by 0 in `ResourceScatterDiv`
2596    ([CVE-2021-37642](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37642))
2597*   Fixes a heap OOB in `RaggedGather`
2598    ([CVE-2021-37641](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37641))
2599*   Fixes a `std::abort` raised from `TensorListReserve`
2600    ([CVE-2021-37644](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37644))
2601*   Fixes a null pointer dereference in `MatrixDiagPartOp`
2602    ([CVE-2021-37643](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37643))
2603*   Fixes an integer overflow due to conversion to unsigned
2604    ([CVE-2021-37645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37645))
2605*   Fixes a bad allocation error in `StringNGrams` caused by integer conversion
2606    ([CVE-2021-37646](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37646))
2607*   Fixes a null pointer dereference in `SparseTensorSliceDataset`
2608    ([CVE-2021-37647](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37647))
2609*   Fixes an incorrect validation of `SaveV2` inputs
2610    ([CVE-2021-37648](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37648))
2611*   Fixes a null pointer dereference in `UncompressElement`
2612    ([CVE-2021-37649](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37649))
2613*   Fixes a segfault and a heap buffer overflow in
2614    `{Experimental,}DatasetToTFRecord`
2615    ([CVE-2021-37650](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37650))
2616*   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
2617    ([CVE-2021-37651](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37651))
2618*   Fixes a use after free in boosted trees creation
2619    ([CVE-2021-37652](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37652))
2620*   Fixes a division by 0 in `ResourceGather`
2621    ([CVE-2021-37653](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37653))
2622*   Fixes a heap OOB and a `CHECK` fail in `ResourceGather`
2623    ([CVE-2021-37654](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37654))
2624*   Fixes a heap OOB in `ResourceScatterUpdate`
2625    ([CVE-2021-37655](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37655))
2626*   Fixes an undefined behavior arising from reference binding to nullptr in
2627    `RaggedTensorToSparse`
2628    ([CVE-2021-37656](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37656))
2629*   Fixes an undefined behavior arising from reference binding to nullptr in
2630    `MatrixDiagV*` ops
2631    ([CVE-2021-37657](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37657))
2632*   Fixes an undefined behavior arising from reference binding to nullptr in
2633    `MatrixSetDiagV*` ops
2634    ([CVE-2021-37658](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37658))
2635*   Fixes an undefined behavior arising from reference binding to nullptr and
2636    heap OOB in binary cwise ops
2637    ([CVE-2021-37659](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37659))
2638*   Fixes a division by 0 in inplace operations
2639    ([CVE-2021-37660](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37660))
2640*   Fixes a crash caused by integer conversion to unsigned
2641    ([CVE-2021-37661](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37661))
2642*   Fixes an undefined behavior arising from reference binding to nullptr in
2643    boosted trees
2644    ([CVE-2021-37662](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37662))
2645*   Fixes a heap OOB in boosted trees
2646    ([CVE-2021-37664](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37664))
2647*   Fixes vulnerabilities arising from incomplete validation in `QuantizeV2`
2648    ([CVE-2021-37663](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37663))
2649*   Fixes vulnerabilities arising from incomplete validation in MKL
2650    requantization
2651    ([CVE-2021-37665](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37665))
2652*   Fixes an undefined behavior arising from reference binding to nullptr in
2653    `RaggedTensorToVariant`
2654    ([CVE-2021-37666](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37666))
2655*   Fixes an undefined behavior arising from reference binding to nullptr in
2656    unicode encoding
2657    ([CVE-2021-37667](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37667))
2658*   Fixes an FPE in `tf.raw_ops.UnravelIndex`
2659    ([CVE-2021-37668](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37668))
2660*   Fixes a crash in NMS ops caused by integer conversion to unsigned
2661    ([CVE-2021-37669](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37669))
2662*   Fixes a heap OOB in `UpperBound` and `LowerBound`
2663    ([CVE-2021-37670](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37670))
2664*   Fixes an undefined behavior arising from reference binding to nullptr in map
2665    operations
2666    ([CVE-2021-37671](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37671))
2667*   Fixes a heap OOB in `SdcaOptimizerV2`
2668    ([CVE-2021-37672](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37672))
2669*   Fixes a `CHECK`-fail in `MapStage`
2670    ([CVE-2021-37673](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37673))
2671*   Fixes a vulnerability arising from incomplete validation in `MaxPoolGrad`
2672    ([CVE-2021-37674](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37674))
2673*   Fixes an undefined behavior arising from reference binding to nullptr in
2674    shape inference
2675    ([CVE-2021-37676](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37676))
2676*   Fixes a division by 0 in most convolution operators
2677    ([CVE-2021-37675](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37675))
2678*   Fixes vulnerabilities arising from missing validation in shape inference for
2679    `Dequantize`
2680    ([CVE-2021-37677](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37677))
2681*   Fixes an arbitrary code execution due to YAML deserialization
2682    ([CVE-2021-37678](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37678))
2683*   Fixes a heap OOB in nested `tf.map_fn` with `RaggedTensor`s
2684    ([CVE-2021-37679](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37679))
2685*   Fixes a division by zero in TFLite
2686    ([CVE-2021-37680](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37680))
2687*   Fixes an NPE in TFLite
2688    ([CVE-2021-37681](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37681))
2689*   Fixes a vulnerability arising from use of unitialized value in TFLite
2690    ([CVE-2021-37682](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37682))
2691*   Fixes an FPE in TFLite division operations
2692    ([CVE-2021-37683](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37683))
2693*   Fixes an FPE in TFLite pooling operations
2694    ([CVE-2021-37684](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37684))
2695*   Fixes an infinite loop in TFLite
2696    ([CVE-2021-37686](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37686))
2697*   Fixes a heap OOB in TFLite
2698    ([CVE-2021-37685](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37685))
2699*   Fixes a heap OOB in TFLite's `Gather*` implementations
2700    ([CVE-2021-37687](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37687))
2701*   Fixes an undefined behavior arising from null pointer dereference in TFLite
2702    ([CVE-2021-37688](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37688))
2703*   Fixes an undefined behavior arising from null pointer dereference in TFLite
2704    MLIR optimizations
2705    ([CVE-2021-37689](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37689))
2706*   Fixes a FPE in LSH in TFLite
2707    ([CVE-2021-37691](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37691))
2708*   Fixes a segfault on strings tensors with mismatched dimensions, arising in
2709    Go code
2710    ([CVE-2021-37692](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37692))
2711*   Fixes a use after free and a potential segfault in shape inference functions
2712    ([CVE-2021-37690](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37690))
2713*   Updates `curl` to `7.77.0` to handle
2714    [CVE-2021-22876](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22876),
2715    [CVE-2021-22897](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22897),
2716    [CVE-2021-22898](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22898),
2717    and
2718    [CVE-2021-22901](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22901).
2719
2720# Release 2.4.2
2721
2722This release introduces several vulnerability fixes:
2723
2724*   Fixes a heap buffer overflow in `RaggedBinCount`
2725    ([CVE-2021-29512](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29512))
2726*   Fixes a heap out of bounds write in `RaggedBinCount`
2727    ([CVE-2021-29514](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29514))
2728*   Fixes a type confusion during tensor casts which leads to dereferencing null
2729    pointers
2730    ([CVE-2021-29513](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29513))
2731*   Fixes a reference binding to null pointer in `MatrixDiag*` ops
2732    ([CVE-2021-29515](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29515))
2733*   Fixes a null pointer dereference via invalid Ragged Tensors
2734    ([CVE-2021-29516](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29516))
2735*   Fixes a division by zero in `Conv3D`
2736    ([CVE-2021-29517](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29517))
2737*   Fixes vulnerabilities where session operations in eager mode lead to null
2738    pointer dereferences
2739    ([CVE-2021-29518](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29518))
2740*   Fixes a `CHECK`-fail in `SparseCross` caused by type confusion
2741    ([CVE-2021-29519](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29519))
2742*   Fixes a segfault in `SparseCountSparseOutput`
2743    ([CVE-2021-29521](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29521))
2744*   Fixes a heap buffer overflow in `Conv3DBackprop*`
2745    ([CVE-2021-29520](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29520))
2746*   Fixes a division by 0 in `Conv3DBackprop*`
2747    ([CVE-2021-29522](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29522))
2748*   Fixes a `CHECK`-fail in `AddManySparseToTensorsMap`
2749    ([CVE-2021-29523](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29523))
2750*   Fixes a division by 0 in `Conv2DBackpropFilter`
2751    ([CVE-2021-29524](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29524))
2752*   Fixes a division by 0 in `Conv2DBackpropInput`
2753    ([CVE-2021-29525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29525))
2754*   Fixes a division by 0 in `Conv2D`
2755    ([CVE-2021-29526](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29526))
2756*   Fixes a division by 0 in `QuantizedConv2D`
2757    ([CVE-2021-29527](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29527))
2758*   Fixes a division by 0 in `QuantizedMul`
2759    ([CVE-2021-29528](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29528))
2760*   Fixes vulnerabilities caused by invalid validation in
2761    `SparseMatrixSparseCholesky`
2762    ([CVE-2021-29530](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29530))
2763*   Fixes a heap buffer overflow caused by rounding
2764    ([CVE-2021-29529](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29529))
2765*   Fixes a `CHECK`-fail in `tf.raw_ops.EncodePng`
2766    ([CVE-2021-29531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29531))
2767*   Fixes a heap out of bounds read in `RaggedCross`
2768    ([CVE-2021-29532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29532))
2769*   Fixes a `CHECK`-fail in `DrawBoundingBoxes`
2770    ([CVE-2021-29533](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29533))
2771*   Fixes a heap buffer overflow in `QuantizedMul`
2772    ([CVE-2021-29535](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29535))
2773*   Fixes a `CHECK`-fail in `SparseConcat`
2774    ([CVE-2021-29534](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29534))
2775*   Fixes a heap buffer overflow in `QuantizedResizeBilinear`
2776    ([CVE-2021-29537](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29537))
2777*   Fixes a heap buffer overflow in `QuantizedReshape`
2778    ([CVE-2021-29536](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29536))
2779*   Fixes a division by zero in `Conv2DBackpropFilter`
2780    ([CVE-2021-29538](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29538))
2781*   Fixes a heap buffer overflow in `Conv2DBackpropFilter`
2782    ([CVE-2021-29540](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29540))
2783*   Fixes a heap buffer overflow in `StringNGrams`
2784    ([CVE-2021-29542](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29542))
2785*   Fixes a null pointer dereference in `StringNGrams`
2786    ([CVE-2021-29541](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29541))
2787*   Fixes a `CHECK`-fail in `QuantizeAndDequantizeV4Grad`
2788    ([CVE-2021-29544](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29544))
2789*   Fixes a `CHECK`-fail in `CTCGreedyDecoder`
2790    ([CVE-2021-29543](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29543))
2791*   Fixes a heap buffer overflow in `SparseTensorToCSRSparseMatrix`
2792    ([CVE-2021-29545](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29545))
2793*   Fixes a division by 0 in `QuantizedBiasAdd`
2794    ([CVE-2021-29546](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29546))
2795*   Fixes a heap out of bounds in `QuantizedBatchNormWithGlobalNormalization`
2796    ([CVE-2021-29547](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29547))
2797*   Fixes a division by 0 in `QuantizedBatchNormWithGlobalNormalization`
2798    ([CVE-2021-29548](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29548))
2799*   Fixes a division by 0 in `QuantizedAdd`
2800    ([CVE-2021-29549](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29549))
2801*   Fixes a division by 0 in `FractionalAvgPool`
2802    ([CVE-2021-29550](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29550))
2803*   Fixes an OOB read in `MatrixTriangularSolve`
2804    ([CVE-2021-29551](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29551))
2805*   Fixes a heap OOB in `QuantizeAndDequantizeV3`
2806    ([CVE-2021-29553](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29553))
2807*   Fixes a `CHECK`-failure in `UnsortedSegmentJoin`
2808    ([CVE-2021-29552](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29552))
2809*   Fixes a division by 0 in `DenseCountSparseOutput`
2810    ([CVE-2021-29554](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29554))
2811*   Fixes a division by 0 in `FusedBatchNorm`
2812    ([CVE-2021-29555](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29555))
2813*   Fixes a division by 0 in `SparseMatMul`
2814    ([CVE-2021-29557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29557))
2815*   Fixes a division by 0 in `Reverse`
2816    ([CVE-2021-29556](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29556))
2817*   Fixes a heap buffer overflow in `SparseSplit`
2818    ([CVE-2021-29558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29558))
2819*   Fixes a heap OOB access in unicode ops
2820    ([CVE-2021-29559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29559))
2821*   Fixes a heap buffer overflow in `RaggedTensorToTensor`
2822    ([CVE-2021-29560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29560))
2823*   Fixes a `CHECK`-fail in `LoadAndRemapMatrix`
2824    ([CVE-2021-29561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29561))
2825*   Fixes a `CHECK`-fail in `tf.raw_ops.IRFFT`
2826    ([CVE-2021-29562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29562))
2827*   Fixes a `CHECK`-fail in `tf.raw_ops.RFFT`
2828    ([CVE-2021-29563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29563))
2829*   Fixes a null pointer dereference in `EditDistance`
2830    ([CVE-2021-29564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29564))
2831*   Fixes a null pointer dereference in `SparseFillEmptyRows`
2832    ([CVE-2021-29565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29565))
2833*   Fixes a heap OOB access in `Dilation2DBackpropInput`
2834    ([CVE-2021-29566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29566))
2835*   Fixes a reference binding to null in `ParameterizedTruncatedNormal`
2836    ([CVE-2021-29568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29568))
2837*   Fixes a set of vulnerabilities caused by lack of validation in
2838    `SparseDenseCwiseMul`
2839    ([CVE-2021-29567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29567))
2840*   Fixes a heap out of bounds read in `MaxPoolGradWithArgmax`
2841    ([CVE-2021-29570](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29570))
2842*   Fixes a heap out of bounds read in `RequantizationRange`
2843    ([CVE-2021-29569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29569))
2844*   Fixes a memory corruption in `DrawBoundingBoxesV2`
2845    ([CVE-2021-29571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29571))
2846*   Fixes a reference binding to nullptr in `SdcaOptimizer`
2847    ([CVE-2021-29572](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29572))
2848*   Fixes an overflow and a denial of service in `tf.raw_ops.ReverseSequence`
2849    ([CVE-2021-29575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29575))
2850*   Fixes a division by 0 in `MaxPoolGradWithArgmax`
2851    ([CVE-2021-29573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29573))
2852*   Fixes an undefined behavior in `MaxPool3DGradGrad`
2853    ([CVE-2021-29574](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29574))
2854*   Fixes a heap buffer overflow in `MaxPool3DGradGrad`
2855    ([CVE-2021-29576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29576))
2856*   Fixes a heap buffer overflow in `AvgPool3DGrad`
2857    ([CVE-2021-29577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29577))
2858*   Fixes an undefined behavior and a `CHECK`-fail in `FractionalMaxPoolGrad`
2859    ([CVE-2021-29580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29580))
2860*   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
2861    ([CVE-2021-29578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29578))
2862*   Fixes a heap buffer overflow in `MaxPoolGrad`
2863    ([CVE-2021-29579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29579))
2864*   Fixes a segfault in `CTCBeamSearchDecoder`
2865    ([CVE-2021-29581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29581))
2866*   Fixes a heap OOB read in `tf.raw_ops.Dequantize`
2867    ([CVE-2021-29582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29582))
2868*   Fixes a `CHECK`-fail due to integer overflow
2869    ([CVE-2021-29584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29584))
2870*   Fixes a heap buffer overflow and undefined behavior in `FusedBatchNorm`
2871    ([CVE-2021-29583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29583))
2872*   Fixes a division by zero in padding computation in TFLite
2873    ([CVE-2021-29585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29585))
2874*   Fixes a division by zero in optimized pooling implementations in TFLite
2875    ([CVE-2021-29586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29586))
2876*   Fixes a division by zero in TFLite's implementation of `SpaceToDepth`
2877    ([CVE-2021-29587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29587))
2878*   Fixes a division by zero in TFLite's implementation of `GatherNd`
2879    ([CVE-2021-29589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29589))
2880*   Fixes a division by zero in TFLite's implementation of `TransposeConv`
2881    ([CVE-2021-29588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29588))
2882*   Fixes a heap OOB read in TFLite's implementation of `Minimum` or `Maximum`
2883    ([CVE-2021-29590](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29590))
2884*   Fixes a null pointer dereference in TFLite's `Reshape` operator
2885    ([CVE-2021-29592](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29592))
2886*   Fixes a stack overflow due to looping TFLite subgraph
2887    ([CVE-2021-29591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29591))
2888*   Fixes a division by zero in TFLite's implementation of `DepthToSpace`
2889    ([CVE-2021-29595](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29595))
2890*   Fixes a division by zero in TFLite's convolution code
2891    ([CVE-2021-29594](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29594))
2892*   Fixes a division by zero in TFLite's implementation of `EmbeddingLookup`
2893    ([CVE-2021-29596](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29596))
2894*   Fixes a division by zero in TFLite's implementation of `BatchToSpaceNd`
2895    ([CVE-2021-29593](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29593))
2896*   Fixes a division by zero in TFLite's implementation of `SpaceToBatchNd`
2897    ([CVE-2021-29597](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29597))
2898*   Fixes a division by zero in TFLite's implementation of `SVDF`
2899    ([CVE-2021-29598](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29598))
2900*   Fixes a division by zero in TFLite's implementation of `Split`
2901    ([CVE-2021-29599](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29599))
2902*   Fixes a division by zero in TFLite's implementation of `OneHot`
2903    ([CVE-2021-29600](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29600))
2904*   Fixes a division by zero in TFLite's implementation of `DepthwiseConv`
2905    ([CVE-2021-29602](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29602))
2906*   Fixes a division by zero in TFLite's implementation of hashtable lookup
2907    ([CVE-2021-29604](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29604))
2908*   Fixes a integer overflow in TFLite concatentation
2909    ([CVE-2021-29601](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29601))
2910*   Fixes a integer overflow in TFLite memory allocation
2911    ([CVE-2021-29605](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29605))
2912*   Fixes a heap OOB write in TFLite
2913    ([CVE-2021-29603](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29603))
2914*   Fixes a heap OOB read in TFLite
2915    ([CVE-2021-29606](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29606))
2916*   Fixes a heap OOB and null pointer dereference in `RaggedTensorToTensor`
2917    ([CVE-2021-29608](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29608))
2918*   Fixes vulnerabilities caused by incomplete validation in `SparseAdd`
2919    ([CVE-2021-29609](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29609))
2920*   Fixes vulnerabilities caused by incomplete validation in
2921    `SparseSparseMinimum`
2922    ([CVE-2021-29607](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29607))
2923*   Fixes vulnerabilities caused by incomplete validation in `SparseReshape`
2924    ([CVE-2021-29611](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29611))
2925*   Fixes vulnerabilities caused by invalid validation in
2926    `QuantizeAndDequantizeV2`
2927    ([CVE-2021-29610](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29610))
2928*   Fixes a heap buffer overflow in `BandedTriangularSolve`
2929    ([CVE-2021-29612](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29612))
2930*   Fixes vulnerabilities caused by incomplete validation in
2931    `tf.raw_ops.CTCLoss`
2932    ([CVE-2021-29613](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29613))
2933*   Fixes an interpreter crash from vulnerabilities in `tf.io.decode_raw`
2934    ([CVE-2021-29614](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29614))
2935*   Fixes a stack overflow in `ParseAttrValue` with nested tensors
2936    ([CVE-2021-29615](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29615))
2937*   Fixes a null dereference in Grappler's `TrySimplify`
2938    ([CVE-2021-29616](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29616))
2939*   Fixes a crash in `tf.transpose` with complex inputs
2940    ([CVE-2021-29618](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29618))
2941*   Fixes a crash in `tf.strings.substr` due to `CHECK`-fail
2942    ([CVE-2021-29617](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29617))
2943*   Fixes a segfault in `tf.raw_ops.SparseCountSparseOutput`
2944    ([CVE-2021-29619](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29619))
2945*   Fixes a segfault in `tf.raw_ops.ImmutableConst`
2946    ([CVE-2021-29539](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29539))
2947*   Updates `curl` to `7.76.0` to handle
2948    [CVE-2020-8169](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8169),
2949    [CVE-2020-8177](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8177),
2950    [CVE-2020-8231](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8231),
2951    [CVE-2020-8284](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8284),
2952    [CVE-2020-8285](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8285)
2953    and
2954    [CVE-2020-8286](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8286).
2955
2956# Release 2.3.3
2957
2958This release introduces several vulnerability fixes:
2959
2960*   Fixes a heap buffer overflow in `RaggedBinCount`
2961    ([CVE-2021-29512](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29512))
2962*   Fixes a heap out of bounds write in `RaggedBinCount`
2963    ([CVE-2021-29514](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29514))
2964*   Fixes a type confusion during tensor casts which leads to dereferencing null
2965    pointers
2966    ([CVE-2021-29513](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29513))
2967*   Fixes a reference binding to null pointer in `MatrixDiag*` ops
2968    ([CVE-2021-29515](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29515))
2969*   Fixes a null pointer dereference via invalid Ragged Tensors
2970    ([CVE-2021-29516](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29516))
2971*   Fixes a division by zero in `Conv3D`
2972    ([CVE-2021-29517](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29517))
2973*   Fixes vulnerabilities where session operations in eager mode lead to null
2974    pointer dereferences
2975    ([CVE-2021-29518](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29518))
2976*   Fixes a `CHECK`-fail in `SparseCross` caused by type confusion
2977    ([CVE-2021-29519](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29519))
2978*   Fixes a segfault in `SparseCountSparseOutput`
2979    ([CVE-2021-29521](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29521))
2980*   Fixes a heap buffer overflow in `Conv3DBackprop*`
2981    ([CVE-2021-29520](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29520))
2982*   Fixes a division by 0 in `Conv3DBackprop*`
2983    ([CVE-2021-29522](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29522))
2984*   Fixes a `CHECK`-fail in `AddManySparseToTensorsMap`
2985    ([CVE-2021-29523](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29523))
2986*   Fixes a division by 0 in `Conv2DBackpropFilter`
2987    ([CVE-2021-29524](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29524))
2988*   Fixes a division by 0 in `Conv2DBackpropInput`
2989    ([CVE-2021-29525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29525))
2990*   Fixes a division by 0 in `Conv2D`
2991    ([CVE-2021-29526](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29526))
2992*   Fixes a division by 0 in `QuantizedConv2D`
2993    ([CVE-2021-29527](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29527))
2994*   Fixes a division by 0 in `QuantizedMul`
2995    ([CVE-2021-29528](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29528))
2996*   Fixes vulnerabilities caused by invalid validation in
2997    `SparseMatrixSparseCholesky`
2998    ([CVE-2021-29530](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29530))
2999*   Fixes a heap buffer overflow caused by rounding
3000    ([CVE-2021-29529](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29529))
3001*   Fixes a `CHECK`-fail in `tf.raw_ops.EncodePng`
3002    ([CVE-2021-29531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29531))
3003*   Fixes a heap out of bounds read in `RaggedCross`
3004    ([CVE-2021-29532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29532))
3005*   Fixes a `CHECK`-fail in `DrawBoundingBoxes`
3006    ([CVE-2021-29533](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29533))
3007*   Fixes a heap buffer overflow in `QuantizedMul`
3008    ([CVE-2021-29535](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29535))
3009*   Fixes a `CHECK`-fail in `SparseConcat`
3010    ([CVE-2021-29534](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29534))
3011*   Fixes a heap buffer overflow in `QuantizedResizeBilinear`
3012    ([CVE-2021-29537](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29537))
3013*   Fixes a heap buffer overflow in `QuantizedReshape`
3014    ([CVE-2021-29536](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29536))
3015*   Fixes a division by zero in `Conv2DBackpropFilter`
3016    ([CVE-2021-29538](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29538))
3017*   Fixes a heap buffer overflow in `Conv2DBackpropFilter`
3018    ([CVE-2021-29540](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29540))
3019*   Fixes a heap buffer overflow in `StringNGrams`
3020    ([CVE-2021-29542](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29542))
3021*   Fixes a null pointer dereference in `StringNGrams`
3022    ([CVE-2021-29541](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29541))
3023*   Fixes a `CHECK`-fail in `QuantizeAndDequantizeV4Grad`
3024    ([CVE-2021-29544](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29544))
3025*   Fixes a `CHECK`-fail in `CTCGreedyDecoder`
3026    ([CVE-2021-29543](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29543))
3027*   Fixes a heap buffer overflow in `SparseTensorToCSRSparseMatrix`
3028    ([CVE-2021-29545](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29545))
3029*   Fixes a division by 0 in `QuantizedBiasAdd`
3030    ([CVE-2021-29546](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29546))
3031*   Fixes a heap out of bounds in `QuantizedBatchNormWithGlobalNormalization`
3032    ([CVE-2021-29547](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29547))
3033*   Fixes a division by 0 in `QuantizedBatchNormWithGlobalNormalization`
3034    ([CVE-2021-29548](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29548))
3035*   Fixes a division by 0 in `QuantizedAdd`
3036    ([CVE-2021-29549](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29549))
3037*   Fixes a division by 0 in `FractionalAvgPool`
3038    ([CVE-2021-29550](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29550))
3039*   Fixes an OOB read in `MatrixTriangularSolve`
3040    ([CVE-2021-29551](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29551))
3041*   Fixes a heap OOB in `QuantizeAndDequantizeV3`
3042    ([CVE-2021-29553](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29553))
3043*   Fixes a `CHECK`-failure in `UnsortedSegmentJoin`
3044    ([CVE-2021-29552](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29552))
3045*   Fixes a division by 0 in `DenseCountSparseOutput`
3046    ([CVE-2021-29554](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29554))
3047*   Fixes a division by 0 in `FusedBatchNorm`
3048    ([CVE-2021-29555](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29555))
3049*   Fixes a division by 0 in `SparseMatMul`
3050    ([CVE-2021-29557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29557))
3051*   Fixes a division by 0 in `Reverse`
3052    ([CVE-2021-29556](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29556))
3053*   Fixes a heap buffer overflow in `SparseSplit`
3054    ([CVE-2021-29558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29558))
3055*   Fixes a heap OOB access in unicode ops
3056    ([CVE-2021-29559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29559))
3057*   Fixes a heap buffer overflow in `RaggedTensorToTensor`
3058    ([CVE-2021-29560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29560))
3059*   Fixes a `CHECK`-fail in `LoadAndRemapMatrix`
3060    ([CVE-2021-29561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29561))
3061*   Fixes a `CHECK`-fail in `tf.raw_ops.IRFFT`
3062    ([CVE-2021-29562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29562))
3063*   Fixes a `CHECK`-fail in `tf.raw_ops.RFFT`
3064    ([CVE-2021-29563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29563))
3065*   Fixes a null pointer dereference in `EditDistance`
3066    ([CVE-2021-29564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29564))
3067*   Fixes a null pointer dereference in `SparseFillEmptyRows`
3068    ([CVE-2021-29565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29565))
3069*   Fixes a heap OOB access in `Dilation2DBackpropInput`
3070    ([CVE-2021-29566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29566))
3071*   Fixes a reference binding to null in `ParameterizedTruncatedNormal`
3072    ([CVE-2021-29568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29568))
3073*   Fixes a set of vulnerabilities caused by lack of validation in
3074    `SparseDenseCwiseMul`
3075    ([CVE-2021-29567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29567))
3076*   Fixes a heap out of bounds read in `MaxPoolGradWithArgmax`
3077    ([CVE-2021-29570](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29570))
3078*   Fixes a heap out of bounds read in `RequantizationRange`
3079    ([CVE-2021-29569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29569))
3080*   Fixes a memory corruption in `DrawBoundingBoxesV2`
3081    ([CVE-2021-29571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29571))
3082*   Fixes a reference binding to nullptr in `SdcaOptimizer`
3083    ([CVE-2021-29572](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29572))
3084*   Fixes an overflow and a denial of service in `tf.raw_ops.ReverseSequence`
3085    ([CVE-2021-29575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29575))
3086*   Fixes a division by 0 in `MaxPoolGradWithArgmax`
3087    ([CVE-2021-29573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29573))
3088*   Fixes an undefined behavior in `MaxPool3DGradGrad`
3089    ([CVE-2021-29574](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29574))
3090*   Fixes a heap buffer overflow in `MaxPool3DGradGrad`
3091    ([CVE-2021-29576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29576))
3092*   Fixes a heap buffer overflow in `AvgPool3DGrad`
3093    ([CVE-2021-29577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29577))
3094*   Fixes an undefined behavior and a `CHECK`-fail in `FractionalMaxPoolGrad`
3095    ([CVE-2021-29580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29580))
3096*   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
3097    ([CVE-2021-29578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29578))
3098*   Fixes a heap buffer overflow in `MaxPoolGrad`
3099    ([CVE-2021-29579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29579))
3100*   Fixes a segfault in `CTCBeamSearchDecoder`
3101    ([CVE-2021-29581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29581))
3102*   Fixes a heap OOB read in `tf.raw_ops.Dequantize`
3103    ([CVE-2021-29582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29582))
3104*   Fixes a `CHECK`-fail due to integer overflow
3105    ([CVE-2021-29584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29584))
3106*   Fixes a heap buffer overflow and undefined behavior in `FusedBatchNorm`
3107    ([CVE-2021-29583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29583))
3108*   Fixes a division by zero in padding computation in TFLite
3109    ([CVE-2021-29585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29585))
3110*   Fixes a division by zero in optimized pooling implementations in TFLite
3111    ([CVE-2021-29586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29586))
3112*   Fixes a division by zero in TFLite's implementation of `SpaceToDepth`
3113    ([CVE-2021-29587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29587))
3114*   Fixes a division by zero in TFLite's implementation of `GatherNd`
3115    ([CVE-2021-29589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29589))
3116*   Fixes a division by zero in TFLite's implementation of `TransposeConv`
3117    ([CVE-2021-29588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29588))
3118*   Fixes a heap OOB read in TFLite's implementation of `Minimum` or `Maximum`
3119    ([CVE-2021-29590](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29590))
3120*   Fixes a null pointer dereference in TFLite's `Reshape` operator
3121    ([CVE-2021-29592](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29592))
3122*   Fixes a stack overflow due to looping TFLite subgraph
3123    ([CVE-2021-29591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29591))
3124*   Fixes a division by zero in TFLite's implementation of `DepthToSpace`
3125    ([CVE-2021-29595](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29595))
3126*   Fixes a division by zero in TFLite's convolution code
3127    ([CVE-2021-29594](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29594))
3128*   Fixes a division by zero in TFLite's implementation of `EmbeddingLookup`
3129    ([CVE-2021-29596](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29596))
3130*   Fixes a division by zero in TFLite's implementation of `BatchToSpaceNd`
3131    ([CVE-2021-29593](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29593))
3132*   Fixes a division by zero in TFLite's implementation of `SpaceToBatchNd`
3133    ([CVE-2021-29597](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29597))
3134*   Fixes a division by zero in TFLite's implementation of `SVDF`
3135    ([CVE-2021-29598](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29598))
3136*   Fixes a division by zero in TFLite's implementation of `Split`
3137    ([CVE-2021-29599](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29599))
3138*   Fixes a division by zero in TFLite's implementation of `OneHot`
3139    ([CVE-2021-29600](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29600))
3140*   Fixes a division by zero in TFLite's implementation of `DepthwiseConv`
3141    ([CVE-2021-29602](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29602))
3142*   Fixes a division by zero in TFLite's implementation of hashtable lookup
3143    ([CVE-2021-29604](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29604))
3144*   Fixes a integer overflow in TFLite concatentation
3145    ([CVE-2021-29601](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29601))
3146*   Fixes a integer overflow in TFLite memory allocation
3147    ([CVE-2021-29605](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29605))
3148*   Fixes a heap OOB write in TFLite
3149    ([CVE-2021-29603](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29603))
3150*   Fixes a heap OOB read in TFLite
3151    ([CVE-2021-29606](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29606))
3152*   Fixes a heap OOB and null pointer dereference in `RaggedTensorToTensor`
3153    ([CVE-2021-29608](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29608))
3154*   Fixes vulnerabilities caused by incomplete validation in `SparseAdd`
3155    ([CVE-2021-29609](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29609))
3156*   Fixes vulnerabilities caused by incomplete validation in
3157    `SparseSparseMinimum`
3158    ([CVE-2021-29607](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29607))
3159*   Fixes vulnerabilities caused by incomplete validation in `SparseReshape`
3160    ([CVE-2021-29611](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29611))
3161*   Fixes vulnerabilities caused by invalid validation in
3162    `QuantizeAndDequantizeV2`
3163    ([CVE-2021-29610](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29610))
3164*   Fixes a heap buffer overflow in `BandedTriangularSolve`
3165    ([CVE-2021-29612](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29612))
3166*   Fixes vulnerabilities caused by incomplete validation in
3167    `tf.raw_ops.CTCLoss`
3168    ([CVE-2021-29613](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29613))
3169*   Fixes an interpreter crash from vulnerabilities in `tf.io.decode_raw`
3170    ([CVE-2021-29614](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29614))
3171*   Fixes a stack overflow in `ParseAttrValue` with nested tensors
3172    ([CVE-2021-29615](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29615))
3173*   Fixes a null dereference in Grappler's `TrySimplify`
3174    ([CVE-2021-29616](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29616))
3175*   Fixes a crash in `tf.transpose` with complex inputs
3176    ([CVE-2021-29618](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29618))
3177*   Fixes a crash in `tf.strings.substr` due to `CHECK`-fail
3178    ([CVE-2021-29617](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29617))
3179*   Fixes a segfault in `tf.raw_ops.SparseCountSparseOutput`
3180    ([CVE-2021-29619](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29619))
3181*   Fixes a segfault in `tf.raw_ops.ImmutableConst`
3182    ([CVE-2021-29539](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29539))
3183*   Updates `curl` to `7.76.0` to handle
3184    [CVE-2020-8169](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8169),
3185    [CVE-2020-8177](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8177),
3186    [CVE-2020-8231](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8231),
3187    [CVE-2020-8284](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8284),
3188    [CVE-2020-8285](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8285)
3189    and
3190    [CVE-2020-8286](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8286).
3191
3192# Release 2.2.3
3193
3194This release introduces several vulnerability fixes:
3195
3196*   Fixes a heap buffer overflow in `RaggedBinCount`
3197    ([CVE-2021-29512](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29512))
3198*   Fixes a heap out of bounds write in `RaggedBinCount`
3199    ([CVE-2021-29514](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29514))
3200*   Fixes a type confusion during tensor casts which leads to dereferencing null
3201    pointers
3202    ([CVE-2021-29513](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29513))
3203*   Fixes a reference binding to null pointer in `MatrixDiag*` ops
3204    ([CVE-2021-29515](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29515))
3205*   Fixes a null pointer dereference via invalid Ragged Tensors
3206    ([CVE-2021-29516](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29516))
3207*   Fixes a division by zero in `Conv3D`
3208    ([CVE-2021-29517](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29517))
3209*   Fixes vulnerabilities where session operations in eager mode lead to null
3210    pointer dereferences
3211    ([CVE-2021-29518](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29518))
3212*   Fixes a `CHECK`-fail in `SparseCross` caused by type confusion
3213    ([CVE-2021-29519](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29519))
3214*   Fixes a segfault in `SparseCountSparseOutput`
3215    ([CVE-2021-29521](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29521))
3216*   Fixes a heap buffer overflow in `Conv3DBackprop*`
3217    ([CVE-2021-29520](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29520))
3218*   Fixes a division by 0 in `Conv3DBackprop*`
3219    ([CVE-2021-29522](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29522))
3220*   Fixes a `CHECK`-fail in `AddManySparseToTensorsMap`
3221    ([CVE-2021-29523](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29523))
3222*   Fixes a division by 0 in `Conv2DBackpropFilter`
3223    ([CVE-2021-29524](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29524))
3224*   Fixes a division by 0 in `Conv2DBackpropInput`
3225    ([CVE-2021-29525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29525))
3226*   Fixes a division by 0 in `Conv2D`
3227    ([CVE-2021-29526](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29526))
3228*   Fixes a division by 0 in `QuantizedConv2D`
3229    ([CVE-2021-29527](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29527))
3230*   Fixes a division by 0 in `QuantizedMul`
3231    ([CVE-2021-29528](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29528))
3232*   Fixes vulnerabilities caused by invalid validation in
3233    `SparseMatrixSparseCholesky`
3234    ([CVE-2021-29530](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29530))
3235*   Fixes a heap buffer overflow caused by rounding
3236    ([CVE-2021-29529](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29529))
3237*   Fixes a `CHECK`-fail in `tf.raw_ops.EncodePng`
3238    ([CVE-2021-29531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29531))
3239*   Fixes a heap out of bounds read in `RaggedCross`
3240    ([CVE-2021-29532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29532))
3241*   Fixes a `CHECK`-fail in `DrawBoundingBoxes`
3242    ([CVE-2021-29533](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29533))
3243*   Fixes a heap buffer overflow in `QuantizedMul`
3244    ([CVE-2021-29535](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29535))
3245*   Fixes a `CHECK`-fail in `SparseConcat`
3246    ([CVE-2021-29534](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29534))
3247*   Fixes a heap buffer overflow in `QuantizedResizeBilinear`
3248    ([CVE-2021-29537](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29537))
3249*   Fixes a heap buffer overflow in `QuantizedReshape`
3250    ([CVE-2021-29536](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29536))
3251*   Fixes a division by zero in `Conv2DBackpropFilter`
3252    ([CVE-2021-29538](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29538))
3253*   Fixes a heap buffer overflow in `Conv2DBackpropFilter`
3254    ([CVE-2021-29540](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29540))
3255*   Fixes a heap buffer overflow in `StringNGrams`
3256    ([CVE-2021-29542](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29542))
3257*   Fixes a null pointer dereference in `StringNGrams`
3258    ([CVE-2021-29541](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29541))
3259*   Fixes a `CHECK`-fail in `QuantizeAndDequantizeV4Grad`
3260    ([CVE-2021-29544](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29544))
3261*   Fixes a `CHECK`-fail in `CTCGreedyDecoder`
3262    ([CVE-2021-29543](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29543))
3263*   Fixes a heap buffer overflow in `SparseTensorToCSRSparseMatrix`
3264    ([CVE-2021-29545](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29545))
3265*   Fixes a division by 0 in `QuantizedBiasAdd`
3266    ([CVE-2021-29546](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29546))
3267*   Fixes a heap out of bounds in `QuantizedBatchNormWithGlobalNormalization`
3268    ([CVE-2021-29547](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29547))
3269*   Fixes a division by 0 in `QuantizedBatchNormWithGlobalNormalization`
3270    ([CVE-2021-29548](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29548))
3271*   Fixes a division by 0 in `QuantizedAdd`
3272    ([CVE-2021-29549](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29549))
3273*   Fixes a division by 0 in `FractionalAvgPool`
3274    ([CVE-2021-29550](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29550))
3275*   Fixes an OOB read in `MatrixTriangularSolve`
3276    ([CVE-2021-29551](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29551))
3277*   Fixes a heap OOB in `QuantizeAndDequantizeV3`
3278    ([CVE-2021-29553](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29553))
3279*   Fixes a `CHECK`-failure in `UnsortedSegmentJoin`
3280    ([CVE-2021-29552](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29552))
3281*   Fixes a division by 0 in `DenseCountSparseOutput`
3282    ([CVE-2021-29554](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29554))
3283*   Fixes a division by 0 in `FusedBatchNorm`
3284    ([CVE-2021-29555](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29555))
3285*   Fixes a division by 0 in `SparseMatMul`
3286    ([CVE-2021-29557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29557))
3287*   Fixes a division by 0 in `Reverse`
3288    ([CVE-2021-29556](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29556))
3289*   Fixes a heap buffer overflow in `SparseSplit`
3290    ([CVE-2021-29558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29558))
3291*   Fixes a heap OOB access in unicode ops
3292    ([CVE-2021-29559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29559))
3293*   Fixes a heap buffer overflow in `RaggedTensorToTensor`
3294    ([CVE-2021-29560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29560))
3295*   Fixes a `CHECK`-fail in `LoadAndRemapMatrix`
3296    ([CVE-2021-29561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29561))
3297*   Fixes a `CHECK`-fail in `tf.raw_ops.IRFFT`
3298    ([CVE-2021-29562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29562))
3299*   Fixes a `CHECK`-fail in `tf.raw_ops.RFFT`
3300    ([CVE-2021-29563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29563))
3301*   Fixes a null pointer dereference in `EditDistance`
3302    ([CVE-2021-29564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29564))
3303*   Fixes a null pointer dereference in `SparseFillEmptyRows`
3304    ([CVE-2021-29565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29565))
3305*   Fixes a heap OOB access in `Dilation2DBackpropInput`
3306    ([CVE-2021-29566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29566))
3307*   Fixes a reference binding to null in `ParameterizedTruncatedNormal`
3308    ([CVE-2021-29568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29568))
3309*   Fixes a set of vulnerabilities caused by lack of validation in
3310    `SparseDenseCwiseMul`
3311    ([CVE-2021-29567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29567))
3312*   Fixes a heap out of bounds read in `MaxPoolGradWithArgmax`
3313    ([CVE-2021-29570](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29570))
3314*   Fixes a heap out of bounds read in `RequantizationRange`
3315    ([CVE-2021-29569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29569))
3316*   Fixes a memory corruption in `DrawBoundingBoxesV2`
3317    ([CVE-2021-29571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29571))
3318*   Fixes a reference binding to nullptr in `SdcaOptimizer`
3319    ([CVE-2021-29572](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29572))
3320*   Fixes an overflow and a denial of service in `tf.raw_ops.ReverseSequence`
3321    ([CVE-2021-29575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29575))
3322*   Fixes a division by 0 in `MaxPoolGradWithArgmax`
3323    ([CVE-2021-29573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29573))
3324*   Fixes an undefined behavior in `MaxPool3DGradGrad`
3325    ([CVE-2021-29574](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29574))
3326*   Fixes a heap buffer overflow in `MaxPool3DGradGrad`
3327    ([CVE-2021-29576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29576))
3328*   Fixes a heap buffer overflow in `AvgPool3DGrad`
3329    ([CVE-2021-29577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29577))
3330*   Fixes an undefined behavior and a `CHECK`-fail in `FractionalMaxPoolGrad`
3331    ([CVE-2021-29580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29580))
3332*   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
3333    ([CVE-2021-29578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29578))
3334*   Fixes a heap buffer overflow in `MaxPoolGrad`
3335    ([CVE-2021-29579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29579))
3336*   Fixes a segfault in `CTCBeamSearchDecoder`
3337    ([CVE-2021-29581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29581))
3338*   Fixes a heap OOB read in `tf.raw_ops.Dequantize`
3339    ([CVE-2021-29582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29582))
3340*   Fixes a `CHECK`-fail due to integer overflow
3341    ([CVE-2021-29584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29584))
3342*   Fixes a heap buffer overflow and undefined behavior in `FusedBatchNorm`
3343    ([CVE-2021-29583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29583))
3344*   Fixes a division by zero in padding computation in TFLite
3345    ([CVE-2021-29585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29585))
3346*   Fixes a division by zero in optimized pooling implementations in TFLite
3347    ([CVE-2021-29586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29586))
3348*   Fixes a division by zero in TFLite's implementation of `SpaceToDepth`
3349    ([CVE-2021-29587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29587))
3350*   Fixes a division by zero in TFLite's implementation of `GatherNd`
3351    ([CVE-2021-29589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29589))
3352*   Fixes a division by zero in TFLite's implementation of `TransposeConv`
3353    ([CVE-2021-29588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29588))
3354*   Fixes a heap OOB read in TFLite's implementation of `Minimum` or `Maximum`
3355    ([CVE-2021-29590](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29590))
3356*   Fixes a null pointer dereference in TFLite's `Reshape` operator
3357    ([CVE-2021-29592](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29592))
3358*   Fixes a stack overflow due to looping TFLite subgraph
3359    ([CVE-2021-29591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29591))
3360*   Fixes a division by zero in TFLite's implementation of `DepthToSpace`
3361    ([CVE-2021-29595](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29595))
3362*   Fixes a division by zero in TFLite's convolution code
3363    ([CVE-2021-29594](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29594))
3364*   Fixes a division by zero in TFLite's implementation of `EmbeddingLookup`
3365    ([CVE-2021-29596](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29596))
3366*   Fixes a division by zero in TFLite's implementation of `BatchToSpaceNd`
3367    ([CVE-2021-29593](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29593))
3368*   Fixes a division by zero in TFLite's implementation of `SpaceToBatchNd`
3369    ([CVE-2021-29597](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29597))
3370*   Fixes a division by zero in TFLite's implementation of `SVDF`
3371    ([CVE-2021-29598](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29598))
3372*   Fixes a division by zero in TFLite's implementation of `Split`
3373    ([CVE-2021-29599](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29599))
3374*   Fixes a division by zero in TFLite's implementation of `OneHot`
3375    ([CVE-2021-29600](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29600))
3376*   Fixes a division by zero in TFLite's implementation of `DepthwiseConv`
3377    ([CVE-2021-29602](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29602))
3378*   Fixes a division by zero in TFLite's implementation of hashtable lookup
3379    ([CVE-2021-29604](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29604))
3380*   Fixes a integer overflow in TFLite concatentation
3381    ([CVE-2021-29601](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29601))
3382*   Fixes a integer overflow in TFLite memory allocation
3383    ([CVE-2021-29605](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29605))
3384*   Fixes a heap OOB write in TFLite
3385    ([CVE-2021-29603](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29603))
3386*   Fixes a heap OOB read in TFLite
3387    ([CVE-2021-29606](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29606))
3388*   Fixes a heap OOB and null pointer dereference in `RaggedTensorToTensor`
3389    ([CVE-2021-29608](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29608))
3390*   Fixes vulnerabilities caused by incomplete validation in `SparseAdd`
3391    ([CVE-2021-29609](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29609))
3392*   Fixes vulnerabilities caused by incomplete validation in
3393    `SparseSparseMinimum`
3394    ([CVE-2021-29607](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29607))
3395*   Fixes vulnerabilities caused by incomplete validation in `SparseReshape`
3396    ([CVE-2021-29611](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29611))
3397*   Fixes vulnerabilities caused by invalid validation in
3398    `QuantizeAndDequantizeV2`
3399    ([CVE-2021-29610](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29610))
3400*   Fixes a heap buffer overflow in `BandedTriangularSolve`
3401    ([CVE-2021-29612](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29612))
3402*   Fixes vulnerabilities caused by incomplete validation in
3403    `tf.raw_ops.CTCLoss`
3404    ([CVE-2021-29613](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29613))
3405*   Fixes an interpreter crash from vulnerabilities in `tf.io.decode_raw`
3406    ([CVE-2021-29614](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29614))
3407*   Fixes a stack overflow in `ParseAttrValue` with nested tensors
3408    ([CVE-2021-29615](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29615))
3409*   Fixes a null dereference in Grappler's `TrySimplify`
3410    ([CVE-2021-29616](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29616))
3411*   Fixes a crash in `tf.transpose` with complex inputs
3412    ([CVE-2021-29618](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29618))
3413*   Fixes a crash in `tf.strings.substr` due to `CHECK`-fail
3414    ([CVE-2021-29617](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29617))
3415*   Fixes a segfault in `tf.raw_ops.SparseCountSparseOutput`
3416    ([CVE-2021-29619](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29619))
3417*   Fixes a segfault in `tf.raw_ops.ImmutableConst`
3418    ([CVE-2021-29539](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29539))
3419*   Updates `curl` to `7.76.0` to handle
3420    [CVE-2020-8169](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8169),
3421    [CVE-2020-8177](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8177),
3422    [CVE-2020-8231](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8231),
3423    [CVE-2020-8284](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8284),
3424    [CVE-2020-8285](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8285)
3425    and
3426    [CVE-2020-8286](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8286).
3427
3428# Release 2.1.4
3429
3430This release introduces several vulnerability fixes:
3431
3432*   Fixes a heap buffer overflow in `RaggedBinCount`
3433    ([CVE-2021-29512](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29512))
3434*   Fixes a heap out of bounds write in `RaggedBinCount`
3435    ([CVE-2021-29514](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29514))
3436*   Fixes a type confusion during tensor casts which leads to dereferencing null
3437    pointers
3438    ([CVE-2021-29513](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29513))
3439*   Fixes a reference binding to null pointer in `MatrixDiag*` ops
3440    ([CVE-2021-29515](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29515))
3441*   Fixes a null pointer dereference via invalid Ragged Tensors
3442    ([CVE-2021-29516](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29516))
3443*   Fixes a division by zero in `Conv3D`
3444    ([CVE-2021-29517](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29517))
3445*   Fixes vulnerabilities where session operations in eager mode lead to null
3446    pointer dereferences
3447    ([CVE-2021-29518](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29518))
3448*   Fixes a `CHECK`-fail in `SparseCross` caused by type confusion
3449    ([CVE-2021-29519](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29519))
3450*   Fixes a segfault in `SparseCountSparseOutput`
3451    ([CVE-2021-29521](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29521))
3452*   Fixes a heap buffer overflow in `Conv3DBackprop*`
3453    ([CVE-2021-29520](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29520))
3454*   Fixes a division by 0 in `Conv3DBackprop*`
3455    ([CVE-2021-29522](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29522))
3456*   Fixes a `CHECK`-fail in `AddManySparseToTensorsMap`
3457    ([CVE-2021-29523](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29523))
3458*   Fixes a division by 0 in `Conv2DBackpropFilter`
3459    ([CVE-2021-29524](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29524))
3460*   Fixes a division by 0 in `Conv2DBackpropInput`
3461    ([CVE-2021-29525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29525))
3462*   Fixes a division by 0 in `Conv2D`
3463    ([CVE-2021-29526](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29526))
3464*   Fixes a division by 0 in `QuantizedConv2D`
3465    ([CVE-2021-29527](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29527))
3466*   Fixes a division by 0 in `QuantizedMul`
3467    ([CVE-2021-29528](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29528))
3468*   Fixes vulnerabilities caused by invalid validation in
3469    `SparseMatrixSparseCholesky`
3470    ([CVE-2021-29530](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29530))
3471*   Fixes a heap buffer overflow caused by rounding
3472    ([CVE-2021-29529](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29529))
3473*   Fixes a `CHECK`-fail in `tf.raw_ops.EncodePng`
3474    ([CVE-2021-29531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29531))
3475*   Fixes a heap out of bounds read in `RaggedCross`
3476    ([CVE-2021-29532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29532))
3477*   Fixes a `CHECK`-fail in `DrawBoundingBoxes`
3478    ([CVE-2021-29533](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29533))
3479*   Fixes a heap buffer overflow in `QuantizedMul`
3480    ([CVE-2021-29535](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29535))
3481*   Fixes a `CHECK`-fail in `SparseConcat`
3482    ([CVE-2021-29534](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29534))
3483*   Fixes a heap buffer overflow in `QuantizedResizeBilinear`
3484    ([CVE-2021-29537](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29537))
3485*   Fixes a heap buffer overflow in `QuantizedReshape`
3486    ([CVE-2021-29536](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29536))
3487*   Fixes a division by zero in `Conv2DBackpropFilter`
3488    ([CVE-2021-29538](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29538))
3489*   Fixes a heap buffer overflow in `Conv2DBackpropFilter`
3490    ([CVE-2021-29540](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29540))
3491*   Fixes a heap buffer overflow in `StringNGrams`
3492    ([CVE-2021-29542](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29542))
3493*   Fixes a null pointer dereference in `StringNGrams`
3494    ([CVE-2021-29541](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29541))
3495*   Fixes a `CHECK`-fail in `QuantizeAndDequantizeV4Grad`
3496    ([CVE-2021-29544](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29544))
3497*   Fixes a `CHECK`-fail in `CTCGreedyDecoder`
3498    ([CVE-2021-29543](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29543))
3499*   Fixes a heap buffer overflow in `SparseTensorToCSRSparseMatrix`
3500    ([CVE-2021-29545](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29545))
3501*   Fixes a division by 0 in `QuantizedBiasAdd`
3502    ([CVE-2021-29546](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29546))
3503*   Fixes a heap out of bounds in `QuantizedBatchNormWithGlobalNormalization`
3504    ([CVE-2021-29547](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29547))
3505*   Fixes a division by 0 in `QuantizedBatchNormWithGlobalNormalization`
3506    ([CVE-2021-29548](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29548))
3507*   Fixes a division by 0 in `QuantizedAdd`
3508    ([CVE-2021-29549](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29549))
3509*   Fixes a division by 0 in `FractionalAvgPool`
3510    ([CVE-2021-29550](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29550))
3511*   Fixes an OOB read in `MatrixTriangularSolve`
3512    ([CVE-2021-29551](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29551))
3513*   Fixes a heap OOB in `QuantizeAndDequantizeV3`
3514    ([CVE-2021-29553](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29553))
3515*   Fixes a `CHECK`-failure in `UnsortedSegmentJoin`
3516    ([CVE-2021-29552](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29552))
3517*   Fixes a division by 0 in `DenseCountSparseOutput`
3518    ([CVE-2021-29554](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29554))
3519*   Fixes a division by 0 in `FusedBatchNorm`
3520    ([CVE-2021-29555](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29555))
3521*   Fixes a division by 0 in `SparseMatMul`
3522    ([CVE-2021-29557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29557))
3523*   Fixes a division by 0 in `Reverse`
3524    ([CVE-2021-29556](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29556))
3525*   Fixes a heap buffer overflow in `SparseSplit`
3526    ([CVE-2021-29558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29558))
3527*   Fixes a heap OOB access in unicode ops
3528    ([CVE-2021-29559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29559))
3529*   Fixes a heap buffer overflow in `RaggedTensorToTensor`
3530    ([CVE-2021-29560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29560))
3531*   Fixes a `CHECK`-fail in `LoadAndRemapMatrix`
3532    ([CVE-2021-29561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29561))
3533*   Fixes a `CHECK`-fail in `tf.raw_ops.IRFFT`
3534    ([CVE-2021-29562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29562))
3535*   Fixes a `CHECK`-fail in `tf.raw_ops.RFFT`
3536    ([CVE-2021-29563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29563))
3537*   Fixes a null pointer dereference in `EditDistance`
3538    ([CVE-2021-29564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29564))
3539*   Fixes a null pointer dereference in `SparseFillEmptyRows`
3540    ([CVE-2021-29565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29565))
3541*   Fixes a heap OOB access in `Dilation2DBackpropInput`
3542    ([CVE-2021-29566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29566))
3543*   Fixes a reference binding to null in `ParameterizedTruncatedNormal`
3544    ([CVE-2021-29568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29568))
3545*   Fixes a set of vulnerabilities caused by lack of validation in
3546    `SparseDenseCwiseMul`
3547    ([CVE-2021-29567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29567))
3548*   Fixes a heap out of bounds read in `MaxPoolGradWithArgmax`
3549    ([CVE-2021-29570](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29570))
3550*   Fixes a heap out of bounds read in `RequantizationRange`
3551    ([CVE-2021-29569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29569))
3552*   Fixes a memory corruption in `DrawBoundingBoxesV2`
3553    ([CVE-2021-29571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29571))
3554*   Fixes a reference binding to nullptr in `SdcaOptimizer`
3555    ([CVE-2021-29572](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29572))
3556*   Fixes an overflow and a denial of service in `tf.raw_ops.ReverseSequence`
3557    ([CVE-2021-29575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29575))
3558*   Fixes a division by 0 in `MaxPoolGradWithArgmax`
3559    ([CVE-2021-29573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29573))
3560*   Fixes an undefined behavior in `MaxPool3DGradGrad`
3561    ([CVE-2021-29574](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29574))
3562*   Fixes a heap buffer overflow in `MaxPool3DGradGrad`
3563    ([CVE-2021-29576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29576))
3564*   Fixes a heap buffer overflow in `AvgPool3DGrad`
3565    ([CVE-2021-29577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29577))
3566*   Fixes an undefined behavior and a `CHECK`-fail in `FractionalMaxPoolGrad`
3567    ([CVE-2021-29580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29580))
3568*   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
3569    ([CVE-2021-29578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29578))
3570*   Fixes a heap buffer overflow in `MaxPoolGrad`
3571    ([CVE-2021-29579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29579))
3572*   Fixes a segfault in `CTCBeamSearchDecoder`
3573    ([CVE-2021-29581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29581))
3574*   Fixes a heap OOB read in `tf.raw_ops.Dequantize`
3575    ([CVE-2021-29582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29582))
3576*   Fixes a `CHECK`-fail due to integer overflow
3577    ([CVE-2021-29584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29584))
3578*   Fixes a heap buffer overflow and undefined behavior in `FusedBatchNorm`
3579    ([CVE-2021-29583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29583))
3580*   Fixes a division by zero in padding computation in TFLite
3581    ([CVE-2021-29585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29585))
3582*   Fixes a division by zero in optimized pooling implementations in TFLite
3583    ([CVE-2021-29586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29586))
3584*   Fixes a division by zero in TFLite's implementation of `SpaceToDepth`
3585    ([CVE-2021-29587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29587))
3586*   Fixes a division by zero in TFLite's implementation of `GatherNd`
3587    ([CVE-2021-29589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29589))
3588*   Fixes a division by zero in TFLite's implementation of `TransposeConv`
3589    ([CVE-2021-29588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29588))
3590*   Fixes a heap OOB read in TFLite's implementation of `Minimum` or `Maximum`
3591    ([CVE-2021-29590](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29590))
3592*   Fixes a null pointer dereference in TFLite's `Reshape` operator
3593    ([CVE-2021-29592](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29592))
3594*   Fixes a stack overflow due to looping TFLite subgraph
3595    ([CVE-2021-29591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29591))
3596*   Fixes a division by zero in TFLite's implementation of `DepthToSpace`
3597    ([CVE-2021-29595](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29595))
3598*   Fixes a division by zero in TFLite's convolution code
3599    ([CVE-2021-29594](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29594))
3600*   Fixes a division by zero in TFLite's implementation of `EmbeddingLookup`
3601    ([CVE-2021-29596](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29596))
3602*   Fixes a division by zero in TFLite's implementation of `BatchToSpaceNd`
3603    ([CVE-2021-29593](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29593))
3604*   Fixes a division by zero in TFLite's implementation of `SpaceToBatchNd`
3605    ([CVE-2021-29597](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29597))
3606*   Fixes a division by zero in TFLite's implementation of `SVDF`
3607    ([CVE-2021-29598](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29598))
3608*   Fixes a division by zero in TFLite's implementation of `Split`
3609    ([CVE-2021-29599](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29599))
3610*   Fixes a division by zero in TFLite's implementation of `OneHot`
3611    ([CVE-2021-29600](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29600))
3612*   Fixes a division by zero in TFLite's implementation of `DepthwiseConv`
3613    ([CVE-2021-29602](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29602))
3614*   Fixes a division by zero in TFLite's implementation of hashtable lookup
3615    ([CVE-2021-29604](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29604))
3616*   Fixes a integer overflow in TFLite concatentation
3617    ([CVE-2021-29601](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29601))
3618*   Fixes a integer overflow in TFLite memory allocation
3619    ([CVE-2021-29605](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29605))
3620*   Fixes a heap OOB write in TFLite
3621    ([CVE-2021-29603](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29603))
3622*   Fixes a heap OOB read in TFLite
3623    ([CVE-2021-29606](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29606))
3624*   Fixes a heap OOB and null pointer dereference in `RaggedTensorToTensor`
3625    ([CVE-2021-29608](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29608))
3626*   Fixes vulnerabilities caused by incomplete validation in `SparseAdd`
3627    ([CVE-2021-29609](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29609))
3628*   Fixes vulnerabilities caused by incomplete validation in
3629    `SparseSparseMinimum`
3630    ([CVE-2021-29607](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29607))
3631*   Fixes vulnerabilities caused by incomplete validation in `SparseReshape`
3632    ([CVE-2021-29611](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29611))
3633*   Fixes vulnerabilities caused by invalid validation in
3634    `QuantizeAndDequantizeV2`
3635    ([CVE-2021-29610](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29610))
3636*   Fixes a heap buffer overflow in `BandedTriangularSolve`
3637    ([CVE-2021-29612](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29612))
3638*   Fixes vulnerabilities caused by incomplete validation in
3639    `tf.raw_ops.CTCLoss`
3640    ([CVE-2021-29613](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29613))
3641*   Fixes an interpreter crash from vulnerabilities in `tf.io.decode_raw`
3642    ([CVE-2021-29614](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29614))
3643*   Fixes a stack overflow in `ParseAttrValue` with nested tensors
3644    ([CVE-2021-29615](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29615))
3645*   Fixes a null dereference in Grappler's `TrySimplify`
3646    ([CVE-2021-29616](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29616))
3647*   Fixes a crash in `tf.transpose` with complex inputs
3648    ([CVE-2021-29618](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29618))
3649*   Fixes a crash in `tf.strings.substr` due to `CHECK`-fail
3650    ([CVE-2021-29617](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29617))
3651*   Fixes a segfault in `tf.raw_ops.SparseCountSparseOutput`
3652    ([CVE-2021-29619](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29619))
3653*   Fixes a segfault in `tf.raw_ops.ImmutableConst`
3654    ([CVE-2021-29539](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29539))
3655*   Updates `curl` to `7.76.0` to handle
3656    [CVE-2020-8169](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8169),
3657    [CVE-2020-8177](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8177),
3658    [CVE-2020-8231](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8231),
3659    [CVE-2020-8284](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8284),
3660    [CVE-2020-8285](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8285)
3661    and
3662    [CVE-2020-8286](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8286).
3663
3664# Release 2.5.0
3665
3666## Major Features and Improvements
3667
3668*   Support for Python3.9 has been added.
3669*   `tf.data`:
3670    *   `tf.data` service now supports strict round-robin reads, which is useful
3671        for synchronous training workloads where example sizes vary. With strict
3672        round robin reads, users can guarantee that consumers get similar-sized
3673        examples in the same step.
3674    *   tf.data service now supports optional compression. Previously data would
3675        always be compressed, but now you can disable compression by passing
3676        `compression=None` to `tf.data.experimental.service.distribute(...)`.
3677    *   `tf.data.Dataset.batch()` now supports `num_parallel_calls` and
3678        `deterministic` arguments. `num_parallel_calls` is used to indicate that
3679        multiple input batches should be computed in parallel. With
3680        `num_parallel_calls` set, `deterministic` is used to indicate that
3681        outputs can be obtained in the non-deterministic order.
3682    *   Options returned by `tf.data.Dataset.options()` are no longer mutable.
3683    *   tf.data input pipelines can now be executed in debug mode, which
3684        disables any asynchrony, parallelism, or non-determinism and forces
3685        Python execution (as opposed to trace-compiled graph execution) of
3686        user-defined functions passed into transformations such as `map`. The
3687        debug mode can be enabled through
3688        `tf.data.experimental.enable_debug_mode()`.
3689*   `tf.lite`
3690    *   Enabled the new MLIR-based quantization backend by default
3691        *   The new backend is used for 8 bits full integer post-training
3692            quantization
3693        *   The new backend removes the redundant rescales and fixes some bugs
3694            (shared weight/bias, extremely small scales, etc)
3695        *   Set `experimental_new_quantizer` in tf.lite.TFLiteConverter to False
3696            to disable this change
3697*   `tf.keras`
3698    *   `tf.keras.metrics.AUC` now support logit predictions.
3699    *   Enabled a new supported input type in `Model.fit`,
3700        `tf.keras.utils.experimental.DatasetCreator`, which takes a callable,
3701        `dataset_fn`. `DatasetCreator` is intended to work across all
3702        `tf.distribute` strategies, and is the only input type supported for
3703        Parameter Server strategy.
3704*   `tf.distribute`
3705    *   `tf.distribute.experimental.ParameterServerStrategy` now supports
3706        training with Keras `Model.fit` when used with `DatasetCreator`.
3707    *   Creating `tf.random.Generator` under `tf.distribute.Strategy` scopes is
3708        now allowed (except for
3709        `tf.distribute.experimental.CentralStorageStrategy` and
3710        `tf.distribute.experimental.ParameterServerStrategy`). Different
3711        replicas will get different random-number streams.
3712*   TPU embedding support
3713    *   Added `profile_data_directory` to `EmbeddingConfigSpec` in
3714        `_tpu_estimator_embedding.py`. This allows embedding lookup statistics
3715        gathered at runtime to be used in embedding layer partitioning
3716        decisions.
3717*   PluggableDevice
3718    *   Third-party devices can now connect to TensorFlow as plug-ins through
3719        [StreamExecutor C API](https://github.com/tensorflow/community/blob/master/rfcs/20200612-stream-executor-c-api.md).
3720        and
3721        [PluggableDevice](https://github.com/tensorflow/community/blob/master/rfcs/20200624-pluggable-device-for-tensorflow.md)
3722        interface.
3723        *   Add custom ops and kernels through
3724            [kernel and op registration C API](https://github.com/tensorflow/community/blob/master/rfcs/20190814-kernel-and-op-registration.md).
3725        *   Register custom graph optimization passes with
3726            [graph optimization C API](https://github.com/tensorflow/community/blob/master/rfcs/20201027-modular-tensorflow-graph-c-api.md).
3727*   [oneAPI Deep Neural Network Library (oneDNN)](https://github.com/oneapi-src/oneDNN)
3728    CPU performance optimizations from
3729    [Intel-optimized TensorFlow](https://software.intel.com/content/www/us/en/develop/articles/intel-optimization-for-tensorflow-installation-guide.html)
3730    are now available in the official x86-64 Linux and Windows builds.
3731    *   They are off by default. Enable them by setting the environment variable
3732        `TF_ENABLE_ONEDNN_OPTS=1`.
3733    *   We do not recommend using them in GPU systems, as they have not been
3734        sufficiently tested with GPUs yet.
3735*   TensorFlow pip packages are now built with CUDA11.2 and cuDNN 8.1.0
3736
3737## Breaking Changes
3738
3739*   The `TF_CPP_MIN_VLOG_LEVEL` environment variable has been renamed to
3740    `TF_CPP_MAX_VLOG_LEVEL` which correctly describes its effect.
3741
3742## Bug Fixes and Other Changes
3743
3744*   `tf.keras`:
3745
3746    *   Preprocessing layers API consistency changes:
3747        *   `StringLookup` added `output_mode`, `sparse`, and
3748            `pad_to_max_tokens` arguments with same semantics as
3749            `TextVectorization`.
3750        *   `IntegerLookup` added `output_mode`, `sparse`, and
3751            `pad_to_max_tokens` arguments with same semantics as
3752            `TextVectorization`. Renamed `max_values`, `oov_value` and
3753            `mask_value` to `max_tokens`, `oov_token` and `mask_token` to align
3754            with `StringLookup` and `TextVectorization`.
3755        *   `TextVectorization` default for `pad_to_max_tokens` switched to
3756            False.
3757        *   `CategoryEncoding` no longer supports `adapt`, `IntegerLookup` now
3758            supports equivalent functionality. `max_tokens` argument renamed to
3759            `num_tokens`.
3760        *   `Discretization` added `num_bins` argument for learning bins
3761            boundaries through calling `adapt` on a dataset. Renamed `bins`
3762            argument to `bin_boundaries` for specifying bins without `adapt`.
3763    *   Improvements to model saving/loading:
3764        *   `model.load_weights` now accepts paths to saved models.
3765    *   Keras inputs can now be created directly from arbitrary `tf.TypeSpecs`.
3766    *   Two new learning rate schedules added:
3767        `tf.keras.optimizers.schedules.CosineDecay`
3768        and`tf.keras.optimizers.schedules.CosineDecayRestarts`.
3769
3770*   `tf.data`:
3771
3772    *   Exposing `tf.data.experimental.ExternalStatePolicy`, which can be used
3773        to control how external state should be handled during dataset
3774        serialization or iterator checkpointing.
3775    *   Changing `tf.data.experimental.save` to store the type specification of
3776        the dataset elements. This avoids the need for explicitly specifying the
3777        `element_spec` argument of `tf.data.experimental.load` when loading the
3778        previously saved dataset.
3779    *   Add `.element_spec` property to `tf.data.DatasetSpec` to access the
3780        inner spec. This can be used to extract the structure of nested
3781        datasets.
3782    *   Add `tf.data.experimental.AutoShardingPolicy.HINT` which can be used to
3783        provide hints to tf.distribute-based auto-sharding as to where in the
3784        input pipeline to insert sharding transformations.
3785    *   Make tf.data.Options persistent across `tf.function` and `GraphDef`
3786        boundaries.
3787
3788*   XLA compilation:
3789
3790    *   `tf.function(experimental_compile=True)` has become a stable API,
3791        renamed `tf.function(jit_compile=True)`.
3792    *   XLA can now compile MirroredStrategy: the step function passed
3793        to`strategy.run` can now be annoted with `jit_compile=True`.
3794
3795*   `tf.distribute`:
3796
3797    *   Rename `experimental_prefetch_to_device` in `tf.distribute.InputOptions`
3798        to `experimental_fetch_to_device` to better reflect the purpose.
3799
3800*   `tf.lite`:
3801
3802    *   class `tflite::Subgraph`:
3803        *   Removed the `tensors()` method and the non-const overload of the
3804            `nodes_and_registration()` method, both of which were previously
3805            documented as temporary and to be removed.
3806            *   Uses of `tensors()` can be replaced by calling the existing
3807                methods `tensors_size()` and `tensor(int)`.
3808            *   Uses of the non-const overload of `nodes_and_registration` can
3809                be replaced by calling the existing methods `nodes_size()` and
3810                `context()`, and then calling the `GetNodeAndRegistration`
3811                method in the `TfLiteContext` returned by `context()`.
3812    *   NNAPI
3813        *   Removed deprecated `Interpreter::UseNNAPI(bool)` C++ API.
3814            *   Use `NnApiDelegate()` and related delegate configuration methods
3815                directly.
3816        *   Replaced the model cache key for models computation algorithm with
3817            one guaranteed to be stable across runs.
3818    *   16 bits quantization
3819        *   Added int16x8 support for ABS, REDUCE_MAX and REDUCE_MIN operators.
3820        *   Additional tests and fixes for ADD and SUB operators.
3821    *   Added support for saved model's session initializer through
3822        `TFLiteConverter.from_saved_model`.
3823    *   Added DEPTH_TO_SPACE support in Post training quantization.
3824    *   Added dynamic range quantization support for the BatchMatMul op.
3825        *   Both symmetric and asymmetric quantized input tensor are supported.
3826    *   Add `RFFT2D` as builtin op. (`RFFT2D` also supports `RFFTD`.) Currently
3827        only supports float32 input.
3828    *   Add 5D support to `SLICE` op.
3829    *   TFLite Supports SingatureDef:
3830        *   TFLiteConverter exports models with SignatureDef
3831        *   Interpreter supports getting a list of signatures and getting
3832            callable function for a given signaturedef.
3833    *   Add int8 support for `ReshapeV2`.
3834    *   Add experimental support for optimization with sparsity.
3835    *   Add nominal support for unsigned 32-bit integer tensor types. Note that
3836        very few TFLite kernels support this type natively, so its use in mobile
3837        ML authoring is generally discouraged.
3838    *   Add support for static hash tables through
3839        `TFLiteConverter.from_saved_model`.
3840    *   The Python TF Lite Interpreter bindings now has an option
3841        `experimental_preserve_all_tensors` to aid in debugging conversion.
3842    *   Quantized x86 execution defaults to Ruy GEMM library for platforms with
3843        AVX support.
3844    *   Deprecate
3845        `tf.compat.v1.lite.experimental.get_potentially_supported_ops`. Use
3846        `tf.lite.TFLiteConverter` directly to check whether a model is
3847        convertible.
3848    *   Add support to select one of three different built-in op resolvers
3849    *   Enabled post training with calibrations for models that require user
3850        provided TensorFlow Lite custom op libraries via
3851        `converter.target_spec._experimental_custom_op_registerers`. used in
3852        Python Interpreter API.
3853
3854*   TF Core:
3855
3856    *   Corrected higher-order gradients of control flow constructs (`tf.cond`,
3857        `tf.while_loop`, and compositions like `tf.foldl`) computed with
3858        `tf.GradientTape` inside a `tf.function`.
3859    *   Changed the default step size in `gradient_checker_v2.compute_gradients`
3860        to be exactly representable as a binary floating point numbers. This
3861        avoids poluting gradient approximations needlessly, which is some cases
3862        leads to false negatives in op gradient tests.
3863    *   Added `tf.config.experimental.get_memory_info`, returning a dict with
3864        the current and peak memory usage. Deprecated
3865        `tf.config.experimental.get_memory_usage` in favor of this new function.
3866    *   Extended `tf.config.experimental.enable_tensor_float_32_execution` to
3867        control Tensor-Float-32 evaluation in RNNs.
3868    *   Added a 'experimental_payloads' field to tf.errors.OpError and its
3869        subclasses to support more detailed error reporting. This is inspired
3870        from Abseil Status payloads:
3871        https://github.com/abseil/abseil-cpp/blob/master/absl/status/status.h
3872
3873*   `tf.summary`:
3874
3875    *   New `tf.summary.graph` allows manual write of TensorFlow graph
3876        (`tf.Graph` or `tf.compat.v1.GraphDef`) as a summary. This is not a
3877        replacement for the trace-based API.
3878
3879*   Set `/d2ReducedOptimizeHugeFunctions` by default for Windows builds. This
3880    provides a big compile-time speedup, and effectively raises the minimum
3881    supported MSVC version to 16.4 (current: 16.8).
3882
3883    *   See:
3884        https://groups.google.com/a/tensorflow.org/d/topic/build/SsW98Eo7l3o/discussion
3885
3886*   TensorRT
3887
3888    *   Removed the deprecated `session_config` parameter for the TF1-TRT
3889        converter `TrtGraphConverter`. Previously, we issued a warning when the
3890        value of the parameter is not None.
3891    *   The TF2-TRT converter `TrtGraphConverterV2` takes an object of class
3892        TrtConversionParams as a parameter. Removed three deprecated fields from
3893        this class: `rewriter_config_template`, `is_dynamic_op`, and
3894        `max_batch_size`. Previously, we issued a warning when the value of
3895        `rewriter_config_template` is not None. We issued an error when the
3896        value of `is_dynamic_op` is not True. We didn't use the value for
3897        `max_batch_size` for building TensorRT engines. Add parameters
3898        `use_dynamic_shape` to enable dynamic shape support. The default is to
3899        disable dynamic shape support. Add `dynamic_shape_profile_strategy` for
3900        selecting a dynamic shape profile strategy. The default is profile
3901        strategy is `Range`.
3902    *   Issue a warning when function get_tensorrt_rewriter_config is used.
3903
3904*   TF XLA
3905
3906    *   Add new enum value `MLIR_BRIDGE_ROLLOUT_SAFE_MODE_ENABLED` to
3907        `tf.config.experimental.mlir_bridge_rollout` to enable a \"safe\" mode.
3908        This runs the MLIR bridge only when an analysis of the graph only when
3909        an analysis of the graph determines that it is safe to run.
3910    *   Add new enum value `MLIR_BRIDGE_ROLLOUT_SAFE_MODE_FALLBACK_ENABLED'
3911        to`tf.config.experimental.mlir_bridge_rollout` to enable a fallback for
3912        the MLIR bridge in a \"safe\" mode. This runs the MLIR bridge in a
3913        FallbackEnabled mode when an analysis of the graph determines that the
3914        graph does not have unsupported features.
3915
3916*   Deterministic Op Functionality:
3917
3918    *   Add determinism-unimplemented exception-throwing to the segment-sum ops.
3919        When the environment variable `TF_DETERMINISTIC_OPS` is set to `"true"`
3920        or `"1"` (when op-determinism is expected), an attempt to run the
3921        following ops on a GPU will throw `tf.errors.UnimplementedError` (with
3922        an understandable message) when `data` is a floating-point type,
3923        including complex types (if supported): `tf.math.segment_prod`,
3924        `tf.math.segment_sum`, `tf.math.unsorted_segment_mean`,
3925        `tf.math.unsorted_segment_sqrt_n`, `tf.math.unsorted_segment_prod`,
3926        `tf.math.unsorted_segment_sum`, and therefore also
3927        `tf.convert_to_tensor` when `value` is of type `tf.IndexedSlices` (such
3928        as in the back prop though `tf.gather` into a dense embedding). See
3929        issue [39751](https://github.com/tensorflow/tensorflow/issues/39751)
3930        which this change addresses, but does not solve. This exception-throwing
3931        behavior can be disabled by setting the environment variable
3932        `TF_DISABLE_SEGMENT_REDUCTION_OP_DETERMINISM_EXCEPTIONS` to `"true"` or
3933        `"1"`. For more information about these changes, see the description in
3934        pull request
3935        [47772](https://github.com/tensorflow/tensorflow/pull/47772).
3936    *   In previous versions of TensorFlow, when a GPU was available,
3937        `tf.sparse.sparse_dense_matmul` introduced truly random noise in the
3938        forward path for data of type `tf.float32` but not for data of type
3939        `tf.float64` (for which there was no GPU implementation). In this
3940        current release, GPU support for other floating-point types
3941        (`tf.float16`, `tf.float64`, `tf.complex64`, and `tf.complex128`) has
3942        been added for this op. If you were relying on the determinism of the
3943        `tf.float64` CPU implementation being automatically selected because of
3944        the absence of the `tf.float64` GPU implementation, you with either need
3945        to force the op to run on the CPU or use a different data type.
3946
3947*   Security
3948
3949    *   Fixes a heap buffer overflow in `RaggedBinCount`
3950        ([CVE-2021-29512](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29512))
3951    *   Fixes a heap out of bounds write in `RaggedBinCount`
3952        ([CVE-2021-29514](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29514))
3953    *   Fixes a type confusion during tensor casts which leads to dereferencing
3954        null pointers
3955        ([CVE-2021-29513](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29513))
3956    *   Fixes a reference binding to null pointer in `MatrixDiag*` ops
3957        ([CVE-2021-29515](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29515))
3958    *   Fixes a null pointer dereference via invalid Ragged Tensors
3959        ([CVE-2021-29516](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29516))
3960    *   Fixes a division by zero in `Conv3D`
3961        ([CVE-2021-29517](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29517))
3962    *   Fixes vulnerabilities where session operations in eager mode lead to
3963        null pointer dereferences
3964        ([CVE-2021-29518](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29518))
3965    *   Fixes a `CHECK`-fail in `SparseCross` caused by type confusion
3966        ([CVE-2021-29519](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29519))
3967    *   Fixes a segfault in `SparseCountSparseOutput`
3968        ([CVE-2021-29521](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29521))
3969    *   Fixes a heap buffer overflow in `Conv3DBackprop*`
3970        ([CVE-2021-29520](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29520))
3971    *   Fixes a division by 0 in `Conv3DBackprop*`
3972        ([CVE-2021-29522](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29522))
3973    *   Fixes a `CHECK`-fail in `AddManySparseToTensorsMap`
3974        ([CVE-2021-29523](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29523))
3975    *   Fixes a division by 0 in `Conv2DBackpropFilter`
3976        ([CVE-2021-29524](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29524))
3977    *   Fixes a division by 0 in `Conv2DBackpropInput`
3978        ([CVE-2021-29525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29525))
3979    *   Fixes a division by 0 in `Conv2D`
3980        ([CVE-2021-29526](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29526))
3981    *   Fixes a division by 0 in `QuantizedConv2D`
3982        ([CVE-2021-29527](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29527))
3983    *   Fixes a division by 0 in `QuantizedMul`
3984        ([CVE-2021-29528](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29528))
3985    *   Fixes vulnerabilities caused by invalid validation in
3986        `SparseMatrixSparseCholesky`
3987        ([CVE-2021-29530](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29530))
3988    *   Fixes a heap buffer overflow caused by rounding
3989        ([CVE-2021-29529](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29529))
3990    *   Fixes a `CHECK`-fail in `tf.raw_ops.EncodePng`
3991        ([CVE-2021-29531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29531))
3992    *   Fixes a heap out of bounds read in `RaggedCross`
3993        ([CVE-2021-29532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29532))
3994    *   Fixes a `CHECK`-fail in `DrawBoundingBoxes`
3995        ([CVE-2021-29533](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29533))
3996    *   Fixes a heap buffer overflow in `QuantizedMul`
3997        ([CVE-2021-29535](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29535))
3998    *   Fixes a `CHECK`-fail in `SparseConcat`
3999        ([CVE-2021-29534](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29534))
4000    *   Fixes a heap buffer overflow in `QuantizedResizeBilinear`
4001        ([CVE-2021-29537](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29537))
4002    *   Fixes a heap buffer overflow in `QuantizedReshape`
4003        ([CVE-2021-29536](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29536))
4004    *   Fixes a division by zero in `Conv2DBackpropFilter`
4005        ([CVE-2021-29538](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29538))
4006    *   Fixes a heap buffer overflow in `Conv2DBackpropFilter`
4007        ([CVE-2021-29540](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29540))
4008    *   Fixes a heap buffer overflow in `StringNGrams`
4009        ([CVE-2021-29542](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29542))
4010    *   Fixes a null pointer dereference in `StringNGrams`
4011        ([CVE-2021-29541](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29541))
4012    *   Fixes a `CHECK`-fail in `QuantizeAndDequantizeV4Grad`
4013        ([CVE-2021-29544](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29544))
4014    *   Fixes a `CHECK`-fail in `CTCGreedyDecoder`
4015        ([CVE-2021-29543](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29543))
4016    *   Fixes a heap buffer overflow in `SparseTensorToCSRSparseMatrix`
4017        ([CVE-2021-29545](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29545))
4018    *   Fixes a division by 0 in `QuantizedBiasAdd`
4019        ([CVE-2021-29546](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29546))
4020    *   Fixes a heap out of bounds in
4021        `QuantizedBatchNormWithGlobalNormalization`
4022        ([CVE-2021-29547](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29547))
4023    *   Fixes a division by 0 in `QuantizedBatchNormWithGlobalNormalization`
4024        ([CVE-2021-29548](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29548))
4025    *   Fixes a division by 0 in `QuantizedAdd`
4026        ([CVE-2021-29549](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29549))
4027    *   Fixes a division by 0 in `FractionalAvgPool`
4028        ([CVE-2021-29550](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29550))
4029    *   Fixes an OOB read in `MatrixTriangularSolve`
4030        ([CVE-2021-29551](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29551))
4031    *   Fixes a heap OOB in `QuantizeAndDequantizeV3`
4032        ([CVE-2021-29553](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29553))
4033    *   Fixes a `CHECK`-failure in `UnsortedSegmentJoin`
4034        ([CVE-2021-29552](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29552))
4035    *   Fixes a division by 0 in `DenseCountSparseOutput`
4036        ([CVE-2021-29554](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29554))
4037    *   Fixes a division by 0 in `FusedBatchNorm`
4038        ([CVE-2021-29555](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29555))
4039    *   Fixes a division by 0 in `SparseMatMul`
4040        ([CVE-2021-29557](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29557))
4041    *   Fixes a division by 0 in `Reverse`
4042        ([CVE-2021-29556](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29556))
4043    *   Fixes a heap buffer overflow in `SparseSplit`
4044        ([CVE-2021-29558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29558))
4045    *   Fixes a heap OOB access in unicode ops
4046        ([CVE-2021-29559](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29559))
4047    *   Fixes a heap buffer overflow in `RaggedTensorToTensor`
4048        ([CVE-2021-29560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29560))
4049    *   Fixes a `CHECK`-fail in `LoadAndRemapMatrix`
4050        ([CVE-2021-29561](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29561))
4051    *   Fixes a `CHECK`-fail in `tf.raw_ops.IRFFT`
4052        ([CVE-2021-29562](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29562))
4053    *   Fixes a `CHECK`-fail in `tf.raw_ops.RFFT`
4054        ([CVE-2021-29563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29563))
4055    *   Fixes a null pointer dereference in `EditDistance`
4056        ([CVE-2021-29564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29564))
4057    *   Fixes a null pointer dereference in `SparseFillEmptyRows`
4058        ([CVE-2021-29565](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29565))
4059    *   Fixes a heap OOB access in `Dilation2DBackpropInput`
4060        ([CVE-2021-29566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29566))
4061    *   Fixes a reference binding to null in `ParameterizedTruncatedNormal`
4062        ([CVE-2021-29568](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29568))
4063    *   Fixes a set of vulnerabilities caused by lack of validation in
4064        `SparseDenseCwiseMul`
4065        ([CVE-2021-29567](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29567))
4066    *   Fixes a heap out of bounds read in `MaxPoolGradWithArgmax`
4067        ([CVE-2021-29570](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29570))
4068    *   Fixes a heap out of bounds read in `RequantizationRange`
4069        ([CVE-2021-29569](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29569))
4070    *   Fixes a memory corruption in `DrawBoundingBoxesV2`
4071        ([CVE-2021-29571](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29571))
4072    *   Fixes a reference binding to nullptr in `SdcaOptimizer`
4073        ([CVE-2021-29572](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29572))
4074    *   Fixes an overflow and a denial of service in
4075        `tf.raw_ops.ReverseSequence`
4076        ([CVE-2021-29575](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29575))
4077    *   Fixes a division by 0 in `MaxPoolGradWithArgmax`
4078        ([CVE-2021-29573](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29573))
4079    *   Fixes an undefined behavior in `MaxPool3DGradGrad`
4080        ([CVE-2021-29574](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29574))
4081    *   Fixes a heap buffer overflow in `MaxPool3DGradGrad`
4082        ([CVE-2021-29576](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29576))
4083    *   Fixes a heap buffer overflow in `AvgPool3DGrad`
4084        ([CVE-2021-29577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29577))
4085    *   Fixes an undefined behavior and a `CHECK`-fail in
4086        `FractionalMaxPoolGrad`
4087        ([CVE-2021-29580](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29580))
4088    *   Fixes a heap buffer overflow in `FractionalAvgPoolGrad`
4089        ([CVE-2021-29578](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29578))
4090    *   Fixes a heap buffer overflow in `MaxPoolGrad`
4091        ([CVE-2021-29579](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29579))
4092    *   Fixes a segfault in `CTCBeamSearchDecoder`
4093        ([CVE-2021-29581](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29581))
4094    *   Fixes a heap OOB read in `tf.raw_ops.Dequantize`
4095        ([CVE-2021-29582](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29582))
4096    *   Fixes a `CHECK`-fail due to integer overflow
4097        ([CVE-2021-29584](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29584))
4098    *   Fixes a heap buffer overflow and undefined behavior in `FusedBatchNorm`
4099        ([CVE-2021-29583](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29583))
4100    *   Fixes a division by zero in padding computation in TFLite
4101        ([CVE-2021-29585](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29585))
4102    *   Fixes a division by zero in optimized pooling implementations in TFLite
4103        ([CVE-2021-29586](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29586))
4104    *   Fixes a division by zero in TFLite's implementation of `SpaceToDepth`
4105        ([CVE-2021-29587](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29587))
4106    *   Fixes a division by zero in TFLite's implementation of `GatherNd`
4107        ([CVE-2021-29589](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29589))
4108    *   Fixes a division by zero in TFLite's implementation of `TransposeConv`
4109        ([CVE-2021-29588](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29588))
4110    *   Fixes a heap OOB read in TFLite's implementation of `Minimum` or
4111        `Maximum`
4112        ([CVE-2021-29590](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29590))
4113    *   Fixes a null pointer dereference in TFLite's `Reshape` operator
4114        ([CVE-2021-29592](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29592))
4115    *   Fixes a stack overflow due to looping TFLite subgraph
4116        ([CVE-2021-29591](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29591))
4117    *   Fixes a division by zero in TFLite's implementation of `DepthToSpace`
4118        ([CVE-2021-29595](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29595))
4119    *   Fixes a division by zero in TFLite's convolution code
4120        ([CVE-2021-29594](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29594))
4121    *   Fixes a division by zero in TFLite's implementation of `EmbeddingLookup`
4122        ([CVE-2021-29596](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29596))
4123    *   Fixes a division by zero in TFLite's implementation of `BatchToSpaceNd`
4124        ([CVE-2021-29593](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29593))
4125    *   Fixes a division by zero in TFLite's implementation of `SpaceToBatchNd`
4126        ([CVE-2021-29597](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29597))
4127    *   Fixes a division by zero in TFLite's implementation of `SVDF`
4128        ([CVE-2021-29598](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29598))
4129    *   Fixes a division by zero in TFLite's implementation of `Split`
4130        ([CVE-2021-29599](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29599))
4131    *   Fixes a division by zero in TFLite's implementation of `OneHot`
4132        ([CVE-2021-29600](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29600))
4133    *   Fixes a division by zero in TFLite's implementation of `DepthwiseConv`
4134        ([CVE-2021-29602](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29602))
4135    *   Fixes a division by zero in TFLite's implementation of hashtable lookup
4136        ([CVE-2021-29604](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29604))
4137    *   Fixes a integer overflow in TFLite concatentation
4138        ([CVE-2021-29601](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29601))
4139    *   Fixes a integer overflow in TFLite memory allocation
4140        ([CVE-2021-29605](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29605))
4141    *   Fixes a heap OOB write in TFLite
4142        ([CVE-2021-29603](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29603))
4143    *   Fixes a heap OOB read in TFLite
4144        ([CVE-2021-29606](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29606))
4145    *   Fixes a heap OOB and null pointer dereference in `RaggedTensorToTensor`
4146        ([CVE-2021-29608](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29608))
4147    *   Fixes vulnerabilities caused by incomplete validation in `SparseAdd`
4148        ([CVE-2021-29609](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29609))
4149    *   Fixes vulnerabilities caused by incomplete validation in
4150        `SparseSparseMinimum`
4151        ([CVE-2021-29607](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29607))
4152    *   Fixes vulnerabilities caused by incomplete validation in `SparseReshape`
4153        ([CVE-2021-29611](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29611))
4154    *   Fixes vulnerabilities caused by invalid validation in
4155        `QuantizeAndDequantizeV2`
4156        ([CVE-2021-29610](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29610))
4157    *   Fixes a heap buffer overflow in `BandedTriangularSolve`
4158        ([CVE-2021-29612](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29612))
4159    *   Fixes vulnerabilities caused by incomplete validation in
4160        `tf.raw_ops.CTCLoss`
4161        ([CVE-2021-29613](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29613))
4162    *   Fixes an interpreter crash from vulnerabilities in `tf.io.decode_raw`
4163        ([CVE-2021-29614](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29614))
4164    *   Fixes a stack overflow in `ParseAttrValue` with nested tensors
4165        ([CVE-2021-29615](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29615))
4166    *   Fixes a null dereference in Grappler's `TrySimplify`
4167        ([CVE-2021-29616](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29616))
4168    *   Fixes a crash in `tf.transpose` with complex inputs
4169        ([CVE-2021-29618](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29618))
4170    *   Fixes a crash in `tf.strings.substr` due to `CHECK`-fail
4171        ([CVE-2021-29617](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29617))
4172    *   Fixes a segfault in `tf.raw_ops.SparseCountSparseOutput`
4173        ([CVE-2021-29619](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29619))
4174    *   Fixes a segfault in `tf.raw_ops.ImmutableConst`
4175        ([CVE-2021-29539](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29539))
4176    *   Updates `curl` to `7.76.0` to handle
4177        [CVE-2020-8169](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8169),
4178        [CVE-2020-8177](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8177),
4179        [CVE-2020-8231](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8231),
4180        [CVE-2020-8284](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8284),
4181        [CVE-2020-8285](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8285)
4182        and
4183        [CVE-2020-8286](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8286).
4184
4185*   Other
4186
4187    *   Added `show_debug_info` to `mlir.convert_graph_def` and
4188        `mlir.convert_function`.
4189    *   Added
4190        [Arm Compute Library (ACL)](https://github.com/ARM-software/ComputeLibrary)
4191        support to `--config=mkl_aarch64` build.
4192
4193## Thanks to our Contributors
4194
4195This release contains contributions from many people at Google, as well as:
4196
41978bitmp3, Aaron S. Mondal, Abhilash Mahendrakar, Abhinav Upadhyay, Abhishek
4198Kulkarni, Abolfazl Shahbazi, Adam Hillier, Aditya Kane, Ag Ramesh, ahmedsabie,
4199Albert Villanova Del Moral, Aleksey Vitebskiy, Alex Hoffman, Alexander Bayandin,
4200Alfie Edwards, Aman Kishore, Amogh Joshi, andreABbauer, Andrew Goodbody, Andrzej
4201Pomirski, Artemiy Ryabinkov, Ashish Jha, ather, Ayan Moitra, Bairen Yi, Bart
4202Ribbers, Bas Aarts, Behzad Abghari, Ben Arnao, Ben Barsdell, Benjamin Klimczak,
4203bhack, Brendan Collins, Can Wang, Cheng Ren, Chris Leary, Chris Olivier, Clemens
4204Giuliani, Cloud Han, Corey Cole, Cui, Yifeng, Cuong V. Nguyen, Daniel Moore,
4205Dawid Wojciechowski, Ddavis-2015, Dean Wyatte, Denisa Roberts, dependabot[bot],
4206Dmitry Volodin, Dominic Jack, Duncan Riach, dushuai, Elena Zhelezina, Eli
4207Osherovich, Erik Smistad, ewsn1593, Felix Fent, fo40225, François Chollet,
4208Frederic Bastien, Freedom" Koan-Sin Tan, fsx950223, ganand1, gbaned, Georgiy
4209Manuilov, gerbauz, Guillaume Klein, Guozhong Zhuang, Harry Slatyer, Harsh188,
4210henri, Henri Woodcock, Hiran Sarkar, Hollow Man, Håkon Sandsmark, I Wayan
4211Dharmana, icysapphire, Ikko Ashimine, Jab Hofmeier, Jack Hessel, Jacob Valdez,
4212Jakub Jatczak, James Bernardi, Jared Smolens, Jason Zaman, jedlimlx, Jenny
4213Plunkett, Jens Elofsson, Jerry Shih, jgehw, Jia Fu Low, Jim Fisher, jpodivin,
4214Julien Stephan, Jungsub Lim, Junha Park, Junhyuk So, justkw, Kaixi Hou,
4215kashyapraval, Kasra Bigdeli, Kazuaki Ishizaki, Keith Mok, Kevin Cheng, kopytjuk,
4216Kristian Hartikainen, ksood12345, Kulin Seth, kushanam, latyas, Lequn Chen,
4217Leslie-Fang, Long M. Lưu, Lukas Geiger, machineko, Mahmoud Abuzaina, Manish, Mao
4218Yunfei, Maozhou, Ge, Marcin Juszkiewicz, Marcin Owsiany, Marconi Jiang, Marcos
4219Pereira, Maria Romanenko Vexlard, Maria Vexlard, Marius Brehler, marload, Martin
4220Kubovčík, Matej, Mateusz Holenko, Maxiwell S. Garcia, Mazhar, mazharul,
4221mbhuiyan, mdfaijul, Michael Gielda, Michael Kuchnik, Michal Szutenberg, Mikhail
4222Stepanov, Milan Straka, Mitchel Humpherys, Mohamed Moselhy, Mohamed Nour
4223Abouelseoud, Måns Bermell, Måns Nilsson, Nathan Luehr, Nico Jahn, Niroop
4224Ammbashankar, Oceania2018, Omri Steiner, Orivej Desh, Oskar Flordal, oujiafan,
4225Patrik Laurell, Paul B. Isaac'S, Paul Klinger, Pawel Piskorski, Pedro Marques,
4226Phat Tran, Piotr Zierhoffer, piyushdatta, Pnikam-Cad, Prashant Kumar, Prateek
4227Gupta, PratsBhatt, Pravin Karandikar, qqq.jq, QQ喵, Quintin, Rama Ketineni,
4228ravikyram, Rehan Guha, rhdong, rmothukuru, Roger Cheng, Rohit Santhanam, rposts,
4229Rsanthanam-Amd, rsun, Rsun-Bdti, Ryan Kuester, ryanking13, Saduf2019, Sami Kama,
4230Samuel Marks, Scott Tseng, Sean Moriarity, Sergey Popov, Sergii Khomenko, Sheng,
4231Yang, shwetaoj, Sidong-Wei, Simon Maurer, Simrit Kaur, Srini511, Srinivasan
4232Narayanamoorthy, Stephan, Stephen Matthews, Sungmann Cho, Sunoru, Suraj Sudhir,
4233Suraj Upadhyay, Taebum Kim, Takayoshi Koizumi, Tamas Bela Feher, Teng Lu,
4234Thibaut Goetghebuer-Planchon, Tomwildenhain-Microsoft, Tony, Traun Leyden, Trent
4235Lo, TVLIgnacy, Tzu-Wei Sung, vaibhav, Vignesh Kothapalli, Vikram Dattu,
4236viktprog, Vinayaka Bandishti, Vincent Abriou, Vishakha Agrawal, Vivek Panyam,
4237Vladimir Silyaev, Võ Văn Nghĩa, wamuir, Wang, Yanzhang, wangsiyu, Waqar Hameed,
4238wxinix, Xiao Yang, xiaohong1031, Xiaoming (Jason) Cui, Xinan Jiang, Yair
4239Ehrenwald, Yajush Vyas, Yasir Modak, Yimei Sun, Yong Tang, Yosshi999,
4240youshenmebutuo, yqtianust, Yuan Tang, yuanbopeng, Yuriy Chernyshov, Yuta
4241Fukasawa, Zachary Deane-Mayer, Zeno Gantner, Zhoulong Jiang, zhuyie, zilinzhu,
4242彭震东
4243
4244# Release 2.4.1
4245
4246*   This release removes the AVX2 requirement from TF 2.4.0.
4247
4248# Release 2.3.2
4249
4250## Bug Fixes and Other Changes
4251
4252*   Fixes an access to unitialized memory in Eigen code
4253    ([CVE-2020-26266](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26266))
4254*   Fixes a security vulnerability caused by lack of validation in
4255    `tf.raw_ops.DataFormatVecPermute` and `tf.raw_ops.DataFormatDimMap`
4256    ([CVE-2020-26267](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26267))
4257*   Fixes a vulnerability caused by attempting to write to immutable memory
4258    region in `tf.raw_ops.ImmutableConst`
4259    ([CVE-2020-26268](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26268)
4260*   Fixes a `CHECK`-fail in LSTM with zero-length input
4261    ([CVE-2020-26270](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26270))
4262*   Fixes a security vulnerability caused by accessing heap data outside of
4263    bounds when loading a specially crafted `SavedModel`
4264    ([CVE-2020-26271](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26271))
4265*   Solves an OOM issue on TPUs when XLA contexts use fused average updates
4266*   Updates `libjpeg-turbo` to `2.0.5` to handle
4267    [CVE-2020-13790](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13790).
4268*   Updates `junit` to `4.13.1` to handle
4269    [CVE-2020-15250](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15250).
4270*   Updates `PCRE` to `8.44` to handle
4271    [CVE-2019-20838](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-20838)
4272    and
4273    [CVE-2020-14155](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14155).
4274*   Updates `sqlite3` to `3.44.0` to keep in sync with master branch.
4275
4276# Release 2.2.2
4277
4278## Bug Fixes and Other Changes
4279
4280*   Fixes an access to unitialized memory in Eigen code
4281    ([CVE-2020-26266](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26266))
4282*   Fixes a security vulnerability caused by lack of validation in
4283    `tf.raw_ops.DataFormatVecPermute` and `tf.raw_ops.DataFormatDimMap`
4284    ([CVE-2020-26267](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26267))
4285*   Fixes a vulnerability caused by attempting to write to immutable memory
4286    region in `tf.raw_ops.ImmutableConst`
4287    ([CVE-2020-26268](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26268)
4288*   Fixes a `CHECK`-fail in LSTM with zero-length input
4289    ([CVE-2020-26270](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26270))
4290*   Fixes a security vulnerability caused by accessing heap data outside of
4291    bounds when loading a specially crafted `SavedModel`
4292    ([CVE-2020-26271](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26271))
4293*   Prevents memory leaks in loading `SavedModel`s that import functions
4294*   Updates `libjpeg-turbo` to `2.0.5` to handle
4295    [CVE-2020-13790](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13790).
4296*   Updates `junit` to `4.13.1` to handle
4297    [CVE-2020-15250](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15250).
4298*   Updates `PCRE` to `8.44` to handle
4299    [CVE-2019-20838](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-20838)
4300    and
4301    [CVE-2020-14155](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14155).
4302*   Updates `sqlite3` to `3.44.0` to keep in sync with master branch.
4303
4304# Release 2.1.3
4305
4306## Bug Fixes and Other Changes
4307
4308*   Fixes an access to unitialized memory in Eigen code
4309    ([CVE-2020-26266](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26266))
4310*   Fixes a security vulnerability caused by lack of validation in
4311    `tf.raw_ops.DataFormatVecPermute` and `tf.raw_ops.DataFormatDimMap`
4312    ([CVE-2020-26267](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26267))
4313*   Fixes a vulnerability caused by attempting to write to immutable memory
4314    region in `tf.raw_ops.ImmutableConst`
4315    ([CVE-2020-26268](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26268)
4316*   Fixes a `CHECK`-fail in LSTM with zero-length input
4317    ([CVE-2020-26270](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26270))
4318*   Fixes a security vulnerability caused by accessing heap data outside of
4319    bounds when loading a specially crafted `SavedModel`
4320    ([CVE-2020-26271](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26271))
4321*   Updates `libjpeg-turbo` to `2.0.5` to handle
4322    [CVE-2020-13790](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13790).
4323*   Updates `junit` to `4.13.1` to handle
4324    [CVE-2020-15250](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15250).
4325*   Updates `PCRE` to `8.44` to handle
4326    [CVE-2019-20838](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-20838)
4327    and
4328    [CVE-2020-14155](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14155).
4329*   Updates `sqlite3` to `3.44.0` to keep in sync with master branch.
4330*   Newer ROCm versions are supported on the 2.1 branch.
4331
4332# Release 2.0.4
4333
4334Note that this is the last patch release for the TensorFlow 2.0.x series.
4335
4336## Bug Fixes and Other Changes
4337
4338*   Fixes an access to unitialized memory in Eigen code
4339    ([CVE-2020-26266](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26266))
4340*   Fixes a security vulnerability caused by lack of validation in
4341    `tf.raw_ops.DataFormatVecPermute` and `tf.raw_ops.DataFormatDimMap`
4342    ([CVE-2020-26267](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26267))
4343*   Fixes a vulnerability caused by attempting to write to immutable memory
4344    region in `tf.raw_ops.ImmutableConst`
4345    ([CVE-2020-26268](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26268)
4346*   Fixes a `CHECK`-fail in LSTM with zero-length input
4347    ([CVE-2020-26270](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26270))
4348*   Fixes a security vulnerability caused by accessing heap data outside of
4349    bounds when loading a specially crafted `SavedModel`
4350    ([CVE-2020-26271](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26271))
4351*   Updates `libjpeg-turbo` to `2.0.5` to handle
4352    [CVE-2020-13790](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13790).
4353*   Updates `junit` to `4.13.1` to handle
4354    [CVE-2020-15250](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15250).
4355*   Updates `PCRE` to `8.44` to handle
4356    [CVE-2019-20838](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-20838)
4357    and
4358    [CVE-2020-14155](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14155).
4359*   Updates `sqlite3` to `3.44.0` to keep in sync with master branch.
4360
4361# Release 1.15.5
4362
4363Note that this is the last patch release for the TensorFlow 1.x series.
4364
4365## Bug Fixes and Other Changes
4366
4367*   Fixes an access to unitialized memory in Eigen code
4368    ([CVE-2020-26266](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26266))
4369*   Fixes a security vulnerability caused by lack of validation in
4370    `tf.raw_ops.DataFormatVecPermute` and `tf.raw_ops.DataFormatDimMap`
4371    ([CVE-2020-26267](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26267))
4372*   Fixes a vulnerability caused by attempting to write to immutable memory
4373    region in `tf.raw_ops.ImmutableConst`
4374    ([CVE-2020-26268](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26268)
4375*   Fixes a `CHECK`-fail in LSTM with zero-length input
4376    ([CVE-2020-26270](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26270))
4377*   Fixes a security vulnerability caused by accessing heap data outside of
4378    bounds when loading a specially crafted `SavedModel`
4379    ([CVE-2020-26271](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26271))
4380*   Updates `libjpeg-turbo` to `2.0.5` to handle
4381    [CVE-2020-13790](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13790).
4382*   Updates `junit` to `4.13.1` to handle
4383    [CVE-2020-15250](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15250).
4384*   Updates `PCRE` to `8.44` to handle
4385    [CVE-2019-20838](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-20838)
4386    and
4387    [CVE-2020-14155](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14155).
4388*   Updates `sqlite3` to `3.44.0` to keep in sync with master branch.
4389
4390# Release 2.4.0
4391
4392\## Major Features and Improvements
4393
4394*   `tf.distribute` introduces experimental support for asynchronous training of
4395    models via the
4396    [`tf.distribute.experimental.ParameterServerStrategy`](https://www.tensorflow.org/api_docs/python/tf/distribute/experimental/ParameterServerStrategy)
4397    API. Please see the
4398    [tutorial](https://www.tensorflow.org/tutorials/distribute/parameter_server_training)
4399    to learn more.
4400
4401*   [`MultiWorkerMirroredStrategy`](https://www.tensorflow.org/api_docs/python/tf/distribute/MultiWorkerMirroredStrategy)
4402    is now a stable API and is no longer considered experimental. Some of the
4403    major improvements involve handling peer failure and many bug fixes. Please
4404    check out the detailed tutorial on
4405    [Multi-worker training with Keras](https://www.tensorflow.org/tutorials/distribute/multi_worker_with_keras).
4406
4407*   Introduces experimental support for a new module named
4408    [`tf.experimental.numpy`](https://www.tensorflow.org/api_docs/python/tf/experimental/numpy)
4409    which is a NumPy-compatible API for writing TF programs. See the
4410    [detailed guide](https://www.tensorflow.org/guide/tf_numpy) to learn more.
4411    Additional details below.
4412
4413*   Adds Support for
4414    [TensorFloat-32](https://blogs.nvidia.com/blog/2020/05/14/tensorfloat-32-precision-format/)
4415    on Ampere based GPUs. TensorFloat-32, or TF32 for short, is a math mode for
4416    NVIDIA Ampere based GPUs and is enabled by default.
4417
4418*   A major refactoring of the internals of the Keras Functional API has been
4419    completed, that should improve the reliability, stability, and performance
4420    of constructing Functional models.
4421
4422*   Keras mixed precision API
4423    [`tf.keras.mixed_precision`](https://www.tensorflow.org/api_docs/python/tf/keras/mixed_precision?version=nightly)
4424    is no longer experimental and allows the use of 16-bit floating point
4425    formats during training, improving performance by up to 3x on GPUs and 60%
4426    on TPUs. Please see below for additional details.
4427
4428*   TensorFlow Profiler now supports profiling `MultiWorkerMirroredStrategy` and
4429    tracing multiple workers using the
4430    [sampling mode API](https://www.tensorflow.org/guide/profiler#profiling_apis).
4431
4432*   TFLite Profiler for Android is available. See the detailed
4433    [guide](https://www.tensorflow.org/lite/performance/measurement#trace_tensorflow_lite_internals_in_android)
4434    to learn more.
4435
4436*   TensorFlow pip packages are now built with CUDA11 and cuDNN 8.0.2.
4437
4438## Breaking Changes
4439
4440*   TF Core:
4441
4442    *   Certain float32 ops run in lower precision on Ampere based GPUs,
4443        including matmuls and convolutions, due to the use of
4444        [TensorFloat-32](https://blogs.nvidia.com/blog/2020/05/14/tensorfloat-32-precision-format/).
4445        Specifically, inputs to such ops are rounded from 23 bits of precision
4446        to 10 bits of precision. This is unlikely to cause issues in practice
4447        for deep learning models. In some cases, TensorFloat-32 is also used for
4448        complex64 ops. TensorFloat-32 can be disabled by running
4449        `tf.config.experimental.enable_tensor_float_32_execution(False)`.
4450    *   The byte layout for string tensors across the C-API has been updated to
4451        match TF Core/C++; i.e., a contiguous array of
4452        `tensorflow::tstring`/`TF_TString`s.
4453    *   C-API functions `TF_StringDecode`, `TF_StringEncode`, and
4454        `TF_StringEncodedSize` are no longer relevant and have been removed; see
4455        `core/platform/ctstring.h` for string access/modification in C.
4456    *   `tensorflow.python`, `tensorflow.core` and `tensorflow.compiler` modules
4457        are now hidden. These modules are not part of TensorFlow public API.
4458    *   `tf.raw_ops.Max` and `tf.raw_ops.Min` no longer accept inputs of type
4459        `tf.complex64` or `tf.complex128`, because the behavior of these ops is
4460        not well defined for complex types.
4461    *   XLA:CPU and XLA:GPU devices are no longer registered by default. Use
4462        `TF_XLA_FLAGS=--tf_xla_enable_xla_devices` if you really need them, but
4463        this flag will eventually be removed in subsequent releases.
4464
4465*   `tf.keras`:
4466
4467    *   The `steps_per_execution` argument in `model.compile()` is no longer
4468        experimental; if you were passing `experimental_steps_per_execution`,
4469        rename it to `steps_per_execution` in your code. This argument controls
4470        the number of batches to run during each `tf.function` call when calling
4471        `model.fit()`. Running multiple batches inside a single `tf.function`
4472        call can greatly improve performance on TPUs or small models with a
4473        large Python overhead.
4474    *   A **major refactoring** of the internals of the Keras Functional API may
4475        affect code that is relying on certain internal details:
4476    *   Code that uses `isinstance(x, tf.Tensor)` instead of `tf.is_tensor` when
4477        checking Keras symbolic inputs/outputs should switch to using
4478        `tf.is_tensor`.
4479    *   Code that is overly dependent on the exact names attached to symbolic
4480        tensors (e.g. assumes there will be ":0" at the end of the inputs,
4481        treats names as unique identifiers instead of using `tensor.ref()`,
4482        etc.) may break.
4483    *   Code that uses full path for `get_concrete_function` to trace Keras
4484        symbolic inputs directly should switch to building matching
4485        `tf.TensorSpec`s directly and tracing the `TensorSpec` objects.
4486    *   Code that relies on the exact number and names of the op layers that
4487        TensorFlow operations were converted into may have changed.
4488    *   Code that uses `tf.map_fn`/`tf.cond`/`tf.while_loop`/control flow as op
4489        layers and happens to work before TF 2.4. These will explicitly be
4490        unsupported now. Converting these ops to Functional API op layers was
4491        unreliable before TF 2.4, and prone to erroring incomprehensibly or
4492        being silently buggy.
4493    *   Code that directly asserts on a Keras symbolic value in cases where ops
4494        like `tf.rank` used to return a static or symbolic value depending on if
4495        the input had a fully static shape or not. Now these ops always return
4496        symbolic values.
4497    *   Code already susceptible to leaking tensors outside of graphs becomes
4498        slightly more likely to do so now.
4499    *   Code that tries directly getting gradients with respect to symbolic
4500        Keras inputs/outputs. Use `GradientTape` on the actual Tensors passed to
4501        the already-constructed model instead.
4502    *   Code that requires very tricky shape manipulation via converted op
4503        layers in order to work, where the Keras symbolic shape inference proves
4504        insufficient.
4505    *   Code that tries manually walking a `tf.keras.Model` layer by layer and
4506        assumes layers only ever have one positional argument. This assumption
4507        doesn't hold true before TF 2.4 either, but is more likely to cause
4508        issues now.
4509    *   Code that manually enters `keras.backend.get_graph()` before building a
4510        functional model is no longer needed.
4511    *   Start enforcing input shape assumptions when calling Functional API
4512        Keras models. This may potentially break some users, in case there is a
4513        mismatch between the shape used when creating `Input` objects in a
4514        Functional model, and the shape of the data passed to that model. You
4515        can fix this mismatch by either calling the model with correctly-shaped
4516        data, or by relaxing `Input` shape assumptions (note that you can pass
4517        shapes with `None` entries for axes that are meant to be dynamic). You
4518        can also disable the input checking entirely by setting
4519        `model.input_spec = None`.
4520    *   Several changes have been made to
4521        `tf.keras.mixed_precision.experimental`. Note that it is now recommended
4522        to use the non-experimental `tf.keras.mixed_precision` API.
4523    *   `AutoCastVariable.dtype` now refers to the actual variable dtype, not
4524        the dtype it will be casted to.
4525    *   When mixed precision is enabled, `tf.keras.layers.Embedding` now outputs
4526        a float16 or bfloat16 tensor instead of a float32 tensor.
4527    *   The property
4528        `tf.keras.mixed_precision.experimental.LossScaleOptimizer.loss_scale` is
4529        now a tensor, not a `LossScale` object. This means to get a loss scale
4530        of a `LossScaleOptimizer` as a tensor, you must now call
4531        `opt.loss_scale`instead of `opt.loss_scale()`.
4532    *   The property `should_cast_variables` has been removed from
4533        `tf.keras.mixed_precision.experimental.Policy`
4534    *   When passing a `tf.mixed_precision.experimental.DynamicLossScale` to
4535        `tf.keras.mixed_precision.experimental.LossScaleOptimizer`, the
4536        `DynamicLossScale`'s multiplier must be 2.
4537    *   When passing a `tf.mixed_precision.experimental.DynamicLossScale` to
4538        `tf.keras.mixed_precision.experimental.LossScaleOptimizer`, the weights
4539        of the `DynanmicLossScale` are copied into the `LossScaleOptimizer`
4540        instead of being reused. This means modifying the weights of the
4541        `DynamicLossScale` will no longer affect the weights of the
4542        LossScaleOptimizer, and vice versa.
4543    *   The global policy can no longer be set to a non-floating point policy in
4544        `tf.keras.mixed_precision.experimental.set_policy`
4545    *   In `Layer.call`, `AutoCastVariable`s will no longer be casted within
4546        `MirroredStrategy.run` or `ReplicaContext.merge_call`. This is because a
4547        thread local variable is used to determine whether `AutoCastVariable`s
4548        are casted, and those two functions run with a different thread. Note
4549        this only applies if one of these two functions is called within
4550        `Layer.call`; if one of those two functions calls `Layer.call`,
4551        `AutoCastVariable`s will still be casted.
4552
4553*   `tf.data`:
4554
4555    *   `tf.data.experimental.service.DispatchServer` now takes a config tuple
4556        instead of individual arguments. Usages should be updated to
4557        `tf.data.experimental.service.DispatchServer(dispatcher_config)`.
4558    *   `tf.data.experimental.service.WorkerServer` now takes a config tuple
4559        instead of individual arguments. Usages should be updated to
4560        `tf.data.experimental.service.WorkerServer(worker_config)`.
4561
4562*   `tf.distribute`:
4563
4564    *   Removes `tf.distribute.Strategy.experimental_make_numpy_dataset`. Please
4565        use `tf.data.Dataset.from_tensor_slices` instead.
4566    *   Renames `experimental_hints` in
4567        `tf.distribute.StrategyExtended.reduce_to`,
4568        `tf.distribute.StrategyExtended.batch_reduce_to`,
4569        `tf.distribute.ReplicaContext.all_reduce` to `options`.
4570    *   Renames `tf.distribute.experimental.CollectiveHints` to
4571        `tf.distribute.experimental.CommunicationOptions`.
4572    *   Renames `tf.distribute.experimental.CollectiveCommunication` to
4573        `tf.distribute.experimental.CommunicationImplementation`.
4574    *   Renames
4575        `tf.distribute.Strategy.experimental_distribute_datasets_from_function`
4576        to `distribute_datasets_from_function` as it is no longer experimental.
4577    *   Removes `tf.distribute.Strategy.experimental_run_v2` method, which was
4578        deprecated in TF 2.2.
4579
4580*   `tf.lite`:
4581
4582    *   `tf.quantization.quantize_and_dequantize_v2` has been introduced, which
4583        updates the gradient definition for quantization which is outside the
4584        range to be 0. To simulate the V1 the behavior of
4585        `tf.quantization.quantize_and_dequantize(...)` use
4586        `tf.grad_pass_through(tf.quantization.quantize_and_dequantize_v2)(...)`.
4587
4588*   Building TensorFlow:
4589
4590    *   Windows platform builds: TensorFlow on Windows under MSVC is now built
4591        with `--copt=/experimental:preprocessor
4592        --host_copt=/experimental:preprocessor` (see `.bazelrc` for more
4593        details). Builds including TensorFlow may fail with unexpected syntax
4594        errors if these flags are absent. See also
4595        [this thread on SIG Build](https://groups.google.com/a/tensorflow.org/g/build/c/LbAw8RILvTg/m/ttnuhYU2BgAJ).
4596
4597## Known Caveats
4598
4599*   `tf.keras.mixed_precision`
4600    *   When using mixed precision, calling `RMSprop.apply_gradients` or
4601        `Nadam.apply_gradients` outside a `tf.function` does not work and will
4602        raise the AttributeError "Tensor.op is meaningless when eager execution
4603        is enabled". See this
4604        [issue](https://github.com/tensorflow/tensorflow/issues/45536) for
4605        details and a workaround.
4606
4607## Bug Fixes and Other Changes
4608
4609### TF Core:
4610
4611*   Introduces experimental support for a new module named
4612    [`tf.experimental.numpy`](https://www.tensorflow.org/api_docs/python/tf/experimental/numpy),
4613    which is a NumPy-compatible API for writing TF programs. This module
4614    provides class `ndarray`, which mimics the `ndarray` class in NumPy, and
4615    wraps an immutable `tf.Tensor` under the hood. A subset of NumPy functions
4616    (e.g. `numpy.add`) are provided. Their inter-operation with TF facilities is
4617    seamless in most cases. See
4618    [tensorflow/python/ops/numpy_ops/README.md](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/numpy_ops/README.md)
4619    for details of what operations are supported and what are the differences
4620    from NumPy.
4621*   `tf.types.experimental.TensorLike` is a new `Union` type that can be used as
4622    type annotation for variables representing a Tensor or a value that can be
4623    converted to Tensor by `tf.convert_to_tensor`.
4624*   Calling ops with a python constants or numpy values is now consistent with
4625    tf.convert_to_tensor behavior. This avoids operations like tf.reshape
4626    truncating inputs such as from int64 to int32.
4627*   Adds `tf.sparse.map_values` to apply a function to the `.value`s of
4628    `SparseTensor` arguments.
4629*   The Python bitwise operators for `Tensor` (`__and__`, `__or__`, `__xor__`
4630    and `__invert__` now support non-`bool` arguments and apply the
4631    corresponding bitwise ops. `bool` arguments continue to be supported and
4632    dispatch to logical ops. This brings them more in line with Python and NumPy
4633    behavior.
4634*   Adds `tf.SparseTensor.with_values`. This returns a new SparseTensor with the
4635    same sparsity pattern, but with new provided values. It is similar to the
4636    `with_values` function of `RaggedTensor`.
4637*   Adds `StatelessCase` op, and uses it if none of case branches has stateful
4638    ops.
4639*   Adds `tf.config.experimental.get_memory_usage` to return total memory usage
4640    of the device.
4641*   Adds gradients for `RaggedTensorToVariant` and `RaggedTensorFromVariant`.
4642*   Improve shape inference of nested function calls by supporting constant
4643    folding across Arg nodes which makes more static values available to shape
4644    inference functions.
4645*   `tf.debugging`:
4646    *   `tf.debugging.assert_shapes()` now works on `SparseTensor`s (Fixes
4647        [#36268](https://github.com/tensorflow/tensorflow/issues/36268)).
4648*   GPU
4649    *   Adds Support for
4650        [TensorFloat-32](https://blogs.nvidia.com/blog/2020/05/14/tensorfloat-32-precision-format/)
4651        on Ampere based GPUs.TensorFloat-32, or TF32 for short, is a math mode
4652        for NVIDIA Ampere based GPUs which causes certain float32 ops, such as
4653        matrix multiplications and convolutions, to run much faster on Ampere
4654        GPUs but with reduced precision. This reduced precision has not been
4655        found to effect convergence quality of deep learning models in practice.
4656        TensorFloat-32 is enabled by default, but can be disabled with
4657        `tf.config.experimental.enable_tensor_float_32_execution`.
4658*   `tf.math`:
4659    *   Adds `tf.math.erfcinv`, the inverse to `tf.math.erfc`.
4660*   `tf.nn`:
4661    *   `tf.nn.max_pool2d` now supports explicit padding.
4662*   `tf.image`:
4663    *   Adds deterministic `tf.image.stateless_random_*` functions for each
4664        `tf.image.random_*` function. Added a new op
4665        `stateless_sample_distorted_bounding_box` which is a deterministic
4666        version of `sample_distorted_bounding_box` op. Given the same seed,
4667        these stateless functions/ops produce the same results independent of
4668        how many times the function is called, and independent of global seed
4669        settings.
4670    *   Adds deterministic `tf.image.resize` backprop CUDA kernels for
4671        `method=ResizeMethod.BILINEAR` (the default method). Enable by setting
4672        the environment variable `TF_DETERMINISTIC_OPS` to `"true"` or `"1"`.
4673*   `tf.print`:
4674    *   Bug fix in `tf.print()` with `OrderedDict` where if an `OrderedDict`
4675        didn't have the keys sorted, the keys and values were not being printed
4676        in accordance with their correct mapping.
4677*   `tf.train.Checkpoint`:
4678    *   Now accepts a `root` argument in the initialization, which generates a
4679        checkpoint with a root object. This allows users to create a
4680        `Checkpoint` object that is compatible with Keras `model.save_weights()`
4681        and `model.load_weights`. The checkpoint is also compatible with the
4682        checkpoint saved in the `variables/` folder in the SavedModel.
4683    *   When restoring, `save_path` can be a path to a SavedModel. The function
4684        will automatically find the checkpoint in the SavedModel.
4685
4686### `tf.data`:
4687
4688*   Adds new `tf.data.experimental.service.register_dataset` and
4689    `tf.data.experimental.service.from_dataset_id` APIs to enable one process to
4690    register a dataset with the tf.data service, and another process to consume
4691    data from the dataset.
4692*   Adds support for dispatcher fault tolerance. To enable fault tolerance,
4693    configure a `work_dir` when running your dispatcher server and set
4694    `dispatcher_fault_tolerance=True`. The dispatcher will store its state to
4695    `work_dir`, so that on restart it can continue from its previous state after
4696    restart.
4697*   Adds support for sharing dataset graphs via shared filesystem instead of
4698    over RPC. This reduces load on the dispatcher, improving performance of
4699    distributing datasets. For this to work, the dispatcher's `work_dir` must be
4700    accessible from workers. If the worker fails to read from the `work_dir`, it
4701    falls back to using RPC for dataset graph transfer.
4702*   Adds support for a new "distributed_epoch" processing mode. This processing
4703    mode distributes a dataset across all tf.data workers, instead of having
4704    each worker process the full dataset. See
4705    [the tf.data service docs](https://www.tensorflow.org/api_docs/python/tf/data/experimental/service#understand_processing_mode)
4706    to learn more.
4707*   Adds optional `exclude_cols` parameter to CsvDataset. This parameter is the
4708    complement of `select_cols`; at most one of these should be specified.
4709*   We have implemented an optimization which reorders data-discarding
4710    transformations such as `take` and `shard` to happen earlier in the dataset
4711    when it is safe to do so. The optimization can be disabled via the
4712    `experimental_optimization.reorder_data_discarding_ops` dataset option.
4713*   `tf.data.Options` were previously immutable and can now be overridden.
4714*   `tf.data.Dataset.from_generator` now supports Ragged and Sparse tensors with
4715    a new `output_signature` argument, which allows `from_generator` to produce
4716    any type describable by a `tf.TypeSpec`.
4717*   `tf.data.experimental.AUTOTUNE` is now available in the core API as
4718    `tf.data.AUTOTUNE`.
4719
4720### `tf.distribute`:
4721
4722*   Introduces experimental support for asynchronous training of models via
4723    `tf.distribute.experimental.ParameterServerStrategy`:
4724    *   Replaces the existing
4725        `tf.distribute.experimental.ParameterServerStrategy` symbol with a new
4726        class that is for parameter server training in TF2. Usage of the old
4727        symbol, usually with Estimator API, should be **replaced** with
4728        [`tf.compat.v1.distribute.experimental.ParameterServerStrategy`].
4729    *   Added `tf.distribute.experimental.coordinator.*` namespace, including
4730        the main API `ClusterCoordinator` for coordinating the training cluster,
4731        the related data structure `RemoteValue` and `PerWorkerValue`.
4732*   `MultiWorkerMirroredStrategy`](https://www.tensorflow.org/api_docs/python/tf/distribute/MultiWorkerMirroredStrategy)
4733    is now a stable API and is no longer considered experimental. Some of the
4734    major improvements involve handling peer failure and many bug fixes. Please
4735    check out the detailed tutorial on
4736    [Multi-worer training with Keras](https://www.tensorflow.org/tutorials/distribute/multi_worker_with_keras).
4737*   Adds `tf.distribute.Strategy.gather` and
4738    `tf.distribute.ReplicaContext.all_gather` APIs to support gathering dense
4739    distributed values.
4740*   Fixes various issues with saving a distributed model.
4741
4742### `tf.keras`:
4743
4744*   Improvements from the Functional API refactoring:
4745    *   Functional model construction does not need to maintain a global
4746        workspace graph, removing memory leaks especially when building many
4747        models or very large models.
4748    *   Functional model construction should be ~8-10% faster on average.
4749    *   Functional models can now contain non-symbolic values in their call
4750        inputs inside of the first positional argument.
4751    *   Several classes of TF ops that were not reliably converted to Keras
4752        layers during functional API construction should now work,
4753        e.g.`tf.image.ssim_multiscale`
4754    *   Error messages when Functional API construction goes wrong (and when ops
4755        cannot be converted to Keras layers automatically) should be clearer and
4756        easier to understand.
4757*   `Optimizer.minimize` can now accept a loss `Tensor` and a `GradientTape` as
4758    an alternative to accepting a `callable` loss.
4759*   Adds `beta` hyperparameter to
4760    [FTRL](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Ftrl)
4761    optimizer classes (Keras and others) to match
4762    [FTRL paper](https://research.google.com/pubs/archive/41159.pdf).
4763*   `Optimizer.__init__` now accepts a `gradient_aggregator` to allow for
4764    customization of how gradients are aggregated across devices, as well as
4765    `gradients_transformers` to allow for custom gradient transformations (such
4766    as gradient clipping).
4767*   Improvements to Keras preprocessing layers:
4768    *   TextVectorization can now accept a vocabulary list or file as an init
4769        arg.
4770    *   Normalization can now accept mean and variance values as init args.
4771*   In `Attention` and `AdditiveAttention` layers, the `call()` method now
4772    accepts a `return_attention_scores` argument. When set to True, the layer
4773    returns the attention scores as an additional output argument.
4774*   Adds `tf.metrics.log_cosh` and `tf.metrics.logcosh` API entrypoints with the
4775    same implementation as their `tf.losses` equivalent.
4776*   For Keras model, the individual call of `Model.evaluate` uses no cached data
4777    for evaluation, while `Model.fit` uses cached data when `validation_data`
4778    arg is provided for better performance.
4779*   Adds a `save_traces` argument to `model.save`/ `tf.keras.models.save_model`
4780    which determines whether the SavedModel format stores the Keras model/layer
4781    call functions. The traced functions allow Keras to revive custom models and
4782    layers without the original class definition, but if this isn't required the
4783    tracing can be disabled with the added option.
4784*   The `tf.keras.mixed_precision` API is now non-experimental. The
4785    non-experimental API differs from the experimental API in several ways.
4786    *   `tf.keras.mixed_precision.Policy` no longer takes in a
4787        `tf.mixed_precision. experimental.LossScale` in the constructor, and no
4788        longer has a `LossScale` associated with it. Instead, `Model.compile`
4789        will automatically wrap the optimizer with a `LossScaleOptimizer` using
4790        dynamic loss scaling if `Policy.name` is "mixed_float16".
4791    *   `tf.keras.mixed_precision.LossScaleOptimizer`'s constructor takes in
4792        different arguments. In particular, it no longer takes in a `LossScale`,
4793        and there is no longer a `LossScale` associated with the
4794        `LossScaleOptimizer`. Instead, `LossScaleOptimizer` directly implements
4795        fixed or dynamic loss scaling. See the documentation of
4796        [`tf.keras.mixed_precision.experimental.LossScaleOptimizer`](https://www.tensorflow.org/api_docs/python/tf/keras/mixed_precision/experimental/LossScaleOptimizer?version=nightly)
4797        for details on the differences between the experimental
4798        `LossScaleOptimizer` and the new non-experimental `LossScaleOptimizer`.
4799    *   `tf.mixed_precision.experimental.LossScale` and its subclasses are
4800        deprecated, as all of its functionality now exists within
4801        `tf.keras.mixed_precision.LossScaleOptimizer`
4802
4803### `tf.lite`:
4804
4805*   `TFLiteConverter`:
4806    *   Support optional flags `inference_input_type` and
4807        `inference_output_type` for full integer quantized models. This allows
4808        users to modify the model input and output type to integer types
4809        (`tf.int8`, `tf.uint8`) instead of defaulting to float type
4810        (`tf.float32`).
4811*   NNAPI
4812    *   Adds NNAPI Delegation support for requantization use cases by converting
4813        the operation into a dequantize-quantize pair.
4814    *   Removes deprecated `Interpreter.setUseNNAPI(boolean)` Java API. Use
4815        `Interpreter.Options.setUseNNAPI` instead.
4816    *   Deprecates `Interpreter::UseNNAPI(bool)` C++ API. Use `NnApiDelegate()`
4817        and related delegate configuration methods directly.
4818    *   Deprecates `Interpreter::SetAllowFp16PrecisionForFp32(bool)` C++ API.
4819        Prefer controlling this via delegate options, e.g.
4820        `tflite::StatefulNnApiDelegate::Options::allow_fp16'
4821        or`TfLiteGpuDelegateOptionsV2::is_precision_loss_allowed`.
4822*   GPU
4823    *   GPU acceleration now supports quantized models by default
4824*   `DynamicBuffer::AddJoinedString()` will now add a separator if the first
4825    string to be joined is empty.
4826*   Adds support for cumulative sum (cumsum), both as builtin op and MLIR
4827    conversion.
4828
4829### `TensorRT`
4830
4831*   Issues a warning when the `session_config` parameter for the TF1 converter
4832    is used or the `rewrite_config_template` field in the TF2 converter
4833    parameter object is used.
4834
4835### TPU Enhancements:
4836
4837*   Adds support for the `beta` parameter of the FTRL optimizer for TPU
4838    embeddings. Users of other TensorFlow platforms can implement equivalent
4839    behavior by adjusting the `l2` parameter.
4840
4841### XLA Support:
4842
4843*   xla.experimental.compile is deprecated, use
4844    `tf.function(experimental_compile=True)` instead.
4845*   Adds `tf.function.experimental_get_compiler_ir` which returns compiler IR
4846    (currently 'hlo' and 'optimized_hlo') for given input for given function.
4847
4848### Security:
4849
4850*   Fixes an undefined behavior causing a segfault in `tf.raw_ops.Switch`,
4851    ([CVE-2020-15190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15190))
4852*   Fixes three vulnerabilities in conversion to DLPack format
4853    *   [CVE-2020-15191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15191),
4854    *   [CVE-2020-15192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15192),
4855    *   [CVE-2020-15193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15193)
4856*   Fixes two vulnerabilities in `SparseFillEmptyRowsGrad`
4857    *   [CVE-2020-15194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15194),
4858    *   [CVE-2020-15195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15195)
4859*   Fixes several vulnerabilities in `RaggedCountSparseOutput` and
4860    `SparseCountSparseOutput` operations
4861    *   [CVE-2020-15196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15196),
4862    *   [CVE-2020-15197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15197),
4863    *   [CVE-2020-15198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15198),
4864    *   [CVE-2020-15199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15199),
4865    *   [CVE-2020-15200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15200),
4866    *   [CVE-2020-15201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15201)
4867*   Fixes an integer truncation vulnerability in code using the work sharder
4868    API,
4869    ([CVE-2020-15202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15202))
4870*   Fixes a format string vulnerability in `tf.strings.as_string`,
4871    ([CVE-2020-15203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15203))
4872*   Fixes segfault raised by calling session-only ops in eager mode,
4873    ([CVE-2020-15204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15204))
4874*   Fixes data leak and potential ASLR violation from `tf.raw_ops.StringNGrams`,
4875    ([CVE-2020-15205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15205))
4876*   Fixes segfaults caused by incomplete `SavedModel` validation,
4877    ([CVE-2020-15206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15206))
4878*   Fixes a data corruption due to a bug in negative indexing support in TFLite,
4879    ([CVE-2020-15207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15207))
4880*   Fixes a data corruption due to dimension mismatch in TFLite,
4881    ([CVE-2020-15208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15208))
4882*   Fixes several vulnerabilities in TFLite saved model format
4883    *   [CVE-2020-15209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15209),
4884    *   [CVE-2020-15210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15210),
4885    *   [CVE-2020-15211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15211)
4886*   Fixes several vulnerabilities in TFLite implementation of segment sum
4887    *   [CVE-2020-15212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15212),
4888    *   [CVE-2020-15213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15213),
4889    *   [CVE-2020-15214](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15214)
4890*   Fixes a segfault in `tf.quantization.quantize_and_dequantize`,
4891    ([CVE-2020-15265](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15265))
4892*   Fixes an undefined behavior float cast causing a crash,
4893    ([CVE-2020-15266](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15266))
4894*   Fixes a lack of validation in `tf.raw_ops.DataFormatVecPermute` and
4895    `tf.raw_ops.DataFormatDimMap` which can cause uninitialized memory access,
4896    read outside bounds of arrays, data corruption and segmentation faults
4897    ([CVE-2020-26267](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26267))
4898*   Fixes a crash caused by writing to read only memory region
4899    ([CVE-2020-26268](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26268))
4900*   Fixes a heap out of bounds access in filesystem globbing implementation
4901    ([CVE-2020-26269](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26269))
4902
4903### Other:
4904
4905*   We have replaced uses of "whitelist" and "blacklist" with "allowlist" and
4906    "denylist" where possible. Please see
4907    [this list](https://developers.google.com/style/word-list#blacklist) for
4908    more context.
4909*   Adds `tf.config.experimental.mlir_bridge_rollout` which will help us rollout
4910    the new MLIR TPU bridge.
4911*   Adds `tf.experimental.register_filesystem_plugin` to load modular filesystem
4912    plugins from Python
4913
4914## Thanks to our Contributors
4915
4916This release contains contributions from many people at Google as well as the
4917following external contributors:
4918
49198bitmp3, aaa.jq, Abhineet Choudhary, Abolfazl Shahbazi, acxz, Adam Hillier,
4920Adrian Garcia Badaracco, Ag Ramesh, ahmedsabie, Alan Anderson, Alexander Grund,
4921Alexandre Lissy, Alexey Ivanov, Amedeo Cavallo, anencore94, Aniket Kumar Singh,
4922Anthony Platanios, Ashwin Phadke, Balint Cristian, Basit Ayantunde, bbbboom, Ben
4923Barsdell, Benjamin Chetioui, Benjamin Peterson, bhack, Bhanu Prakash Bandaru
4924Venkata, Biagio Montaruli, Brent M. Spell, bubblebooy, bzhao, cfRod, Cheng Chen,
4925Cheng(Kit) Chen, Chris Tessum, Christian, chuanqiw, codeadmin_peritiae,
4926COTASPAR, CuiYifeng, danielknobe, danielyou0230, dannyfriar, daria,
4927DarrenZhang01, Denisa Roberts, dependabot[bot], Deven Desai, Dmitry Volodin,
4928Dmitry Zakharov, drebain, Duncan Riach, Eduard Feicho, Ehsan Toosi, Elena
4929Zhelezina, emlaprise2358, Eugene Kuznetsov, Evaderan-Lab, Evgeniy Polyakov,
4930Fausto Morales, Felix Johnny, fo40225, Frederic Bastien, Fredrik Knutsson,
4931fsx950223, Gaurav Singh, Gauri1 Deshpande, George Grzegorz Pawelczak, gerbauz,
4932Gianluca Baratti, Giorgio Arena, Gmc2, Guozhong Zhuang, Hannes Achleitner,
4933Harirai, HarisWang, Harsh188, hedgehog91, Hemal Mamtora, Hideto Ueno, Hugh Ku,
4934Ian Beauregard, Ilya Persky, jacco, Jakub Beránek, Jan Jongboom, Javier Montalt
4935Tordera, Jens Elofsson, Jerry Shih, jerryyin, jgehw, Jinjing Zhou, jma, jmsmdy,
4936Johan Nordström, John Poole, Jonah Kohn, Jonathan Dekhtiar, jpodivin, Jung Daun,
4937Kai Katsumata, Kaixi Hou, Kamil Rakoczy, Kaustubh Maske Patil, Kazuaki Ishizaki,
4938Kedar Sovani, Koan-Sin Tan, Koki Ibukuro, Krzysztof Laskowski, Kushagra Sharma,
4939Kushan Ahmadian, Lakshay Tokas, Leicong Li, levinxo, Lukas Geiger, Maderator,
4940Mahmoud Abuzaina, Mao Yunfei, Marius Brehler, markf, Martin Hwasser, Martin
4941Kubovčík, Matt Conley, Matthias, mazharul, mdfaijul, Michael137, MichelBr,
4942Mikhail Startsev, Milan Straka, Ml-0, Myung-Hyun Kim, Måns Nilsson, Nathan
4943Luehr, ngc92, nikochiko, Niranjan Hasabnis, nyagato_00, Oceania2018, Oleg Guba,
4944Ongun Kanat, OscarVanL, Patrik Laurell, Paul Tanger, Peter Sobot, Phil Pearl,
4945PlusPlusUltra, Poedator, Prasad Nikam, Rahul-Kamat, Rajeshwar Reddy T,
4946redwrasse, Rickard, Robert Szczepanski, Rohan Lekhwani, Sam Holt, Sami Kama,
4947Samuel Holt, Sandeep Giri, sboshin, Sean Settle, settle, Sharada Shiddibhavi,
4948Shawn Presser, ShengYang1, Shi,Guangyong, Shuxiang Gao, Sicong Li, Sidong-Wei,
4949Srihari Humbarwadi, Srinivasan Narayanamoorthy, Steenu Johnson, Steven Clarkson,
4950stjohnso98, Tamas Bela Feher, Tamas Nyiri, Tarandeep Singh, Teng Lu, Thibaut
4951Goetghebuer-Planchon, Tim Bradley, Tomasz Strejczek, Tongzhou Wang, Torsten
4952Rudolf, Trent Lo, Ty Mick, Tzu-Wei Sung, Varghese, Jojimon, Vignesh Kothapalli,
4953Vishakha Agrawal, Vividha, Vladimir Menshakov, Vladimir Silyaev, VoVAllen, Võ
4954Văn Nghĩa, wondertx, xiaohong1031, Xiaoming (Jason) Cui, Xinan Jiang, Yair
4955Ehrenwald, Yasir Modak, Yasuhiro Matsumoto, Yimei Sun, Yiwen Li, Yixing, Yoav
4956Ramon, Yong Tang, Yong Wu, yuanbopeng, Yunmo Koo, Zhangqiang, Zhou Peng,
4957ZhuBaohe, zilinzhu, zmx
4958
4959# Release 2.3.1
4960
4961## Bug Fixes and Other Changes
4962
4963*   Fixes an undefined behavior causing a segfault in `tf.raw_ops.Switch`
4964    ([CVE-2020-15190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15190))
4965*   Fixes three vulnerabilities in conversion to DLPack format
4966    ([CVE-2020-15191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15191),
4967    [CVE-2020-15192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15192),
4968    [CVE-2020-15193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15193))
4969*   Fixes two vulnerabilities in `SparseFillEmptyRowsGrad`
4970    ([CVE-2020-15194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15194),
4971    [CVE-2020-15195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15195))
4972*   Fixes several vulnerabilities in `RaggedCountSparseOutput` and
4973    `SparseCountSparseOutput` operations
4974    ([CVE-2020-15196](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15196),
4975    [CVE-2020-15197](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15197),
4976    [CVE-2020-15198](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15198),
4977    [CVE-2020-15199](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15199),
4978    [CVE-2020-15200](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15200),
4979    [CVE-2020-15201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15201))
4980*   Fixes an integer truncation vulnerability in code using the work sharder API
4981    ([CVE-2020-15202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15202))
4982*   Fixes a format string vulnerability in `tf.strings.as_string`
4983    ([CVE-2020-15203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15203))
4984*   Fixes segfault raised by calling session-only ops in eager mode
4985    ([CVE-2020-15204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15204))
4986*   Fixes data leak and potential ASLR violation from `tf.raw_ops.StringNGrams`
4987    ([CVE-2020-15205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15205))
4988*   Fixes segfaults caused by incomplete `SavedModel` validation
4989    ([CVE-2020-15206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15206))
4990*   Fixes a data corruption due to a bug in negative indexing support in TFLite
4991    ([CVE-2020-15207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15207))
4992*   Fixes a data corruption due to dimension mismatch in TFLite
4993    ([CVE-2020-15208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15208))
4994*   Fixes several vulnerabilities in TFLite saved model format
4995    ([CVE-2020-15209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15209),
4996    [CVE-2020-15210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15210),
4997    [CVE-2020-15211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15211))
4998*   Fixes several vulnerabilities in TFLite implementation of segment sum
4999    ([CVE-2020-15212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15212),
5000    [CVE-2020-15213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15213),
5001    [CVE-2020-15214](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15214))
5002*   Updates `sqlite3` to `3.33.00` to handle
5003    [CVE-2020-15358](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15358).
5004*   Fixes deprecated usage of `collections` API
5005*   Removes `scipy` dependency from `setup.py` since TensorFlow does not need it
5006    to install the pip package
5007
5008# Release 2.2.1
5009
5010## Bug Fixes and Other Changes
5011
5012*   Fixes an undefined behavior causing a segfault in `tf.raw_ops.Switch`
5013    ([CVE-2020-15190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15190))
5014*   Fixes three vulnerabilities in conversion to DLPack format
5015    ([CVE-2020-15191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15191),
5016    [CVE-2020-15192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15192),
5017    [CVE-2020-15193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15193))
5018*   Fixes two vulnerabilities in `SparseFillEmptyRowsGrad`
5019    ([CVE-2020-15194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15194),
5020    [CVE-2020-15195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15195))
5021*   Fixes an integer truncation vulnerability in code using the work sharder API
5022    ([CVE-2020-15202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15202))
5023*   Fixes a format string vulnerability in `tf.strings.as_string`
5024    ([CVE-2020-15203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15203))
5025*   Fixes segfault raised by calling session-only ops in eager mode
5026    ([CVE-2020-15204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15204))
5027*   Fixes data leak and potential ASLR violation from `tf.raw_ops.StringNGrams`
5028    ([CVE-2020-15205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15205))
5029*   Fixes segfaults caused by incomplete `SavedModel` validation
5030    ([CVE-2020-15206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15206))
5031*   Fixes a data corruption due to a bug in negative indexing support in TFLite
5032    ([CVE-2020-15207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15207))
5033*   Fixes a data corruption due to dimension mismatch in TFLite
5034    ([CVE-2020-15208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15208))
5035*   Fixes several vulnerabilities in TFLite saved model format
5036    ([CVE-2020-15209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15209),
5037    [CVE-2020-15210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15210),
5038    [CVE-2020-15211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15211))
5039*   Fixes several vulnerabilities in TFLite implementation of segment sum
5040    ([CVE-2020-15212](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15212),
5041    [CVE-2020-15213](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15213),
5042    [CVE-2020-15214](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15214))
5043*   Updates `sqlite3` to `3.33.00` to handle
5044    [CVE-2020-9327](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-9327),
5045    [CVE-2020-11655](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11655),
5046    [CVE-2020-11656](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11656),
5047    [CVE-2020-13434](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13434),
5048    [CVE-2020-13435](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13435),
5049    [CVE-2020-13630](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13630),
5050    [CVE-2020-13631](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13631),
5051    [CVE-2020-13871](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13871),
5052    and
5053    [CVE-2020-15358](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15358).
5054*   Fixes deprecated usage of `collections` API
5055*   Removes `scipy` dependency from `setup.py` since TensorFlow does not need it
5056    to install the pip package
5057
5058# Release 2.1.2
5059
5060## Bug Fixes and Other Changes
5061
5062*   Fixes an undefined behavior causing a segfault in `tf.raw_ops.Switch`
5063    ([CVE-2020-15190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15190))
5064*   Fixes three vulnerabilities in conversion to DLPack format
5065    ([CVE-2020-15191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15191),
5066    [CVE-2020-15192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15192),
5067    [CVE-2020-15193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15193))
5068*   Fixes two vulnerabilities in `SparseFillEmptyRowsGrad`
5069    ([CVE-2020-15194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15194),
5070    [CVE-2020-15195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15195))
5071*   Fixes an integer truncation vulnerability in code using the work sharder API
5072    ([CVE-2020-15202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15202))
5073*   Fixes a format string vulnerability in `tf.strings.as_string`
5074    ([CVE-2020-15203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15203))
5075*   Fixes segfault raised by calling session-only ops in eager mode
5076    ([CVE-2020-15204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15204))
5077*   Fixes data leak and potential ASLR violation from `tf.raw_ops.StringNGrams`
5078    ([CVE-2020-15205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15205))
5079*   Fixes segfaults caused by incomplete `SavedModel` validation
5080    ([CVE-2020-15206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15206))
5081*   Fixes a data corruption due to a bug in negative indexing support in TFLite
5082    ([CVE-2020-15207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15207))
5083*   Fixes a data corruption due to dimension mismatch in TFLite
5084    ([CVE-2020-15208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15208))
5085*   Fixes several vulnerabilities in TFLite saved model format
5086    ([CVE-2020-15209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15209),
5087    [CVE-2020-15210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15210),
5088    [CVE-2020-15211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15211))
5089*   Updates `sqlite3` to `3.33.00` to handle
5090    [CVE-2020-9327](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-9327),
5091    [CVE-2020-11655](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11655),
5092    [CVE-2020-11656](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11656),
5093    [CVE-2020-13434](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13434),
5094    [CVE-2020-13435](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13435),
5095    [CVE-2020-13630](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13630),
5096    [CVE-2020-13631](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13631),
5097    [CVE-2020-13871](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13871),
5098    and
5099    [CVE-2020-15358](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15358).
5100*   Removes `scipy` dependency from `setup.py` since TensorFlow does not need it
5101    to install the pip package
5102*   Switches ROCM builds to use ROCM 3.7
5103
5104# Release 2.0.3
5105
5106## Bug Fixes and Other Changes
5107
5108*   Fixes an undefined behavior causing a segfault in `tf.raw_ops.Switch`
5109    ([CVE-2020-15190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15190))
5110*   Fixes three vulnerabilities in conversion to DLPack format
5111    ([CVE-2020-15191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15191),
5112    [CVE-2020-15192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15192),
5113    [CVE-2020-15193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15193))
5114*   Fixes two vulnerabilities in `SparseFillEmptyRowsGrad`
5115    ([CVE-2020-15194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15194),
5116    [CVE-2020-15195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15195))
5117*   Fixes an integer truncation vulnerability in code using the work sharder API
5118    ([CVE-2020-15202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15202))
5119*   Fixes a format string vulnerability in `tf.strings.as_string`
5120    ([CVE-2020-15203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15203))
5121*   Fixes segfault raised by calling session-only ops in eager mode
5122    ([CVE-2020-15204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15204))
5123*   Fixes data leak and potential ASLR violation from `tf.raw_ops.StringNGrams`
5124    ([CVE-2020-15205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15205))
5125*   Fixes segfaults caused by incomplete `SavedModel` validation
5126    ([CVE-2020-15206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15206))
5127*   Fixes a data corruption due to a bug in negative indexing support in TFLite
5128    ([CVE-2020-15207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15207))
5129*   Fixes a data corruption due to dimension mismatch in TFLite
5130    ([CVE-2020-15208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15208))
5131*   Fixes several vulnerabilities in TFLite saved model format
5132    ([CVE-2020-15209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15209),
5133    [CVE-2020-15210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15210),
5134    [CVE-2020-15211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15211))
5135*   Updates `sqlite3` to `3.33.00` to handle
5136    [CVE-2020-9327](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-9327),
5137    [CVE-2020-11655](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11655),
5138    [CVE-2020-11656](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11656),
5139    [CVE-2020-13434](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13434),
5140    [CVE-2020-13435](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13435),
5141    [CVE-2020-13630](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13630),
5142    [CVE-2020-13631](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13631),
5143    [CVE-2020-13871](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13871),
5144    and
5145    [CVE-2020-15358](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15358).
5146*   Pins `numpy` to 1.18.5 to prevent ABI breakage when compiling code that uses
5147    both NumPy and TensorFlow headers.
5148
5149# Release 1.15.4
5150
5151## Bug Fixes and Other Changes
5152
5153*   Fixes an undefined behavior causing a segfault in `tf.raw_ops.Switch`
5154    ([CVE-2020-15190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15190))
5155*   Fixes three vulnerabilities in conversion to DLPack format
5156    ([CVE-2020-15191](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15191),
5157    [CVE-2020-15192](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15192),
5158    [CVE-2020-15193](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15193))
5159*   Fixes two vulnerabilities in `SparseFillEmptyRowsGrad`
5160    ([CVE-2020-15194](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15194),
5161    [CVE-2020-15195](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15195))
5162*   Fixes an integer truncation vulnerability in code using the work sharder API
5163    ([CVE-2020-15202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15202))
5164*   Fixes a format string vulnerability in `tf.strings.as_string`
5165    ([CVE-2020-15203](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15203))
5166*   Fixes segfault raised by calling session-only ops in eager mode
5167    ([CVE-2020-15204](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15204))
5168*   Fixes data leak and potential ASLR violation from `tf.raw_ops.StringNGrams`
5169    ([CVE-2020-15205](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15205))
5170*   Fixes segfaults caused by incomplete `SavedModel` validation
5171    ([CVE-2020-15206](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15206))
5172*   Fixes a data corruption due to a bug in negative indexing support in TFLite
5173    ([CVE-2020-15207](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15207))
5174*   Fixes a data corruption due to dimension mismatch in TFLite
5175    ([CVE-2020-15208](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15208))
5176*   Fixes several vulnerabilities in TFLite saved model format
5177    ([CVE-2020-15209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15209),
5178    [CVE-2020-15210](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15210),
5179    [CVE-2020-15211](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15211))
5180*   Updates `sqlite3` to `3.33.00` to handle
5181    [CVE-2020-9327](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-9327),
5182    [CVE-2020-11655](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11655),
5183    [CVE-2020-11656](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11656),
5184    [CVE-2020-13434](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13434),
5185    [CVE-2020-13435](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13435),
5186    [CVE-2020-13630](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13630),
5187    [CVE-2020-13631](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13631),
5188    [CVE-2020-13871](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13871),
5189    and
5190    [CVE-2020-15358](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15358).
5191*   Fixes #41630 by including `max_seq_length` in CuDNN descriptor cache key
5192*   Pins `numpy` to 1.18.5 to prevent ABI breakage when compiling code that uses
5193    both NumPy and TensorFlow headers.
5194
5195# Release 2.3.0
5196
5197## Major Features and Improvements
5198
5199*   `tf.data` adds two new mechanisms to solve input pipeline bottlenecks and
5200    save resources:
5201
5202    *   [snapshot](https://www.tensorflow.org/api_docs/python/tf/data/experimental/snapshot)
5203    *   [tf.data service](https://www.tensorflow.org/api_docs/python/tf/data/experimental/service).
5204
5205    In addition checkout the detailed
5206    [guide](https://www.tensorflow.org/guide/data_performance_analysis) for
5207    analyzing input pipeline performance with TF Profiler.
5208
5209*   [`tf.distribute.TPUStrategy`](https://www.tensorflow.org/api_docs/python/tf/distribute/TPUStrategy)
5210    is now a stable API and no longer considered experimental for TensorFlow.
5211    (earlier `tf.distribute.experimental.TPUStrategy`).
5212
5213*   [TF Profiler](https://www.tensorflow.org/guide/profiler) introduces two new
5214    tools: a memory profiler to visualize your model’s memory usage over time
5215    and a [python tracer](https://www.tensorflow.org/guide/profiler#events)
5216    which allows you to trace python function calls in your model. Usability
5217    improvements include better diagnostic messages and
5218    [profile options](https://tensorflow.org/guide/profiler#collect_performance_data)
5219    to customize the host and device trace verbosity level.
5220
5221*   Introduces experimental support for Keras Preprocessing Layers API
5222    ([`tf.keras.layers.experimental.preprocessing.*`](https://www.tensorflow.org/api_docs/python/tf/keras/layers/experimental/preprocessing?version=nightly))
5223    to handle data preprocessing operations, with support for composite tensor
5224    inputs. Please see below for additional details on these layers.
5225
5226*   TFLite now properly supports dynamic shapes during conversion and inference.
5227    We’ve also added opt-in support on Android and iOS for
5228    [XNNPACK](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/delegates/xnnpack),
5229    a highly optimized set of CPU kernels, as well as opt-in support for
5230    [executing quantized models on the GPU](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/gpu_advanced.md#running-quantized-models-experimental).
5231
5232*   Libtensorflow packages are available in GCS starting this release. We have
5233    also started to
5234    [release a nightly version of these packages](https://github.com/tensorflow/tensorflow#official-builds).
5235
5236*   The experimental Python API
5237    [`tf.debugging.experimental.enable_dump_debug_info()`](https://www.tensorflow.org/api_docs/python/tf/debugging/experimental/enable_dump_debug_info)
5238    now allows you to instrument a TensorFlow program and dump debugging
5239    information to a directory on the file system. The directory can be read and
5240    visualized by a new interactive dashboard in TensorBoard 2.3 called
5241    [Debugger V2](https://www.tensorflow.org/tensorboard/debugger_v2), which
5242    reveals the details of the TensorFlow program including graph structures,
5243    history of op executions at the Python (eager) and intra-graph levels, the
5244    runtime dtype, shape, and numerical composition of tensors, as well as their
5245    code locations.
5246
5247## Breaking Changes
5248
5249*   Increases the **minimum bazel version** required to build TF to **3.1.0**.
5250*   `tf.data`
5251    *   Makes the following (breaking) changes to the `tf.data`.
5252    *   C++ API: - `IteratorBase::RestoreInternal`,
5253        `IteratorBase::SaveInternal`, and `DatasetBase::CheckExternalState`
5254        become pure-virtual and subclasses are now expected to provide an
5255        implementation.
5256    *   The deprecated `DatasetBase::IsStateful` method is removed in favor of
5257        `DatasetBase::CheckExternalState`.
5258    *   Deprecated overrides of `DatasetBase::MakeIterator` and
5259        `MakeIteratorFromInputElement` are removed.
5260    *   The signature of `tensorflow::data::IteratorBase::SaveInternal` and
5261        `tensorflow::data::IteratorBase::SaveInput` has been extended with
5262        `SerializationContext` argument to enable overriding the default policy
5263        for the handling external state during iterator checkpointing. This is
5264        not a backwards compatible change and all subclasses of `IteratorBase`
5265        *need to be updated* accordingly.
5266*   `tf.keras`
5267    *   Add a new `BackupAndRestore` callback for handling distributed training
5268        failures & restarts. Please take a look at this
5269        [tutorial](https://www.tensorflow.org/tutorials/distribute/multi_worker_with_keras)
5270        for details on how to use the callback.
5271*   `tf.image.extract_glimpse` has been updated to correctly process the case
5272    where `centered=False` and `normalized=False`. This is a breaking change as
5273    the output is different from (incorrect) previous versions. Note this
5274    breaking change only impacts `tf.image.extract_glimpse` and
5275    `tf.compat.v2.image.extract_glimpse` API endpoints. The behavior of
5276    `tf.compat.v1.image.extract_glimpse` does not change. The behavior of
5277    existing C++ kernel `ExtractGlimpse` does not change either, so saved models
5278    using `tf.raw_ops.ExtractGlimpse` will not be impacted.
5279
5280## Known Caveats
5281
5282*   `tf.lite`
5283    *   Keras-based LSTM models must be converted with an explicit batch size in
5284        the input layer.
5285
5286## Bug Fixes and Other Changes
5287
5288### TF Core:
5289
5290*   Set `tf2_behavior` to 1 to enable V2 for early loading cases.
5291*   Add `execute_fn_for_device function` to dynamically choose the
5292    implementation based on underlying device placement.
5293*   Eager:
5294    *   Add `reduce_logsumexp` benchmark with experiment compile.
5295    *   Give `EagerTensor`s a meaningful `__array__` implementation.
5296    *   Add another version of defun matmul for performance analysis.
5297*   `tf.function`/AutoGraph:
5298    *   `AutoGraph` now includes into TensorFlow loops any variables that are
5299        closed over by local functions. Previously, such variables were
5300        sometimes incorrectly ignored.
5301    *   functions returned by the `get_concrete_function` method of
5302        `tf.function` objects can now be called with arguments consistent with
5303        the original arguments or type specs passed to `get_concrete_function`.
5304        This calling convention is now the preferred way to use concrete
5305        functions with nested values and composite tensors. Please check the
5306        [guide](https://www.tensorflow.org/guide/concrete_function) for more
5307        details on `concrete_ function`.
5308    *   Update `tf.function`'s `experimental_relax_shapes` to handle composite
5309        tensors appropriately.
5310    *   Optimize `tf.function` invocation, by removing redundant list converter.
5311    *   `tf.function` will retrace when called with a different variable instead
5312        of simply using the `dtype` & `shape`.
5313    *   [Improve support](https://github.com/tensorflow/tensorflow/issues/33862)
5314        for dynamically-sized TensorArray inside `tf.function`.
5315*   `tf.math`:
5316    *   Narrow down `argmin`/`argmax` contract to always return the smallest
5317        index for ties.
5318    *   `tf.math.reduce_variance` and `tf.math.reduce_std` return correct
5319        computation for complex types and no longer support integer types.
5320    *   Add Bessel functions of order 0,1 to `tf.math.special`.
5321    *   `tf.divide` now always returns a tensor to be consistent with
5322        documentation and other APIs.
5323*   `tf.image`:
5324    *   Replaced
5325        [`tf.image.non_max_suppression_padded`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/image/non_max_suppression_padded?hl=en)
5326        with a new implementation that supports batched inputs, which is
5327        considerably faster on TPUs and GPUs. Boxes with area=0 will be ignored.
5328        Existing usage with single inputs should still work as before.
5329*   `tf.linalg`
5330    *   Add `tf.linalg.banded_triangular_solve`.
5331*   `tf.random`:
5332    *   Add `tf.random.stateless_parameterized_truncated_normal`.
5333*   `tf.ragged`:
5334    *   Add `tf.ragged.cross` and `tf.ragged.cross_hashed` operations.
5335*   `tf.RaggedTensor`:
5336    *   `RaggedTensor.to_tensor()` now preserves static shape.
5337    *   Add `tf.strings.format()` and `tf.print()` to support RaggedTensors.
5338*   `tf.saved_model`:
5339    *   `@tf.function` from SavedModel no longer ignores args after a
5340        `RaggedTensor` when selecting the concrete function to run.
5341    *   Fix save model issue for ops with a list of functions.
5342    *   Add `tf.saved_model.LoadOptions` with
5343        [`experimental_io_device`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/saved_model/LoadOptions?hl=en)
5344        as arg with default value `None` to choose the I/O device for loading
5345        models and weights.
5346    *   Update `tf.saved_model.SaveOptions` with
5347        [`experimental_io_device`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/saved_model/SaveOptions?hl=en)
5348        as arg with default value `None` to choose the I/O device for saving
5349        models and weights.
5350    *   Mutable tables now restore checkpointed values when loaded from
5351        SavedModel.
5352    *   The user object metadata field in the SavedModel proto has been
5353        deprecated as part of the updates to Keras SavedModel. Keras was the
5354        only consumer of this field prior to the update.
5355*   GPU
5356    *   TF 2.3 includes PTX kernels only for
5357        [compute capability](https://developer.nvidia.com/cuda-gpus) 7.0 to
5358        reduce the TF pip binary size. Earlier releases included PTX for a
5359        variety of older compute capabilities.
5360    *   Remove environmental variable `TF_USE_CUDNN`.
5361*   Others
5362    *   Retain parent namescope for ops added inside
5363        `tf.while_loop`/`tf.cond`/`tf.switch_case`.
5364    *   Update `tf.vectorized_map` to support vectorizing `tf.while_loop` and
5365        TensorList operations.
5366    *   `tf.custom_gradient` can now be applied to functions that accept nested
5367        structures of `tensors` as inputs (instead of just a list of tensors).
5368        Note that Python structures such as tuples and lists now won't be
5369        treated as tensors, so if you still want them to be treated that way,
5370        you need to wrap them with `tf.convert_to_tensor`.
5371    *   No lowering on gradient case op when input is `DeviceIndex` op.
5372    *   Extend the ragged version of `tf.gather` to support `batch_dims` and
5373        `axis` args.
5374    *   Update `tf.map_fn` to support RaggedTensors and SparseTensors.
5375    *   Deprecate `tf.group`. It is not useful in eager mode.
5376    *   Add CPU and GPU implementation of modified variation of
5377        [`FTRL`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/raw_ops/ApplyFtrl)/[`FTRLV2`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/raw_ops/ApplyFtrlV2)
5378        that can triggerred by `multiply_linear_by_lr` allowing a learning rate
5379        of zero.
5380
5381### `tf.data`:
5382
5383*   `tf.data.experimental.dense_to_ragged_batch` works correctly with tuples.
5384*   `tf.data.experimental.dense_to_ragged_batch` to output variable ragged rank.
5385*   `tf.data.experimental.cardinality` is now a method on `tf.data.Dataset`.
5386*   `tf.data.Dataset` now supports `len(Dataset)` when the cardinality is
5387    finite.
5388
5389### `tf.distribute`:
5390
5391*   Expose experimental
5392    [`tf.distribute.DistributedDataset`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/distribute/DistributedDataset?hl=en)
5393    and
5394    [`tf.distribute.DistributedIterator`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/distribute/DistributedIterator)
5395    to distribute input data when using `tf.distribute` to scale training on
5396    multiple devices.
5397    *   Added a
5398        [`get_next_as_optional`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/distribute/DistributedIterator?hl=en#get_next_as_optional)
5399        method for
5400        [`tf.distribute.DistributedIterator`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/distribute/DistributedIterator?hl=en)
5401        class to return a `tf.experimental.Optional` instance that contains the
5402        next value for all replicas or none instead of raising an out of range
5403        error. Also see *new*
5404        [guide on input distribution](https://www.tensorflow.org/tutorials/distribute/input).
5405*   Allow var.assign on MirroredVariables with aggregation=NONE in replica
5406    context. Previously this would raise an error. We now allow this because
5407    many users and library writers find using `.assign` in replica context to be
5408    more convenient, instead of having to use `Strategy.extended.update` which
5409    was the previous way of updating variables in this situation.
5410*   `tf.distribute.experimental.MultiWorkerMirroredStrategy` adds support for
5411    partial batches. Workers running out of data now continue to participate in
5412    the training with empty inputs, instead of raising an error. Learn more
5413    about
5414    [partial batches here](https://www.tensorflow.org/tutorials/distribute/input#partial_batches).
5415*   Improve the performance of reading metrics eagerly under
5416    `tf.distribute.experimental.MultiWorkerMirroredStrategy`.
5417*   Fix the issue that `strategy.reduce()` inside `tf.function` may raise
5418    exceptions when the values to reduce are from loops or if-clauses.
5419*   Fix the issue that `tf.distribute.MirroredStrategy` cannot be used together
5420    with `tf.distribute.experimental.MultiWorkerMirroredStrategy`.
5421*   Add a `tf.distribute.cluster_resolver.TPUClusterResolver.connect` API to
5422    simplify TPU initialization.
5423*   Add `tf.distribute.Strategy.gather` and
5424    `tf.distribute.ReplicaContext.all_gather` methods to gather and concatenate
5425    `tf.distribute.DistributedValues` across workers and devices.
5426
5427### `tf.keras`:
5428
5429*   Introduces experimental preprocessing layers API
5430    (`tf.keras.layers.experimental.preprocessing`) to handle data preprocessing
5431    operations such as categorical feature encoding, text vectorization, data
5432    normalization, and data discretization (binning). The newly added layers
5433    provide a replacement for the legacy feature column API, and support
5434    composite tensor inputs.
5435*   Added **categorical data** processing layers:
5436    *   `IntegerLookup` & `StringLookup`: build an index of categorical feature
5437        values
5438    *   `CategoryEncoding`: turn integer-encoded categories into one-hot,
5439        multi-hot, or tf-idf encoded representations
5440    *   `CategoryCrossing`: create new categorical features representing
5441        co-occurrences of previous categorical feature values
5442    *   `Hashing`: the hashing trick, for large-vocabulary categorical features
5443    *   `Discretization`: turn continuous numerical features into categorical
5444        features by binning their values
5445*   Improved **image preprocessing** layers: `CenterCrop`, `Rescaling`
5446*   Improved **image augmentation** layers: `RandomCrop`, `RandomFlip`,
5447    `RandomTranslation`, `RandomRotation`, `RandomHeight`, `RandomWidth`,
5448    `RandomZoom`, `RandomContrast`
5449*   Improved **`TextVectorization`** layer, which handles string tokenization,
5450    n-gram generation, and token encoding
5451    *   The `TextVectorization` layer now accounts for the mask_token as part of
5452        the vocabulary size when output_mode='int'. This means that, if you have
5453        a max_tokens value of 5000, your output will have 5000 unique values
5454        (not 5001 as before).
5455    *   Change the return value of `TextVectorization.get_vocabulary()` from
5456        `byte` to `string`. Users who previously were calling 'decode' on the
5457        output of this method should no longer need to do so.
5458*   Introduce new Keras dataset generation utilities :
5459    *   **[`image_dataset_from_directory`](https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image_dataset_from_directory)**
5460        is a utility based on `tf.data.Dataset`, meant to replace the legacy
5461        `ImageDataGenerator`. It takes you from a structured directory of images
5462        to a labeled dataset, in one function call. Note that it doesn't perform
5463        image data augmentation (which is meant to be done using preprocessing
5464        layers).
5465    *   **[`text_dataset_from_directory`](https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/text_dataset_from_directory)**
5466        takes you from a structured directory of text files to a labeled
5467        dataset, in one function call.
5468    *   **[`timeseries_dataset_from_array`](https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/timeseries_dataset_from_array)**
5469        is a `tf.data.Dataset`-based replacement of the legacy
5470        `TimeseriesGenerator`. It takes you from an array of timeseries data to
5471        a dataset of shifting windows with their targets.
5472*   Added
5473    [`experimental_steps_per_execution`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/keras/Model?hl=en#compile)
5474    arg to `model.compile` to indicate the number of batches to run per
5475    `tf.function` call. This can speed up Keras Models on TPUs up to 3x.
5476*   Extends `tf.keras.layers.Lambda` layers to support multi-argument lambdas,
5477    and keyword arguments when calling the layer.
5478*   Functional models now get constructed if *any* tensor in a layer call's
5479    arguments/keyword arguments comes from a keras input. Previously the
5480    functional api would only work if all of the elements in the first argument
5481    to the layer came from a keras input.
5482*   Clean up `BatchNormalization` layer's `trainable` property to act like
5483    standard python state when it's used inside `tf.functions` (frozen at
5484    tracing time), instead of acting like a pseudo-variable whose updates *kind
5485    of sometimes* get reflected in already-traced `tf.function` traces.
5486*   Add the `Conv1DTranspose` layer.
5487*   Refine the semantics of `SensitivitySpecificityBase` derived metrics. See
5488    the updated API docstrings for
5489    [`tf.keras.metrics.SensitivityAtSpecificity`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/keras/metrics/SensitivityAtSpecificity)
5490    and
5491    [`tf.keras.metrics.SpecificityAtSensitivty`](https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/keras/metrics/SpecificityAtSensitivity).
5492
5493### `tf.lite`:
5494
5495*   Converter
5496    *   Restored `inference_input_type` and `inference_output_type` flags in TF
5497        2.x TFLiteConverter (backward compatible with TF 1.x) to support integer
5498        (tf.int8, tf.uint8) input and output types in post training full integer
5499        quantized models.
5500    *   Added support for converting and resizing models with dynamic
5501        (placeholder) dimensions. Previously, there was only limited support for
5502        dynamic batch size, and even that did not guarantee that the model could
5503        be properly resized at runtime.
5504        *   Enabled experimental support for a new quantization mode with 16-bit
5505            activations and 8-bit weights. See
5506            `lite.OpsSet.EXPERIMENTAL_TFLITE_BUILTINS_ACTIVATIONS_INT16_WEIGHTS_INT8`.
5507*   CPU
5508    *   Fix an issue w/ dynamic weights and `Conv2D` on x86.
5509    *   Add a runtime Android flag for enabling `XNNPACK` for optimized CPU
5510        performance.
5511    *   Add a runtime iOS flag for enabling `XNNPACK` for optimized CPU
5512        performance.
5513    *   Add a compiler flag to enable building a TFLite library that applies
5514        `XNNPACK` delegate automatically when the model has a `fp32` operation.
5515*   GPU
5516    *   Allow GPU acceleration starting with internal graph nodes
5517    *   Experimental support for quantized models with the Android GPU delegate
5518    *   Add GPU delegate whitelist.
5519    *   Rename GPU whitelist -> compatibility (list).
5520    *   Improve GPU compatibility list entries from crash reports.
5521*   NNAPI
5522    *   Set default value for
5523        `StatefulNnApiDelegate::Options::max_number_delegated_partitions` to 3.
5524    *   Add capability to disable `NNAPI` CPU and check `NNAPI` Errno.
5525    *   Fix crashes when using `NNAPI` with target accelerator specified with
5526        model containing Conv2d or FullyConnected or LSTM nodes with quantized
5527        weights.
5528    *   Fix `ANEURALNETWORKS_BAD_DATA` execution failures with
5529        `sum`/`max`/`min`/`reduce` operations with `scalar` inputs.
5530*   Hexagon
5531    *   TFLite Hexagon Delegate out of experimental.
5532    *   Experimental `int8` support for most hexagon ops.
5533    *   Experimental per-channel quant support for `conv` in Hexagon delegate.
5534    *   Support dynamic batch size in C++ API.
5535*   CoreML
5536    *   Opensource CoreML delegate
5537*   Misc
5538    *   Enable building Android TFLite targets on Windows
5539    *   Add support for `BatchMatMul`.
5540    *   Add support for `half_pixel_centers` with `ResizeNearestNeighbor`.
5541    *   Add 3D support for `BatchToSpaceND`.
5542    *   Add 5D support for `BroadcastSub`, `Maximum`, `Minimum`, `Transpose` and
5543        `BroadcastDiv`.
5544    *   Rename `kTfLiteActRelu1` to `kTfLiteActReluN1To1`.
5545    *   Enable flex delegate on tensorflow.lite.Interpreter Python package.
5546    *   Add `Buckettize`, `SparseCross` and `BoostedTreesBucketize` to the flex
5547        whitelist.
5548    *   Add support for selective registration of flex ops.
5549    *   Add missing kernels for flex delegate whitelisted ops.
5550    *   Fix issue when using direct `ByteBuffer` inputs with graphs that have
5551        dynamic shapes.
5552    *   Fix error checking supported operations in a model containing
5553        `HardSwish`.
5554
5555### Packaging Support
5556
5557*   Added `tf.sysconfig.get_build_info()`. Returns a dict that describes the
5558    build environment of the currently installed TensorFlow package, e.g. the
5559    NVIDIA CUDA and NVIDIA CuDNN versions used when TensorFlow was built.
5560
5561### Profiler
5562
5563*   Fix a subtle use-after-free issue in `XStatVisitor::RefValue()`.
5564
5565### TPU Enhancements
5566
5567*   Adds 3D mesh support in TPU configurations ops.
5568*   Added TPU code for `FTRL` with `multiply_linear_by_lr`.
5569*   Silently adds a new file system registry at `gstpu`.
5570*   Support `restartType` in cloud tpu client.
5571*   Depend on a specific version of google-api-python-client.
5572*   Fixes apiclient import.
5573
5574### Tracing and Debugging
5575
5576*   Add a `TFE_Py_Execute` traceme.
5577
5578### XLA Support
5579
5580*   Implement stable `argmin` and `argmax`
5581
5582## Thanks to our Contributors
5583
5584This release contains contributions from many people at Google, as well as:
5585
5586902449@58880@bigcat_chen@ASIC, Abdul Baseer Khan, Abhineet Choudhary, Abolfazl
5587Shahbazi, Adam Hillier, ag.ramesh, Agoniii, Ajay P, Alex Hoffman, Alexander
5588Bayandin, Alexander Grund, Alexandre Abadie, Alexey Rogachevskiy, amoitra,
5589Andrew Stevens, Angus-Luo, Anshuman Tripathy, Anush Elangovan, Artem Mavrin,
5590Ashutosh Hathidara, autoih, Ayushman Kumar, ayushmankumar7, Bairen Yi, Bas
5591Aarts, Bastian Eichenberger, Ben Barsdell, bhack, Bharat Raghunathan, Biagio
5592Montaruli, Bigcat-Himax, blueyi, Bryan Cutler, Byambaa, Carlos
5593Hernandez-Vaquero, Chen Lei, Chris Knorowski, Christian Clauss, chuanqiw,
5594CuiYifeng, Daniel Situnayake, Daria Zhuravleva, Dayananda-V, Deven Desai, Devi
5595Sandeep Endluri, Dmitry Zakharov, Dominic Jack, Duncan Riach, Edgar Liberis,
5596Ehsan Toosi, ekuznetsov139, Elena Zhelezina, Eugene Kuznetsov, Eugene
5597Mikhantiev, Evgenii Zheltonozhskii, Fabio Di Domenico, Fausto Morales, Fei Sun,
5598feihugis, Felix E. Klee, flyingcat, Frederic Bastien, Fredrik Knutsson, frreiss,
5599fsx950223, ganler, Gaurav Singh, Georgios Pinitas, Gian Marco Iodice, Giorgio
5600Arena, Giuseppe Rossini, Gregory Keith, Guozhong Zhuang, gurushantj, Hahn
5601Anselm, Harald Husum, Harjyot Bagga, Hristo Vrigazov, Ilya Persky, Ir1d, Itamar
5602Turner-Trauring, jacco, Jake Tae, Janosh Riebesell, Jason Zaman, jayanth, Jeff
5603Daily, Jens Elofsson, Jinzhe Zeng, JLZ, Jonas Skog, Jonathan Dekhtiar, Josh
5604Meyer, Joshua Chia, Judd, justkw, Kaixi Hou, Kam D Kasravi, Kamil Rakoczy, Karol
5605Gugala, Kayou, Kazuaki Ishizaki, Keith Smiley, Khaled Besrour, Kilaru Yasaswi
5606Sri Chandra Gandhi, Kim, Young Soo, Kristian Hartikainen, Kwabena W. Agyeman,
5607Leslie-Fang, Leslie-Fang-Intel, Li, Guizi, Lukas Geiger, Lutz Roeder, M\U00E5Ns
5608Nilsson, Mahmoud Abuzaina, Manish, Marcel Koester, Marcin Sielski, marload,
5609Martin Jul, Matt Conley, mdfaijul, Meng, Peng, Meteorix, Michael Käufl,
5610Michael137, Milan Straka, Mitchell Vitez, Ml-0, Mokke Meguru, Mshr-H, nammbash,
5611Nathan Luehr, naumkin, Neeraj Bhadani, ngc92, Nick Morgan, nihui, Niranjan
5612Hasabnis, Niranjan Yadla, Nishidha Panpaliya, Oceania2018, oclyke, Ouyang Jin,
5613OverLordGoldDragon, Owen Lyke, Patrick Hemmer, Paul Andrey, Peng Sun,
5614periannath, Phil Pearl, Prashant Dandriyal, Prashant Kumar, Rahul Huilgol, Rajan
5615Singh, Rajeshwar Reddy T, rangjiaheng, Rishit Dagli, Rohan Reddy, rpalakkal,
5616rposts, Ruan Kunliang, Rushabh Vasani, Ryohei Ikegami, Semun Lee, Seo-Inyoung,
5617Sergey Mironov, Sharada Shiddibhavi, ShengYang1, Shraiysh Vaishay, Shunya Ueta,
5618shwetaoj, Siyavash Najafzade, Srinivasan Narayanamoorthy, Stephan Uphoff,
5619storypku, sunchenggen, sunway513, Sven-Hendrik Haase, Swapnil Parekh, Tamas Bela
5620Feher, Teng Lu, tigertang, tomas, Tomohiro Ubukata, tongxuan.ltx, Tony Tonev,
5621Tzu-Wei Huang, Téo Bouvard, Uday Bondhugula, Vaibhav Jade, Vijay Tadikamalla,
5622Vikram Dattu, Vincent Abriou, Vishnuvardhan Janapati, Vo Van Nghia, VoVAllen,
5623Will Battel, William D. Irons, wyzhao, Xiaoming (Jason) Cui, Xiaoquan Kong,
5624Xinan Jiang, xutianming, Yair Ehrenwald, Yasir Modak, Yasuhiro Matsumoto, Yixing
5625Fu, Yong Tang, Yuan Tang, zhaozheng09, Zilin Zhu, zilinzhu, 张志豪
5626
5627# Release 2.1.1
5628
5629## Bug Fixes and Other Changes
5630
5631*   Updates `sqlite3` to `3.31.01` to handle
5632    [CVE-2019-19880](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19880),
5633    [CVE-2019-19244](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19244)
5634    and
5635    [CVE-2019-19645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19645)
5636*   Updates `curl` to `7.69.1` to handle
5637    [CVE-2019-15601](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15601)
5638*   Updates `libjpeg-turbo` to `2.0.4` to handle
5639    [CVE-2018-19664](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19664),
5640    [CVE-2018-20330](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20330)
5641    and
5642    [CVE-2019-13960](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-13960)
5643*   Updates Apache Spark to `2.4.5` to handle
5644    [CVE-2019-10099](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-10099),
5645    [CVE-2018-17190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-17190)
5646    and
5647    [CVE-2018-11770](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-11770)
5648*   Fixes a versioning bug which causes Keras layers from TF 1.x to be used
5649    instead of those from TF 2.x
5650
5651# Release 2.0.2
5652
5653## Bug Fixes and Other Changes
5654
5655*   Updates `sqlite3` to `3.31.01` to handle
5656    [CVE-2019-19880](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19880),
5657    [CVE-2019-19244](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19244)
5658    and
5659    [CVE-2019-19645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19645)
5660*   Updates `curl` to `7.69.1` to handle
5661    [CVE-2019-15601](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15601)
5662*   Updates `libjpeg-turbo` to `2.0.4` to handle
5663    [CVE-2018-19664](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19664),
5664    [CVE-2018-20330](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20330)
5665    and
5666    [CVE-2019-13960](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-13960)
5667*   Updates Apache Spark to `2.4.5` to handle
5668    [CVE-2019-10099](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-10099),
5669    [CVE-2018-17190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-17190)
5670    and
5671    [CVE-2018-11770](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-11770)
5672
5673# Release 1.15.3
5674
5675## Bug Fixes and Other Changes
5676
5677*   Updates `sqlite3` to `3.31.01` to handle
5678    [CVE-2019-19880](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19880),
5679    [CVE-2019-19244](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19244)
5680    and
5681    [CVE-2019-19645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19645)
5682*   Updates `curl` to `7.69.1` to handle
5683    [CVE-2019-15601](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15601)
5684*   Updates `libjpeg-turbo` to `2.0.4` to handle
5685    [CVE-2018-19664](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19664),
5686    [CVE-2018-20330](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20330)
5687    and
5688    [CVE-2019-13960](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-13960)
5689*   Updates Apache Spark to `2.4.5` to handle
5690    [CVE-2019-10099](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-10099),
5691    [CVE-2018-17190](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-17190)
5692    and
5693    [CVE-2018-11770](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-11770)
5694
5695# Release 2.2.0
5696
5697TensorFlow 2.2 discontinues support for Python 2,
5698[previously announced](https://groups.google.com/a/tensorflow.org/d/msg/announce/gVwS5RC8mds/dCt1ka2XAAAJ)
5699as following
5700[Python 2's EOL on January 1, 2020](https://www.python.org/dev/peps/pep-0373/#update).
5701
5702Coinciding with this change, new releases of
5703[TensorFlow's Docker images](https://hub.docker.com/r/tensorflow/tensorflow/)
5704provide Python 3 exclusively. Because all images now use Python 3, Docker tags
5705containing `-py3` will no longer be provided and existing `-py3` tags like
5706`latest-py3` will not be updated.
5707
5708## Major Features and Improvements
5709
5710*   Replaced the scalar type for string tensors from `std::string` to
5711    `tensorflow::tstring` which is now ABI stable.
5712*   A new Profiler for TF 2 for CPU/GPU/TPU. It offers both device and host
5713    performance analysis, including input pipeline and TF Ops. Optimization
5714    advisory is provided whenever possible. Please see
5715    [this tutorial](https://www.tensorflow.org/tensorboard/tensorboard_profiling_keras)
5716    and [guide](https://www.tensorflow.org/guide/profiler) for usage guidelines.
5717*   Export C++ functions to Python using `pybind11` as opposed to `SWIG` as a
5718    part of our
5719    [deprecation of swig efforts](https://github.com/tensorflow/community/blob/master/rfcs/20190208-pybind11.md).
5720*   `tf.distribute`:
5721    *   Support added for global sync `BatchNormalization` by using the newly
5722        added `tf.keras.layers.experimental.SyncBatchNormalization` layer. This
5723        layer will sync `BatchNormalization` statistics every step across all
5724        replicas taking part in sync training.
5725    *   Performance improvements for GPU multi-worker distributed training using
5726        `tf.distribute.experimental.MultiWorkerMirroredStrategy`
5727    *   Update NVIDIA `NCCL` to `2.5.7-1` for better performance and performance
5728        tuning. Please see
5729        [nccl developer guide](https://docs.nvidia.com/deeplearning/sdk/nccl-developer-guide/docs/env.html)
5730        for more information on this.
5731    *   Support gradient `allreduce` in `float16`. See this
5732        [example](https://github.com/tensorflow/models/blob/master/official/modeling/grad_utils.py)
5733        usage.
5734    *   Experimental support of
5735        [all reduce gradient packing](https://www.tensorflow.org/api_docs/python/tf/distribute/experimental/CollectiveHints)
5736        to allow overlapping gradient aggregation with backward path
5737        computation.
5738    *   Deprecated `experimental_run_v2` method for distribution strategies and
5739        renamed the method `run` as it is no longer experimental.
5740    *   Add CompositeTensor support for DistributedIterators. This should help
5741        prevent unnecessary function retracing and memory leaks.
5742*   `tf.keras`:
5743
5744    *   `Model.fit` major improvements:
5745        *   You can now use custom training logic with `Model.fit` by overriding
5746            `Model.train_step`.
5747        *   Easily write state-of-the-art training loops without worrying about
5748            all of the features `Model.fit` handles for you (distribution
5749            strategies, callbacks, data formats, looping logic, etc)
5750        *   See the default
5751            [`Model.train_step`](https://github.com/tensorflow/tensorflow/blob/1381fc8e15e22402417b98e3881dfd409998daea/tensorflow/python/keras/engine/training.py#L540)
5752            for an example of what this function should look like. Same applies
5753            for validation and inference via `Model.test_step` and
5754            `Model.predict_step`.
5755        *   SavedModel uses its own `Model._saved_model_inputs_spec` attr now
5756            instead of relying on `Model.inputs` and `Model.input_names`, which
5757            are no longer set for subclass Models. This attr is set in eager,
5758            `tf.function`, and graph modes. This gets rid of the need for users
5759            to manually call `Model._set_inputs` when using Custom Training
5760            Loops(CTLs).
5761        *   Dynamic shapes are supported for generators by calling the Model on
5762            the first batch we "peek" from the generator. This used to happen
5763            implicitly in `Model._standardize_user_data`. Long-term, a solution
5764            where the `DataAdapter` doesn't need to call the Model is probably
5765            preferable.
5766    *   The SavedModel format now supports all Keras built-in layers (including
5767        metrics, preprocessing layers, and stateful RNN layers)
5768    *   Update Keras batch normalization layer to use the running mean and
5769        average computation in the `fused_batch_norm`. You should see
5770        significant performance improvements when using `fused_batch_norm` in
5771        Eager mode.
5772
5773*   `tf.lite`:
5774
5775    *   Enable TFLite experimental new converter by default.
5776
5777*   XLA
5778
5779    *   XLA now builds and works on windows. All prebuilt packages come with XLA
5780        available.
5781    *   XLA can be
5782        [enabled for a `tf.function`](https://www.tensorflow.org/xla#explicit_compilation_with_tffunction)
5783        with “compile or throw exception” semantics on CPU and GPU.
5784
5785## Breaking Changes
5786
5787*   `tf.keras`:
5788    *   In `tf.keras.applications` the name of the "top" layer has been
5789        standardized to "predictions". This is only a problem if your code
5790        relies on the exact name of the layer.
5791    *   Huber loss function has been updated to be consistent with other Keras
5792        losses. It now computes mean over the last axis of per-sample losses
5793        before applying the reduction function.
5794*   AutoGraph no longer converts functions passed to `tf.py_function`,
5795    `tf.py_func` and `tf.numpy_function`.
5796*   Deprecating `XLA_CPU` and `XLA_GPU` devices with this release.
5797*   Increasing the minimum bazel version to build TF to 2.0.0 to use Bazel's
5798    `cc_experimental_shared_library`.
5799*   Keras compile/fit behavior for functional and subclassed models have been
5800    unified. Model properties such as `metrics`, `metrics_names` will now be
5801    available only after **training/evaluating the model on actual data** for
5802    functional models. `metrics` will **now include** model `loss` and output
5803    losses.`loss_functions` property has been removed from the model. This was
5804    an undocumented property that was accidentally public and has now been
5805    removed.
5806
5807## Known Caveats
5808
5809*   The current TensorFlow release now **requires**
5810    [gast](https://pypi.org/project/gast/) version 0.3.3.
5811
5812## Bug Fixes and Other Changes
5813
5814*   `tf.data`:
5815    *   Removed `autotune_algorithm` from experimental optimization options.
5816*   TF Core:
5817    *   `tf.constant` always creates CPU tensors irrespective of the current
5818        device context.
5819    *   Eager `TensorHandles` maintain a list of mirrors for any copies to local
5820        or remote devices. This avoids any redundant copies due to op execution.
5821    *   For `tf.Tensor` & `tf.Variable`, `.experimental_ref()` is no longer
5822        experimental and is available as simply `.ref()`.
5823    *   `pfor/vectorized_map`: Added support for vectorizing 56 more ops.
5824        Vectorizing `tf.cond` is also supported now.
5825    *   Set as much partial shape as we can infer statically within the gradient
5826        impl of the gather op.
5827    *   Gradient of `tf.while_loop` emits `StatelessWhile` op if `cond` and body
5828        functions are stateless. This allows multiple gradients while ops to run
5829        in parallel under distribution strategy.
5830    *   Speed up `GradientTape` in eager mode by auto-generating list of op
5831        inputs/outputs which are unused and hence not cached for gradient
5832        functions.
5833    *   Support `back_prop=False` in `while_v2` but mark it as deprecated.
5834    *   Improve error message when attempting to use `None` in data-dependent
5835        control flow.
5836    *   Add `RaggedTensor.numpy()`.
5837    *   Update `RaggedTensor.__getitem__` to preserve uniform dimensions & allow
5838        indexing into uniform dimensions.
5839    *   Update `tf.expand_dims` to always insert the new dimension as a
5840        non-ragged dimension.
5841    *   Update `tf.embedding_lookup` to use `partition_strategy` and `max_norm`
5842        when `ids` is ragged.
5843    *   Allow `batch_dims==rank(indices)` in `tf.gather`.
5844    *   Add support for bfloat16 in `tf.print`.
5845*   `tf.distribute`:
5846    *   Support `embedding_column` with variable-length input features for
5847        `MultiWorkerMirroredStrategy`.
5848*   `tf.keras`:
5849    *   Added `experimental_aggregate_gradients` argument to
5850        `tf.keras.optimizer.Optimizer.apply_gradients`. This allows custom
5851        gradient aggregation and processing aggregated gradients in custom
5852        training loop.
5853    *   Allow `pathlib.Path` paths for loading models via Keras API.
5854*   `tf.function`/AutoGraph:
5855    *   AutoGraph is now available in `ReplicaContext.merge_call`,
5856        `Strategy.extended.update` and `Strategy.extended.update_non_slot`.
5857    *   Experimental support for shape invariants has been enabled in
5858        `tf.function`. See the API docs for
5859        `tf.autograph.experimental.set_loop_options` for additional info.
5860    *   AutoGraph error messages now exclude frames corresponding to APIs
5861        internal to AutoGraph.
5862    *   Improve shape inference for `tf.function` input arguments to unlock more
5863        Grappler optimizations in TensorFlow 2.x.
5864    *   Improve automatic control dependency management of resources by allowing
5865        resource reads to occur in parallel and synchronizing only on writes.
5866    *   Fix execution order of multiple stateful calls to `experimental_run_v2`
5867        in `tf.function`.
5868    *   You can now iterate over `RaggedTensors` using a for loop inside
5869        `tf.function`.
5870*   `tf.lite`:
5871    *   Migrated the `tf.lite` C inference API out of experimental into lite/c.
5872    *   Add an option to disallow `NNAPI` CPU / partial acceleration on Android
5873        10
5874    *   TFLite Android AARs now include the C headers and APIs are required to
5875        use TFLite from native code.
5876    *   Refactors the delegate and delegate kernel sources to allow usage in the
5877        linter.
5878    *   Limit delegated ops to actually supported ones if a device name is
5879        specified or `NNAPI` CPU Fallback is disabled.
5880    *   TFLite now supports `tf.math.reciprocal1` op by lowering to `tf.div op`.
5881    *   TFLite's unpack op now supports boolean tensor inputs.
5882    *   Microcontroller and embedded code moved from experimental to main
5883        TensorFlow Lite folder
5884    *   Check for large TFLite tensors.
5885    *   Fix GPU delegate crash with C++17.
5886    *   Add 5D support to TFLite `strided_slice`.
5887    *   Fix error in delegation of `DEPTH_TO_SPACE` to `NNAPI` causing op not to
5888        be accelerated.
5889    *   Fix segmentation fault when running a model with LSTM nodes using
5890        `NNAPI` Delegate
5891    *   Fix `NNAPI` delegate failure when an operand for Maximum/Minimum
5892        operation is a scalar.
5893    *   Fix `NNAPI` delegate failure when Axis input for reduce operation is a
5894        scalar.
5895    *   Expose option to limit the number of partitions that will be delegated
5896        to `NNAPI`.
5897    *   If a target accelerator is specified, use its feature level to determine
5898        operations to delegate instead of SDK version.
5899*   `tf.random`:
5900    *   Various random number generation improvements:
5901    *   Add a fast path for default `random_uniform`
5902    *   `random_seed` documentation improvement.
5903    *   `RandomBinomial` broadcasts and appends the sample shape to the left
5904        rather than the right.
5905    *   Added `tf.random.stateless_binomial`, `tf.random.stateless_gamma`,
5906        `tf.random.stateless_poisson`
5907    *   `tf.random.stateless_uniform` now supports unbounded sampling of `int`
5908        types.
5909*   Math and Linear Algebra:
5910    *   Add `tf.linalg.LinearOperatorTridiag`.
5911    *   Add `LinearOperatorBlockLowerTriangular`
5912    *   Add broadcasting support to
5913        tf.linalg.triangular_solve[#26204](https://github.com/tensorflow/tensorflow/issues/26204),
5914        tf.math.invert_permutation.
5915    *   Add `tf.math.sobol_sample` op.
5916    *   Add `tf.math.xlog1py`.
5917    *   Add `tf.math.special.{dawsn,expi,fresnel_cos,fresnel_sin,spence}`.
5918    *   Add a Modified Discrete Cosine Transform (MDCT) and its inverse to
5919        `tf.signal`.
5920*   TPU Enhancements:
5921    *   Refactor `TpuClusterResolver` to move shared logic to a separate pip
5922        package.
5923    *   Support configuring TPU software version from cloud tpu client.
5924    *   Allowed TPU embedding weight decay factor to be multiplied by learning
5925        rate.
5926*   XLA Support:
5927    *   Add standalone XLA AOT runtime target + relevant .cc sources to pip
5928        package.
5929    *   Add check for memory alignment to MemoryAllocation::MemoryAllocation()
5930        on 32-bit ARM. This ensures a deterministic early exit instead of a hard
5931        to debug bus error later.
5932    *   `saved_model_cli aot_compile_cpu` allows you to compile saved models to
5933        XLA header+object files and include them in your C++ programs.
5934    *   Enable `Igamma`, `Igammac` for XLA.
5935*   Deterministic Op Functionality:
5936    *   XLA reduction emitter is deterministic when the environment variable
5937        `TF_DETERMINISTIC_OPS` is set to "true" or "1". This extends
5938        deterministic `tf.nn.bias_add` back-prop functionality (and therefore
5939        also deterministic back-prop of bias-addition in Keras layers) to
5940        include when XLA JIT compilation is enabled.
5941    *   Fix problem, when running on a CUDA GPU and when either environment
5942        variable `TF_DETERMINISTIC_OPS` or environment variable
5943        `TF_CUDNN_DETERMINISTIC` is set to "true" or "1", in which some layer
5944        configurations led to an exception with the message "No algorithm
5945        worked!"
5946*   Tracing and Debugging:
5947    *   Add source, destination name to `_send` traceme to allow easier
5948        debugging.
5949    *   Add traceme event to `fastpathexecute`.
5950*   Other:
5951    *   Fix an issue with AUC.reset_states for multi-label AUC
5952        [#35852](https://github.com/tensorflow/tensorflow/issues/35852)
5953    *   Fix the TF upgrade script to not delete files when there is a parsing
5954        error and the output mode is `in-place`.
5955    *   Move `tensorflow/core:framework/*_pyclif` rules to
5956        `tensorflow/core/framework:*_pyclif`.
5957
5958## Thanks to our Contributors
5959
5960This release contains contributions from many people at Google, as well as:
5961
5962372046933, 8bitmp3, aaronhma, Abin Shahab, Aditya Patwardhan, Agoniii, Ahti
5963Kitsik, Alan Yee, Albin Joy, Alex Hoffman, Alexander Grund, Alexandre E.
5964Eichenberger, Amit Kumar Jaiswal, amoitra, Andrew Anderson, Angus-Luo, Anthony
5965Barbier, Anton Kachatkou, Anuj Rawat, archis, Arpan-Dhatt, Arvind Sundararajan,
5966Ashutosh Hathidara, autoih, Bairen Yi, Balint Cristian, Bas Aarts, BashirSbaiti,
5967Basit Ayantunde, Ben Barsdell, Benjamin Gaillard, boron, Brett Koonce, Bryan
5968Cutler, Christian Goll, Christian Sachs, Clayne Robison, comet, Daniel Falbel,
5969Daria Zhuravleva, darsh8200, David Truby, Dayananda-V, deepakm, Denis Khalikov,
5970Devansh Singh, Dheeraj R Reddy, Diederik Van Liere, Diego Caballero, Dominic
5971Jack, dothinking, Douman, Drake Gens, Duncan Riach, Ehsan Toosi, ekuznetsov139,
5972Elena Zhelezina, elzino, Ending2015a, Eric Schweitz, Erik Zettel, Ethan Saadia,
5973Eugene Kuznetsov, Evgeniy Zheltonozhskiy, Ewout Ter Hoeven, exfalso, FAIJUL,
5974Fangjun Kuang, Fei Hu, Frank Laub, Frederic Bastien, Fredrik Knutsson, frreiss,
5975Frédéric Rechtenstein, fsx950223, Gaurav Singh, gbaned, George Grzegorz
5976Pawelczak, George Sterpu, Gian Marco Iodice, Giorgio Arena, Hans Gaiser, Hans
5977Pabst, Haoyu Wu, Harry Slatyer, hsahovic, Hugo, Hugo Sjöberg, IrinaM21, jacco,
5978Jake Tae, Jean-Denis Lesage, Jean-Michel Gorius, Jeff Daily, Jens Elofsson,
5979Jerry Shih, jerryyin, Jin Mingjian, Jinjing Zhou, JKIsaacLee, jojimonv, Jonathan
5980Dekhtiar, Jose Ignacio Gomez, Joseph-Rance, Judd, Julian Gross, Kaixi Hou,
5981Kaustubh Maske Patil, Keunwoo Choi, Kevin Hanselman, Khor Chean Wei, Kilaru
5982Yasaswi Sri Chandra Gandhi, Koan-Sin Tan, Koki Ibukuro, Kristian Holsheimer,
5983kurileo, Lakshay Tokas, Lee Netherton, leike666666, Leslie-Fang-Intel, Li,
5984Guizi, LIUJIAN435, Lukas Geiger, Lyo Nguyen, madisetti, Maher Jendoubi, Mahmoud
5985Abuzaina, Manuel Freiberger, Marcel Koester, Marco Jacopo Ferrarotti, Markus
5986Franke, marload, Mbah-Javis, mbhuiyan, Meng Zhang, Michael Liao,
5987MichaelKonobeev, Michal Tarnowski, Milan Straka, minoring, Mohamed Nour
5988Abouelseoud, MoussaMM, Mrinal Jain, mrTsjolder, Måns Nilsson, Namrata Bhave,
5989Nicholas Gao, Niels Ole Salscheider, nikochiko, Niranjan Hasabnis, Nishidha
5990Panpaliya, nmostafa, Noah Trenaman, nuka137, Officium, Owen L - Sfe, Pallavi G,
5991Paul Andrey, Peng Sun, Peng Wu, Phil Pearl, PhilipMay, pingsutw, Pooya Davoodi,
5992PragmaTwice, pshiko, Qwerty71, R Gomathi, Rahul Huilgol, Richard Xiao, Rick
5993Wierenga, Roberto Rosmaninho, ruchit2801, Rushabh Vasani, Sami, Sana Damani,
5994Sarvesh Dubey, Sasan Jafarnejad, Sergii Khomenko, Shane Smiskol, Shaochen Shi,
5995sharkdtu, Shawn Presser, ShengYang1, Shreyash Patodia, Shyam Sundar Dhanabalan,
5996Siju Samuel, Somyajit Chakraborty Sam, Srihari Humbarwadi,
5997srinivasan.narayanamoorthy, Srishti Yadav, Steph-En-M, Stephan Uphoff, Stephen
5998Mugisha, SumanSudhir, Taehun Kim, Tamas Bela Feher, TengLu, Tetragramm, Thierry
5999Herrmann, Tian Jin, tigertang, Tom Carchrae, Tom Forbes, Trent Lo, Victor Peng,
6000vijayphoenix, Vincent Abriou, Vishal Bhola, Vishnuvardhan Janapati, vladbataev,
6001VoVAllen, Wallyss Lima, Wen-Heng (Jack) Chung, wenxizhu, William D. Irons,
6002William Zhang, Xiaoming (Jason) Cui, Xiaoquan Kong, Xinan Jiang, Yasir Modak,
6003Yasuhiro Matsumoto, Yaxun (Sam) Liu, Yong Tang, Ytyt-Yt, yuan, Yuan Mingshuai,
6004Yuan Tang, Yuki Ueda, Yusup, zhangshijin, zhuwenxi
6005
6006# Release 2.0.1
6007
6008## Bug Fixes and Other Changes
6009
6010*   Fixes a security vulnerability where converting a Python string to a
6011    `tf.float16` value produces a segmentation fault
6012    ([CVE-2020-5215](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-5215))
6013*   Updates `curl` to `7.66.0` to handle
6014    [CVE-2019-5482](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5482)
6015    and
6016    [CVE-2019-5481](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5481)
6017*   Updates `sqlite3` to `3.30.01` to handle
6018    [CVE-2019-19646](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19646),
6019    [CVE-2019-19645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19645)
6020    and
6021    [CVE-2019-16168](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-16168)
6022
6023# Release 1.15.2
6024
6025## Bug Fixes and Other Changes
6026
6027*   Fixes a security vulnerability where converting a Python string to a
6028    `tf.float16` value produces a segmentation fault
6029    ([CVE-2020-5215](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-5215))
6030*   Updates `curl` to `7.66.0` to handle
6031    [CVE-2019-5482](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5482)
6032    and
6033    [CVE-2019-5481](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5481)
6034*   Updates `sqlite3` to `3.30.01` to handle
6035    [CVE-2019-19646](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19646),
6036    [CVE-2019-19645](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19645)
6037    and
6038    [CVE-2019-16168](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-16168)
6039
6040# Release 2.1.0
6041
6042TensorFlow 2.1 will be the last TF release supporting Python 2. Python 2 support
6043[officially ends an January 1, 2020](https://www.python.org/dev/peps/pep-0373/#update).
6044[As announced earlier](https://groups.google.com/a/tensorflow.org/d/msg/announce/gVwS5RC8mds/dCt1ka2XAAAJ),
6045TensorFlow will also stop supporting Python 2 starting January 1, 2020, and no
6046more releases are expected in 2019.
6047
6048## Major Features and Improvements
6049
6050*   The `tensorflow` pip package now includes GPU support by default (same as
6051    `tensorflow-gpu`) for both Linux and Windows. This runs on machines with and
6052    without NVIDIA GPUs. `tensorflow-gpu` is still available, and CPU-only
6053    packages can be downloaded at `tensorflow-cpu` for users who are concerned
6054    about package size.
6055*   **Windows users:** Officially-released `tensorflow` Pip packages are now
6056    built with Visual Studio 2019 version 16.4 in order to take advantage of the
6057    new `/d2ReducedOptimizeHugeFunctions` compiler flag. To use these new
6058    packages, you must install "Microsoft Visual C++ Redistributable for Visual
6059    Studio 2015, 2017 and 2019", available from Microsoft's website
6060    [here](https://support.microsoft.com/help/2977003/the-latest-supported-visual-c-downloads).
6061    *   This does not change the minimum required version for building
6062        TensorFlow from source on Windows, but builds enabling
6063        `EIGEN_STRONG_INLINE` can take over 48 hours to compile without this
6064        flag. Refer to `configure.py` for more information about
6065        `EIGEN_STRONG_INLINE` and `/d2ReducedOptimizeHugeFunctions`.
6066    *   If either of the required DLLs, `msvcp140.dll` (old) or `msvcp140_1.dll`
6067        (new), are missing on your machine, `import tensorflow` will print a
6068        warning message.
6069*   The `tensorflow` pip package is built with CUDA 10.1 and cuDNN 7.6.
6070*   `tf.keras`
6071    *   Experimental support for mixed precision is available on GPUs and Cloud
6072        TPUs. See
6073        [usage guide](https://www.tensorflow.org/guide/keras/mixed_precision).
6074    *   Introduced the `TextVectorization` layer, which takes as input raw
6075        strings and takes care of text standardization, tokenization, n-gram
6076        generation, and vocabulary indexing. See this
6077        [end-to-end text classification example](https://colab.research.google.com/drive/1RvCnR7h0_l4Ekn5vINWToI9TNJdpUZB3).
6078    *   Keras `.compile` `.fit` `.evaluate` and `.predict` are allowed to be
6079        outside of the DistributionStrategy scope, as long as the model was
6080        constructed inside of a scope.
6081    *   Experimental support for Keras `.compile`, `.fit`, `.evaluate`, and
6082        `.predict` is available for Cloud TPUs, Cloud TPU, for all types of
6083        Keras models (sequential, functional and subclassing models).
6084    *   Automatic outside compilation is now enabled for Cloud TPUs. This allows
6085        `tf.summary` to be used more conveniently with Cloud TPUs.
6086    *   Dynamic batch sizes with DistributionStrategy and Keras are supported on
6087        Cloud TPUs.
6088    *   Support for `.fit`, `.evaluate`, `.predict` on TPU using numpy data, in
6089        addition to `tf.data.Dataset`.
6090    *   Keras reference implementations for many popular models are available in
6091        the TensorFlow
6092        [Model Garden](https://github.com/tensorflow/models/tree/master/official).
6093*   `tf.data`
6094    *   Changes rebatching for `tf.data datasets` + DistributionStrategy for
6095        better performance. Note that the dataset also behaves slightly
6096        differently, in that the rebatched dataset cardinality will always be a
6097        multiple of the number of replicas.
6098    *   `tf.data.Dataset` now supports automatic data distribution and sharding
6099        in distributed environments, including on TPU pods.
6100    *   Distribution policies for `tf.data.Dataset` can now be tuned with 1.
6101        `tf.data.experimental.AutoShardPolicy(OFF, AUTO, FILE, DATA)` 2.
6102        `tf.data.experimental.ExternalStatePolicy(WARN, IGNORE, FAIL)`
6103*   `tf.debugging`
6104    *   Add `tf.debugging.enable_check_numerics()` and
6105        `tf.debugging.disable_check_numerics()` to help debugging the root
6106        causes of issues involving infinities and `NaN`s.
6107*   `tf.distribute`
6108    *   Custom training loop support on TPUs and TPU pods is available through
6109        `strategy.experimental_distribute_dataset`,
6110        `strategy.experimental_distribute_datasets_from_function`,
6111        `strategy.experimental_run_v2`, `strategy.reduce`.
6112    *   Support for a global distribution strategy through
6113        `tf.distribute.experimental_set_strategy(),` in addition to
6114        `strategy.scope()`.
6115*   `TensorRT`
6116    *   [TensorRT 6.0](https://developer.nvidia.com/tensorrt#tensorrt-whats-new)
6117        is now supported and enabled by default. This adds support for more
6118        TensorFlow ops including Conv3D, Conv3DBackpropInputV2, AvgPool3D,
6119        MaxPool3D, ResizeBilinear, and ResizeNearestNeighbor. In addition, the
6120        TensorFlow-TensorRT python conversion API is exported as
6121        `tf.experimental.tensorrt.Converter`.
6122*   Environment variable `TF_DETERMINISTIC_OPS` has been added. When set to
6123    "true" or "1", this environment variable makes `tf.nn.bias_add` operate
6124    deterministically (i.e. reproducibly), but currently only when XLA JIT
6125    compilation is *not* enabled. Setting `TF_DETERMINISTIC_OPS` to "true" or
6126    "1" also makes cuDNN convolution and max-pooling operate deterministically.
6127    This makes Keras Conv\*D and MaxPool\*D layers operate deterministically in
6128    both the forward and backward directions when running on a CUDA-enabled GPU.
6129
6130## Breaking Changes
6131
6132*   Deletes `Operation.traceback_with_start_lines` for which we know of no
6133    usages.
6134*   Removed `id` from `tf.Tensor.__repr__()` as `id` is not useful other than
6135    internal debugging.
6136*   Some `tf.assert_*` methods now raise assertions at operation creation time
6137    if the input tensors' values are known at that time, not during the
6138    `session.run()`. This only changes behavior when the graph execution would
6139    have resulted in an error. When this happens, a noop is returned and the
6140    input tensors are marked non-feedable. In other words, if they are used as
6141    keys in `feed_dict` argument to `session.run()`, an error will be raised.
6142    Also, because some assert ops don't make it into the graph, the graph
6143    structure changes. A different graph can result in different per-op random
6144    seeds when they are not given explicitly (most often).
6145*   The following APIs are not longer experimental:
6146    `tf.config.list_logical_devices`, `tf.config.list_physical_devices`,
6147    `tf.config.get_visible_devices`, `tf.config.set_visible_devices`,
6148    `tf.config.get_logical_device_configuration`,
6149    `tf.config.set_logical_device_configuration`.
6150*   `tf.config.experimentalVirtualDeviceConfiguration` has been renamed to
6151    `tf.config.LogicalDeviceConfiguration`.
6152*   `tf.config.experimental_list_devices` has been removed, please use
6153    `tf.config.list_logical_devices`.
6154
6155## Bug Fixes and Other Changes
6156
6157*   `tf.data`
6158    *   Fixes concurrency issue with `tf.data.experimental.parallel_interleave`
6159        with `sloppy=True`.
6160    *   Add `tf.data.experimental.dense_to_ragged_batch()`.
6161    *   Extend `tf.data` parsing ops to support `RaggedTensors`.
6162*   `tf.distribute`
6163    *   Fix issue where GRU would crash or give incorrect output when a
6164        `tf.distribute.Strategy` was used.
6165*   `tf.estimator`
6166    *   Added option in `tf.estimator.CheckpointSaverHook` to not save the
6167        `GraphDef`.
6168    *   Moving the checkpoint reader from swig to pybind11.
6169*   `tf.keras`
6170    *   Export `depthwise_conv2d` in `tf.keras.backend`.
6171    *   In Keras Layers and Models, Variables in `trainable_weights`,
6172        `non_trainable_weights`, and `weights` are explicitly deduplicated.
6173    *   Keras `model.load_weights` now accepts `skip_mismatch` as an argument.
6174        This was available in external Keras, and has now been copied over to
6175        `tf.keras`.
6176    *   Fix the input shape caching behavior of Keras convolutional layers.
6177    *   `Model.fit_generator`, `Model.evaluate_generator`,
6178        `Model.predict_generator`, `Model.train_on_batch`,
6179        `Model.test_on_batch`, and `Model.predict_on_batch` methods now respect
6180        the `run_eagerly` property, and will correctly run using `tf.function`
6181        by default. Note that `Model.fit_generator`, `Model.evaluate_generator`,
6182        and `Model.predict_generator` are deprecated endpoints. They are
6183        subsumed by `Model.fit`, `Model.evaluate`, and `Model.predict` which now
6184        support generators and Sequences.
6185*   `tf.lite`
6186    *   Legalization for `NMS` ops in TFLite.
6187    *   add `narrow_range` and `axis` to `quantize_v2` and `dequantize` ops.
6188    *   Added support for `FusedBatchNormV3` in converter.
6189    *   Add an `errno`-like field to `NNAPI` delegate for detecting `NNAPI`
6190        errors for fallback behaviour.
6191    *   Refactors `NNAPI` Delegate to support detailed reason why an operation
6192        is not accelerated.
6193    *   Converts hardswish subgraphs into atomic ops.
6194*   Other
6195    *   Critical stability updates for TPUs, especially in cases where the XLA
6196        compiler produces compilation errors.
6197    *   TPUs can now be re-initialized multiple times, using
6198        `tf.tpu.experimental.initialize_tpu_system`.
6199    *   Add `RaggedTensor.merge_dims()`.
6200    *   Added new `uniform_row_length` row-partitioning tensor to
6201        `RaggedTensor`.
6202    *   Add `shape` arg to `RaggedTensor.to_tensor`; Improve speed of
6203        `RaggedTensor.to_tensor`.
6204    *   `tf.io.parse_sequence_example` and `tf.io.parse_single_sequence_example`
6205        now support ragged features.
6206    *   Fix `while_v2` with variables in custom gradient.
6207    *   Support taking gradients of V2 `tf.cond` and `tf.while_loop` using
6208        `LookupTable`.
6209    *   Fix bug where `vectorized_map` failed on inputs with unknown static
6210        shape.
6211    *   Add preliminary support for sparse CSR matrices.
6212    *   Tensor equality with `None` now behaves as expected.
6213    *   Make calls to `tf.function(f)()`, `tf.function(f).get_concrete_function`
6214        and `tf.function(f).get_initialization_function` thread-safe.
6215    *   Extend `tf.identity` to work with CompositeTensors (such as
6216        SparseTensor)
6217    *   Added more `dtypes` and zero-sized inputs to `Einsum` Op and improved
6218        its performance
6219    *   Enable multi-worker `NCCL` `all-reduce` inside functions executing
6220        eagerly.
6221    *   Added complex128 support to `RFFT`, `RFFT2D`, `RFFT3D`, `IRFFT`,
6222        `IRFFT2D`, and `IRFFT3D`.
6223    *   Add `pfor` converter for `SelfAdjointEigV2`.
6224    *   Add `tf.math.ndtri` and `tf.math.erfinv`.
6225    *   Add `tf.config.experimental.enable_mlir_bridge` to allow using MLIR
6226        compiler bridge in eager model.
6227    *   Added support for MatrixSolve on Cloud TPU / XLA.
6228    *   Added `tf.autodiff.ForwardAccumulator` for forward-mode autodiff
6229    *   Add `LinearOperatorPermutation`.
6230    *   A few performance optimizations on `tf.reduce_logsumexp`.
6231    *   Added multilabel handling to `AUC` metric
6232    *   Optimization on `zeros_like`.
6233    *   Dimension constructor now requires `None` or types with an `__index__`
6234        method.
6235    *   Add `tf.random.uniform` microbenchmark.
6236    *   Use `_protogen` suffix for proto library targets instead of
6237        `_cc_protogen` suffix.
6238    *   Moving the checkpoint reader from `swig` to `pybind11`.
6239    *   `tf.device` & `MirroredStrategy` now supports passing in a
6240        `tf.config.LogicalDevice`
6241    *   If you're building Tensorflow from source, consider using
6242        [bazelisk](https://github.com/bazelbuild/bazelisk) to automatically
6243        download and use the correct Bazel version. Bazelisk reads the
6244        `.bazelversion` file at the root of the project directory.
6245
6246## Thanks to our Contributors
6247
6248This release contains contributions from many people at Google, as well as:
6249
62508bitmp3, Aaron Ma, AbdüLhamit Yilmaz, Abhai Kollara, aflc, Ag Ramesh, Albert Z.
6251Guo, Alex Torres, amoitra, Andrii Prymostka, angeliand, Anshuman Tripathy,
6252Anthony Barbier, Anton Kachatkou, Anubh-V, Anuja Jakhade, Artem Ryabov, autoih,
6253Bairen Yi, Bas Aarts, Basit Ayantunde, Ben Barsdell, Bhavani Subramanian, Brett
6254Koonce, candy.dc, Captain-Pool, caster, cathy, Chong Yan, Choong Yin Thong,
6255Clayne Robison, Colle, Dan Ganea, David Norman, David Refaeli, dengziming, Diego
6256Caballero, Divyanshu, djshen, Douman, Duncan Riach, EFanZh, Elena Zhelezina,
6257Eric Schweitz, Evgenii Zheltonozhskii, Fei Hu, fo40225, Fred Reiss, Frederic
6258Bastien, Fredrik Knutsson, fsx950223, fwcore, George Grzegorz Pawelczak, George
6259Sterpu, Gian Marco Iodice, Giorgio Arena, giuros01, Gomathi Ramamurthy, Guozhong
6260Zhuang, Haifeng Jin, Haoyu Wu, HarikrishnanBalagopal, HJYOO, Huang Chen-Yi,
6261Ilham Firdausi Putra, Imran Salam, Jared Nielsen, Jason Zaman, Jasper Vicenti,
6262Jeff Daily, Jeff Poznanovic, Jens Elofsson, Jerry Shih, jerryyin, Jesper
6263Dramsch, jim.meyer, Jongwon Lee, Jun Wan, Junyuan Xie, Kaixi Hou, kamalkraj, Kan
6264Chen, Karthik Muthuraman, Keiji Ariyama, Kevin Rose, Kevin Wang, Koan-Sin Tan,
6265kstuedem, Kwabena W. Agyeman, Lakshay Tokas, latyas, Leslie-Fang-Intel, Li,
6266Guizi, Luciano Resende, Lukas Folle, Lukas Geiger, Mahmoud Abuzaina, Manuel
6267Freiberger, Mark Ryan, Martin Mlostek, Masaki Kozuki, Matthew Bentham, Matthew
6268Denton, mbhuiyan, mdfaijul, Muhwan Kim, Nagy Mostafa, nammbash, Nathan Luehr,
6269Nathan Wells, Niranjan Hasabnis, Oleksii Volkovskyi, Olivier Moindrot, olramde,
6270Ouyang Jin, OverLordGoldDragon, Pallavi G, Paul Andrey, Paul Wais, pkanwar23,
6271Pooya Davoodi, Prabindh Sundareson, Rajeshwar Reddy T, Ralovich, Kristof,
6272Refraction-Ray, Richard Barnes, richardbrks, Robert Herbig, Romeo Kienzler, Ryan
6273Mccormick, saishruthi, Saket Khandelwal, Sami Kama, Sana Damani, Satoshi Tanaka,
6274Sergey Mironov, Sergii Khomenko, Shahid, Shawn Presser, ShengYang1, Siddhartha
6275Bagaria, Simon Plovyt, skeydan, srinivasan.narayanamoorthy, Stephen Mugisha,
6276sunway513, Takeshi Watanabe, Taylor Jakobson, TengLu, TheMindVirus, ThisIsIsaac,
6277Tim Gates, Timothy Liu, Tomer Gafner, Trent Lo, Trevor Hickey, Trevor Morris,
6278vcarpani, Wei Wang, Wen-Heng (Jack) Chung, wenshuai, Wenshuai-Xiaomi, wenxizhu,
6279william, William D. Irons, Xinan Jiang, Yannic, Yasir Modak, Yasuhiro Matsumoto,
6280Yong Tang, Yongfeng Gu, Youwei Song, Zaccharie Ramzi, Zhang, Zhenyu Guo, 王振华
6281(Zhenhua Wang), 韩董, 이중건 Isaac Lee
6282
6283# Release 1.15.0
6284
6285This is the last 1.x release for TensorFlow. We do not expect to update the 1.x
6286branch with features, although we will issue patch releases to fix
6287vulnerabilities for at least one year.
6288
6289## Major Features and Improvements
6290
6291*   As
6292    [announced](https://groups.google.com/a/tensorflow.org/forum/#!topic/developers/iRCt5m4qUz0),
6293    `tensorflow` pip package will by default include GPU support (same as
6294    `tensorflow-gpu` now) for the platforms we currently have GPU support (Linux
6295    and Windows). It will work on machines with and without Nvidia GPUs.
6296    `tensorflow-gpu` will still be available, and CPU-only packages can be
6297    downloaded at `tensorflow-cpu` for users who are concerned about package
6298    size.
6299*   TensorFlow 1.15 contains a complete implementation of the 2.0 API in its
6300    `compat.v2` module. It contains a copy of the 1.15 main module (without
6301    `contrib`) in the `compat.v1` module. TensorFlow 1.15 is able to emulate 2.0
6302    behavior using the `enable_v2_behavior()` function. This enables writing
6303    forward compatible code: by explicitly importing either
6304    `tensorflow.compat.v1` or `tensorflow.compat.v2`, you can ensure that your
6305    code works without modifications against an installation of 1.15 or 2.0.
6306*   EagerTensor now supports numpy buffer interface for tensors.
6307*   Add toggles `tf.enable_control_flow_v2()` and `tf.disable_control_flow_v2()`
6308    for enabling/disabling v2 control flow.
6309*   Enable v2 control flow as part of `tf.enable_v2_behavior()` and
6310    `TF2_BEHAVIOR=1`.
6311*   AutoGraph translates Python control flow into TensorFlow expressions,
6312    allowing users to write regular Python inside `tf.function`-decorated
6313    functions. AutoGraph is also applied in functions used with `tf.data`,
6314    `tf.distribute` and `tf.keras` APIS.
6315*   Adds `enable_tensor_equality()`, which switches the behavior such that:
6316    *   Tensors are no longer hashable.
6317    *   Tensors can be compared with `==` and `!=`, yielding a Boolean Tensor
6318        with element-wise comparison results. This will be the default behavior
6319        in 2.0.
6320
6321## Breaking Changes
6322
6323*   Tensorflow code now produces 2 different pip packages: `tensorflow_core`
6324    containing all the code (in the future it will contain only the private
6325    implementation) and `tensorflow` which is a virtual pip package doing
6326    forwarding to `tensorflow_core` (and in the future will contain only the
6327    public API of tensorflow). We don't expect this to be breaking, unless you
6328    were importing directly from the implementation.
6329*   TensorFlow 1.15 is built using devtoolset7 (GCC7) on Ubuntu 16. This may
6330    lead to ABI incompatibilities with extensions built against earlier versions
6331    of TensorFlow.
6332*   Deprecated the use of `constraint=` and `.constraint` with ResourceVariable.
6333*   `tf.keras`:
6334    *   `OMP_NUM_THREADS` is no longer used by the default Keras config. To
6335        configure the number of threads, use `tf.config.threading` APIs.
6336    *   `tf.keras.model.save_model` and `model.save` now defaults to saving a
6337        TensorFlow SavedModel.
6338    *   `keras.backend.resize_images` (and consequently,
6339        `keras.layers.Upsampling2D`) behavior has changed, a bug in the resizing
6340        implementation was fixed.
6341    *   Layers now default to `float32`, and automatically cast their inputs to
6342        the layer's dtype. If you had a model that used `float64`, it will
6343        probably silently use `float32` in TensorFlow2, and a warning will be
6344        issued that starts with Layer "layer-name" is casting an input tensor
6345        from dtype float64 to the layer's dtype of float32. To fix, either set
6346        the default dtype to float64 with
6347        `tf.keras.backend.set_floatx('float64')`, or pass `dtype='float64'` to
6348        each of the Layer constructors. See `tf.keras.layers.Layer` for more
6349        information.
6350    *   Some `tf.assert_*` methods now raise assertions at operation creation
6351        time (i.e. when this Python line executes) if the input tensors' values
6352        are known at that time, not during the session.run(). When this happens,
6353        a noop is returned and the input tensors are marked non-feedable. In
6354        other words, if they are used as keys in `feed_dict` argument to
6355        `session.run()`, an error will be raised. Also, because some assert ops
6356        don't make it into the graph, the graph structure changes. A different
6357        graph can result in different per-op random seeds when they are not
6358        given explicitly (most often).
6359
6360## Bug Fixes and Other Changes
6361
6362*   `tf.estimator`:
6363    *   `tf.keras.estimator.model_to_estimator` now supports exporting to
6364        `tf.train.Checkpoint` format, which allows the saved checkpoints to be
6365        compatible with `model.load_weights`.
6366    *   Fix tests in canned estimators.
6367    *   Expose Head as public API.
6368    *   Fixes critical bugs that help with `DenseFeatures` usability in TF2
6369*   `tf.data`:
6370    *   Promoting `unbatch` from experimental to core API.
6371    *   Adding support for datasets as inputs to `from_tensors` and
6372        `from_tensor_slices` and batching and unbatching of nested datasets.
6373*   `tf.keras`:
6374    *   `tf.keras.estimator.model_to_estimator` now supports exporting to
6375        tf.train.Checkpoint format, which allows the saved checkpoints to be
6376        compatible with `model.load_weights`.
6377    *   Saving a Keras Model using `tf.saved_model.save` now saves the list of
6378        variables, trainable variables, regularization losses, and the call
6379        function.
6380    *   Deprecated `tf.keras.experimental.export_saved_model` and
6381        `tf.keras.experimental.function`. Please use
6382        `tf.keras.models.save_model(..., save_format='tf')` and
6383        `tf.keras.models.load_model` instead.
6384    *   Add an `implementation=3` mode for `tf.keras.layers.LocallyConnected2D`
6385        and `tf.keras.layers.LocallyConnected1D` layers using `tf.SparseTensor`
6386        to store weights, allowing a dramatic speedup for large sparse models.
6387    *   Enable the Keras compile API `experimental_run_tf_function` flag by
6388        default. This flag enables single training/eval/predict execution path.
6389        With this 1. All input types are converted to `Dataset`. 2. When
6390        distribution strategy is not specified this goes through the no-op
6391        distribution strategy path. 3. Execution is wrapped in tf.function
6392        unless `run_eagerly=True` is set in compile.
6393    *   Raise error if `batch_size` argument is used when input is
6394        dataset/generator/keras sequence.
6395*   `tf.lite`
6396    *   Add `GATHER` support to NN API delegate.
6397    *   tflite object detection script has a debug mode.
6398    *   Add delegate support for `QUANTIZE`.
6399    *   Added evaluation script for COCO minival.
6400    *   Add delegate support for `QUANTIZED_16BIT_LSTM`.
6401    *   Converts hardswish subgraphs into atomic ops.
6402*   Add support for defaulting the value of `cycle_length` argument of
6403    `tf.data.Dataset.interleave` to the number of schedulable CPU cores.
6404*   `parallel_for`: Add converter for `MatrixDiag`.
6405*   Add `narrow_range` attribute to `QuantizeAndDequantizeV2` and V3.
6406*   Added new op: `tf.strings.unsorted_segment_join`.
6407*   Add HW acceleration support for `topK_v2`.
6408*   Add new `TypeSpec` classes.
6409*   CloudBigtable version updated to v0.10.0.
6410*   Expose `Head` as public API.
6411*   Update docstring for gather to properly describe the non-empty `batch_dims`
6412    case.
6413*   Added `tf.sparse.from_dense` utility function.
6414*   Improved ragged tensor support in `TensorFlowTestCase`.
6415*   Makes the a-normal form transformation in Pyct configurable as to which
6416    nodes are converted to variables and which are not.
6417*   `ResizeInputTensor` now works for all delegates.
6418*   Add `EXPAND_DIMS` support to NN API delegate TEST: expand_dims_test
6419*   `tf.cond` emits a StatelessIf op if the branch functions are stateless and
6420    do not touch any resources.
6421*   `tf.cond`, `tf.while` and `if` and `while` in AutoGraph now accept a
6422    nonscalar predicate if has a single element. This does not affect non-V2
6423    control flow.
6424*   `tf.while_loop` emits a StatelessWhile op if the cond and body functions are
6425    stateless and do not touch any resources.
6426*   Refactors code in Quant8 LSTM support to reduce TFLite binary size.
6427*   Add support of local soft device placement for eager op.
6428*   Add HW acceleration support for `LogSoftMax`.
6429*   Added a function `nested_value_rowids` for ragged tensors.
6430*   Add guard to avoid acceleration of L2 Normalization with input rank != 4
6431*   Add `tf.math.cumulative_logsumexp operation`.
6432*   Add `tf.ragged.stack`.
6433*   Fix memory allocation problem when calling `AddNewInputConstantTensor`.
6434*   Delegate application failure leaves interpreter in valid state.
6435*   Add check for correct memory alignment to
6436    `MemoryAllocation::MemoryAllocation()`.
6437*   Extracts `NNAPIDelegateKernel` from nnapi_delegate.cc
6438*   Added support for `FusedBatchNormV3` in converter.
6439*   A ragged to dense op for directly calculating tensors.
6440*   Fix accidental quadratic graph construction cost in graph-mode
6441    `tf.gradients()`.
6442
6443## Thanks to our Contributors
6444
6445This release contains contributions from many people at Google, as well as:
6446
6447a6802739, Aaron Ma, Abdullah Selek, Abolfazl Shahbazi, Ag Ramesh, Albert Z. Guo,
6448Albin Joy, Alex Itkes, Alex Sergeev, Alexander Pivovarov, Alexey Romanov,
6449alhkad, Amit Srivastava, amoitra, Andrew Lihonosov, Andrii Prymostka, Anuj
6450Rawat, Astropeak, Ayush Agrawal, Bairen Yi, Bas Aarts, Bastian Eichenberger, Ben
6451Barsdell, Benjamin Peterson, bhack, Bharat Raghunathan, Bhavani Subramanian,
6452Bryan Cutler, candy.dc, Cao Zongyan, Captain-Pool, Casper Da Costa-Luis, Chen
6453Guoyin, Cheng Chang, chengchingwen, Chong Yan, Choong Yin Thong, Christopher
6454Yeh, Clayne Robison, Coady, Patrick, Dan Ganea, David Norman, Denis Khalikov,
6455Deven Desai, Diego Caballero, Duncan Dean, Duncan Riach, Dwight J Lyle, Eamon
6456Ito-Fisher, eashtian3, EFanZh, ejot, Elroy Ashtian Jr, Eric Schweitz, Fangjun
6457Kuang, Fei Hu, fo40225, formath, Fred Reiss, Frederic Bastien, Fredrik Knutsson,
6458G. Hussain Chinoy, Gabriel, gehring, George Grzegorz Pawelczak, Gianluca
6459Varisco, Gleb Popov, Greg Peatfield, Guillaume Klein, Gurpreet Singh, Gustavo
6460Lima Chaves, haison, Haraldur TóMas HallgríMsson, HarikrishnanBalagopal, HåKon
6461Sandsmark, I-Hong, Ilham Firdausi Putra, Imran Salam, Jason Zaman, Jason
6462Zavaglia, jayhpark530, jefby, Jeff Daily, Jeffrey Poznanovic, Jekyll Lai, Jeroen
6463BéDorf, Jerry Shih, jerryyin, jiakai, JiangXIAO, Joe Bowser, Joel Shapiro, Johan
6464Gunnarsson, Jojimon Varghese, Joon, Josh Beal, Julian Niedermeier, Jun Wan,
6465Junqin Zhang, Junyuan Xie, Justin Tunis, Kaixi Hou, Karl Lessard, Karthik
6466Muthuraman, Kbhute-Ibm, khanhlvg, Koock Yoon, kstuedem, Kyuwon Kim, Lakshay
6467Tokas, leike666666, leonard951, Leslie-Fang, Leslie-Fang-Intel, Li, Guizi, Lukas
6468Folle, Lukas Geiger, Mahmoud Abuzaina, Manraj Singh Grover, Margaret
6469Maynard-Reid, Mark Ryan, Matt Conley, Matthew Bentham, Matthew Denton, mbhuiyan,
6470mdfaijul, Mei Jie, merturl, MichaelKonobeev, Michal W. Tarnowski, minds, mpppk,
6471musikisomorphie, Nagy Mostafa, Nayana Thorat, Neil, Niels Ole Salscheider,
6472Niklas SilfverströM, Niranjan Hasabnis, ocjosen, olramde, Pariksheet Pinjari,
6473Patrick J. Lopresti, Patrik Gustavsson, per1234, PeterLee, Phan Van Nguyen Duc,
6474Phillip Kravtsov, Pooya Davoodi, Pranav Marathe, Putra Manggala, Qingqing Cao,
6475Rajeshwar Reddy T, Ramon ViñAs, Rasmus Diederichsen, Reuben Morais, richardbrks,
6476robert, RonLek, Ryan Jiang, saishruthi, Saket Khandelwal, Saleem Abdulrasool,
6477Sami Kama, Sana-Damani, Sergii Khomenko, Severen Redwood, Shubham Goyal, Sigrid
6478Keydana, Siju Samuel, sleighsoft, smilu97, Son Tran, Srini511,
6479srinivasan.narayanamoorthy, Sumesh Udayakumaran, Sungmann Cho, Tae-Hwan Jung,
6480Taehoon Lee, Takeshi Watanabe, TengLu, terryky, TheMindVirus, ThisIsIsaac, Till
6481Hoffmann, Timothy Liu, Tomer Gafner, Tongxuan Liu, Trent Lo, Trevor Morris, Uday
6482Bondhugula, Vasileios Lioutas, vbvg2008, Vishnuvardhan Janapati, Vivek
6483Suryamurthy, Wei Wang, Wen-Heng (Jack) Chung, wenxizhu, William D. Irons,
6484winstonq, wyzhao, Xiaoming (Jason) Cui, Xinan Jiang, Xinping Wang, Yann-Yy,
6485Yasir Modak, Yong Tang, Yongfeng Gu, Yuchen Ying, Yuxin Wu, zyeric, 王振华 (Zhenhua
6486Wang)
6487
6488# Release 2.0.0
6489
6490## Major Features and Improvements
6491
6492TensorFlow 2.0 focuses on **simplicity** and **ease of use**, featuring updates
6493like:
6494
6495*   Easy model building with Keras and eager execution.
6496*   Robust model deployment in production on any platform.
6497*   Powerful experimentation for research.
6498*   API simplification by reducing duplication and removing deprecated
6499    endpoints.
6500
6501For details on best practices with 2.0, see
6502[the Effective 2.0 guide](https://www.tensorflow.org/beta/guide/effective_tf2)
6503
6504For information on upgrading your existing TensorFlow 1.x models, please refer
6505to our
6506[Upgrade](https://medium.com/tensorflow/upgrading-your-code-to-tensorflow-2-0-f72c3a4d83b5)
6507and [Migration](https://www.tensorflow.org/beta/guide/migration_guide) guides.
6508We have also released a collection of
6509[tutorials and getting started guides](https://www.tensorflow.org/beta).
6510
6511## Highlights
6512
6513*   TF 2.0 delivers Keras as the central high level API used to build and train
6514    models. Keras provides several model-building APIs such as Sequential,
6515    Functional, and Subclassing along with eager execution, for immediate
6516    iteration and intuitive debugging, and `tf.data`, for building scalable
6517    input pipelines. Checkout
6518    [guide](https://www.tensorflow.org/beta/guide/keras/overview) for additional
6519    details.
6520*   Distribution Strategy: TF 2.0 users will be able to use the
6521    [`tf.distribute.Strategy`](https://www.tensorflow.org/beta/guide/distribute_strategy)
6522    API to distribute training with minimal code changes, yielding great
6523    out-of-the-box performance. It supports distributed training with Keras
6524    model.fit, as well as with custom training loops. Multi-GPU support is
6525    available, along with experimental support for multi worker and Cloud TPUs.
6526    Check out the
6527    [guide](https://www.tensorflow.org/beta/guide/distribute_strategy) for more
6528    details.
6529*   Functions, not Sessions. The traditional declarative programming model of
6530    building a graph and executing it via a `tf.Session` is discouraged, and
6531    replaced with by writing regular Python functions. Using the `tf.function`
6532    decorator, such functions can be turned into graphs which can be executed
6533    remotely, serialized, and optimized for performance.
6534*   Unification of `tf.train.Optimizers` and `tf.keras.Optimizers`. Use
6535    `tf.keras.Optimizers` for TF2.0. `compute_gradients` is removed as public
6536    API, use `GradientTape` to compute gradients.
6537*   AutoGraph translates Python control flow into TensorFlow expressions,
6538    allowing users to write regular Python inside `tf.function`-decorated
6539    functions. AutoGraph is also applied in functions used with tf.data,
6540    tf.distribute and tf.keras APIs.
6541*   Unification of exchange formats to SavedModel. All TensorFlow ecosystem
6542    projects (TensorFlow Lite, TensorFlow JS, TensorFlow Serving, TensorFlow
6543    Hub) accept SavedModels. Model state should be saved to and restored from
6544    SavedModels.
6545*   API Changes: Many API symbols have been renamed or removed, and argument
6546    names have changed. Many of these changes are motivated by consistency and
6547    clarity. The 1.x API remains available in the compat.v1 module. A list of
6548    all symbol changes can be found
6549    [here](https://docs.google.com/spreadsheets/d/1FLFJLzg7WNP6JHODX5q8BDgptKafq_slHpnHVbJIteQ/edit#gid=0).
6550    *   API clean-up, included removing `tf.app`, `tf.flags`, and `tf.logging`
6551        in favor of [absl-py](https://github.com/abseil/abseil-py).
6552*   No more global variables with helper methods like
6553    `tf.global_variables_initializer` and `tf.get_global_step`.
6554*   Add toggles `tf.enable_control_flow_v2()` and `tf.disable_control_flow_v2()`
6555    for enabling/disabling v2 control flow.
6556*   Enable v2 control flow as part of `tf.enable_v2_behavior()` and
6557    `TF2_BEHAVIOR=1`.
6558*   Fixes autocomplete for most TensorFlow API references by switching to use
6559    relative imports in API `__init__.py` files.
6560*   Auto Mixed-Precision graph optimizer simplifies converting models to
6561    `float16` for acceleration on Volta and Turing Tensor Cores. This feature
6562    can be enabled by wrapping an optimizer class with
6563    `tf.train.experimental.enable_mixed_precision_graph_rewrite()`.
6564*   Add environment variable `TF_CUDNN_DETERMINISTIC`. Setting to "true" or "1"
6565    forces the selection of deterministic cuDNN convolution and max-pooling
6566    algorithms. When this is enabled, the algorithm selection procedure itself
6567    is also deterministic.
6568
6569## Breaking Changes
6570
6571*   Many backwards incompatible API changes have been made to clean up the APIs
6572    and make them more consistent.
6573*   Toolchains:
6574
6575    *   TensorFlow 2.0.0 is built using devtoolset7 (GCC7) on Ubuntu 16. This
6576        may lead to ABI incompatibilities with extensions built against earlier
6577        versions of TensorFlow.
6578    *   Tensorflow code now produces 2 different pip packages: tensorflow_core
6579        containing all the code (in the future it will contain only the private
6580        implementation) and tensorflow which is a virtual pip package doing
6581        forwarding to tensorflow_core (and in the future will contain only the
6582        public API of tensorflow). We don't expect this to be breaking, unless
6583        you were importing directly from the implementation. Removed the
6584        `freeze_graph` command line tool; `SavedModel` should be used in place
6585        of frozen graphs.
6586
6587*   `tf.contrib`:
6588
6589    *   `tf.contrib` has been deprecated, and functionality has been either
6590        migrated to the core TensorFlow API, to an ecosystem project such as
6591        [tensorflow/addons](https://www.github.com/tensorflow/addons) or
6592        [tensorflow/io](https://www.github.com/tensorflow/io), or removed
6593        entirely.
6594    *   Remove `tf.contrib.timeseries` dependency on TF distributions.
6595    *   Replace contrib references with `tf.estimator.experimental.*` for apis
6596        in `early_stopping.py`.
6597
6598*   `tf.estimator`:
6599
6600    *   Premade estimators in the tf.estimator.DNN/Linear/DNNLinearCombined
6601        family have been updated to use `tf.keras.optimizers` instead of the
6602        `tf.compat.v1.train.Optimizer`s. If you do not pass in an `optimizer=`
6603        arg or if you use a string, the premade estimator will use the Keras
6604        optimizer. This is checkpoint breaking, as the optimizers have separate
6605        variables. A checkpoint converter tool for converting optimizers is
6606        included with the release, but if you want to avoid any change, switch
6607        to the v1 version of the estimator:
6608        `tf.compat.v1.estimator.DNN/Linear/DNNLinearCombined*`.
6609    *   Default aggregation for canned Estimators is now `SUM_OVER_BATCH_SIZE`.
6610        To maintain previous default behavior, please pass `SUM` as the loss
6611        aggregation method.
6612    *   Canned Estimators don’t support `input_layer_partitioner` arg in the
6613        API. If you have this arg, you will have to switch to `tf.compat.v1
6614        canned Estimators`.
6615    *   `Estimator.export_savedmodel` has been renamed to `export_saved_model`.
6616    *   When saving to SavedModel, Estimators will strip default op attributes.
6617        This is almost always the correct behavior, as it is more forwards
6618        compatible, but if you require that default attributes to be saved with
6619        the model, please use `tf.compat.v1.Estimator`.
6620    *   Feature Columns have been upgraded to be more Eager-friendly and to work
6621        with Keras. As a result, `tf.feature_column.input_layer` has been
6622        deprecated in favor of `tf.keras.layers.DenseFeatures`. v1 feature
6623        columns have direct analogues in v2 except for
6624        `shared_embedding_columns`, which are not cross-compatible with v1 and
6625        v2. Use `tf.feature_column.shared_embeddings` instead.
6626
6627*   `tf.keras`:
6628
6629    *   `OMP_NUM_THREADS` is no longer used by the default Keras config. To
6630        configure the number of threads, use `tf.config.threading` APIs.
6631    *   `tf.keras.model.save_model` and `model.save` now defaults to saving a
6632        TensorFlow SavedModel. HDF5 files are still supported.
6633    *   Deprecated `tf.keras.experimental.export_saved_model` and
6634        `tf.keras.experimental.function`. Please use
6635        `tf.keras.models.save_model(..., save_format='tf')` and
6636        `tf.keras.models.load_model` instead.
6637    *   Layers now default to float32, and automatically cast their inputs to
6638        the layer's dtype. If you had a model that used float64, it will
6639        probably silently use float32 in TensorFlow 2, and a warning will be
6640        issued that starts with `Layer <layer-name>` is casting an input tensor
6641        from dtype float64 to the layer's dtype of float32. To fix, either set
6642        the default dtype to float64 with
6643        `tf.keras.backend.set_floatx('float64')`, or pass `dtype='float64'` to
6644        each of the Layer constructors. See `tf.keras.layers.Layer` for more
6645        information.
6646
6647*   `tf.lite`:
6648
6649    *   Removed `lite.OpHint`, `lite.experimental`, and `lite.constant` from 2.0
6650        API.
6651
6652*   Tensors are no longer hashable, but instead compare element-wise with `==`
6653    and `!=`. Use `tf.compat.v1.disable_tensor_equality()` to return to the
6654    previous behavior.
6655
6656*   Performing equality operations on Tensors or Variables with incompatible
6657    shapes an exception is no longer thrown. Instead `__eq__` returns False and
6658    `__ne__` returns True.
6659
6660*   Removed `tf.string_split` from v2 API.
6661
6662*   Deprecated the use of `constraint=` and `.constraint` with ResourceVariable.
6663
6664*   Add `UnifiedGRU` as the new GRU implementation for tf2.0. Change the default
6665    recurrent activation function for GRU from `hard_sigmoid` to `sigmoid`, and
6666    `reset_after` to True in 2.0. Historically recurrent activation is
6667    `hard_sigmoid` since it is fast than 'sigmoid'. With new unified backend
6668    between CPU and GPU mode, since the CuDNN kernel is using sigmoid, we change
6669    the default for CPU mode to sigmoid as well. With that, the default GRU will
6670    be compatible with both CPU and GPU kernel. This will enable user with GPU
6671    to use CuDNN kernel by default and get a 10x performance boost in training.
6672    Note that this is checkpoint breaking change. If user want to use their 1.x
6673    pre-trained checkpoint, please construct the layer with
6674    GRU(recurrent_activation='hard_sigmoid', reset_after=False) to fallback to
6675    1.x behavior.
6676
6677*   `CUDNN_INSTALL_PATH`, `TENSORRT_INSTALL_PATH`, `NCCL_INSTALL_PATH`,
6678    `NCCL_HDR_PATH` are deprecated. Use `TF_CUDA_PATHS` instead which supports a
6679    comma-separated list of base paths that are searched to find CUDA libraries
6680    and headers.
6681
6682Refer to our
6683[public project status tracker](https://github.com/orgs/tensorflow/projects/4)
6684and
6685[issues tagged with `2.0`](https://github.com/tensorflow/tensorflow/issues?q=is%3Aopen+is%3Aissue+label%3A2.0)
6686on GitHub for insight into recent issues and development progress.
6687
6688If you experience any snags when using TF 2.0, please let us know at the
6689[TF 2.0 Testing User Group](https://groups.google.com/a/tensorflow.org/forum/?utm_medium=email&utm_source=footer#!forum/testing).
6690We have a support mailing list as well as weekly testing meetings, and would
6691love to hear your migration feedback and questions.
6692
6693## Bug Fixes and Other Changes
6694
6695*   `tf.contrib`:
6696
6697    *   Expose `tf.contrib.proto.*` ops in `tf.io` (they will exist in TF2)
6698
6699*   `tf.data`:
6700
6701    *   Add support for TensorArrays to `tf.data Dataset`.
6702    *   Integrate Ragged Tensors with `tf.data`.
6703    *   All core and experimental tf.data transformations that input
6704        user-defined functions can span multiple devices now.
6705    *   Extending the TF 2.0 support for `shuffle(...,
6706        reshuffle_each_iteration=True)` and `cache()` to work across different
6707        Python iterators for the same dataset.
6708    *   Removing the `experimental_numa_aware` option from `tf.data.Options`.
6709    *   Add `num_parallel_reads` and passing in a Dataset containing filenames
6710        into `TextLineDataset` and `FixedLengthRecordDataset`.
6711    *   Add support for defaulting the value of `cycle_length` argument of
6712        `tf.data.Dataset.interleave` to the number of schedulable CPU cores.
6713    *   Promoting `tf.data.experimental.enumerate_dataset` to core as
6714        `tf.data.Dataset.enumerate`.
6715    *   Promoting `tf.data.experimental.unbatch` to core as
6716        `tf.data.Dataset.unbatch`.
6717    *   Adds option for introducing slack in the pipeline to reduce CPU
6718        contention, via `tf.data.Options().experimental_slack = True`
6719    *   Added experimental support for parallel batching to `batch()` and
6720        `padded_batch()`. This functionality can be enabled through
6721        `tf.data.Options()`.
6722    *   Support cancellation of long-running `reduce`.
6723    *   Now we use `dataset` node name as prefix instead of the op name, to
6724        identify the component correctly in metrics, for pipelines with repeated
6725        components.
6726    *   Improve the performance of datasets using `from_tensors()`.
6727    *   Promoting `unbatch` from experimental to core API.
6728    *   Adding support for datasets as inputs to `from_tensors` and
6729        `from_tensor_slices` and batching and unbatching of nested datasets.
6730
6731*   `tf.distribute`:
6732
6733    *   Enable `tf.distribute.experimental.MultiWorkerMirroredStrategy` working
6734        in eager mode.
6735    *   Callbacks are supported in `MultiWorkerMirroredStrategy`.
6736    *   Disable `run_eagerly` and distribution strategy if there are symbolic
6737        tensors added to the model using `add_metric` or `add_loss`.
6738    *   Loss and gradients should now more reliably be correctly scaled w.r.t.
6739        the global batch size when using a `tf.distribute.Strategy`.
6740    *   Set default loss reduction as `AUTO` for improving reliability of loss
6741        scaling with distribution strategy and custom training loops. `AUTO`
6742        indicates that the reduction option will be determined by the usage
6743        context. For almost all cases this defaults to `SUM_OVER_BATCH_SIZE`.
6744        When used in distribution strategy scope, outside of built-in training
6745        loops such as `tf.keras` `compile` and `fit`, we expect reduction value
6746        to be 'None' or 'SUM'. Using other values will raise an error.
6747    *   Support for multi-host `ncclAllReduce` in Distribution Strategy.
6748
6749*   `tf.estimator`:
6750
6751    *   Replace `tf.contrib.estimator.add_metrics` with
6752        `tf.estimator.add_metrics`
6753    *   Use `tf.compat.v1.estimator.inputs` instead of `tf.estimator.inputs`
6754    *   Replace contrib references with `tf.estimator.experimental.*` for apis
6755        in early_s in Estimator
6756    *   Canned Estimators will now use keras optimizers by default. An error
6757        will be raised if tf.train.Optimizers are used, and you will have to
6758        switch to tf.keras.optimizers or tf.compat.v1 canned Estimators.
6759    *   A checkpoint converter for canned Estimators has been provided to
6760        transition canned Estimators that are warm started from
6761        `tf.train.Optimizers` to `tf.keras.optimizers`.
6762    *   Losses are scaled in canned estimator v2 and not in the optimizers
6763        anymore. If you are using Estimator + distribution strategy + optimikzer
6764        v1 then the behavior does not change. This implies that if you are using
6765        custom estimator with optimizer v2, you have to scale losses. We have
6766        new utilities to help scale losses `tf.nn.compute_average_loss`,
6767        `tf.nn.scale_regularization_loss`.
6768
6769*   `tf.keras`:
6770
6771    *   Premade models (including Linear and WideDeep) have been introduced for
6772        the purpose of replacing Premade estimators.
6773    *   Model saving changes
6774    *   `model.save` and `tf.saved_model.save` may now save to the TensorFlow
6775        SavedModel format. The model can be restored using
6776        `tf.keras.models.load_model`. HDF5 files are still supported, and may be
6777        used by specifying `save_format="h5"` when saving.
6778    *   Raw TensorFlow functions can now be used in conjunction with the Keras
6779        Functional API during model creation. This obviates the need for users
6780        to create Lambda layers in most cases when using the Functional API.
6781        Like Lambda layers, TensorFlow functions that result in Variable
6782        creation or assign ops are not supported.
6783    *   Add support for passing list of lists to the `metrics` argument in Keras
6784        `compile`.
6785    *   Add `tf.keras.layers.AbstractRNNCell` as the preferred implementation
6786        for RNN cells in TF v2. User can use it to implement RNN cells with
6787        custom behavior.
6788    *   Keras training and validation curves are shown on the same plot when
6789        using the TensorBoard callback.
6790    *   Switched Keras `fit/evaluate/predict` execution to use only a single
6791        unified path by default unless eager execution has been explicitly
6792        disabled, regardless of input type. This unified path places an
6793        eager-friendly training step inside of a `tf.function`. With this
6794    *   All input types are converted to `Dataset`.
6795    *   The path assumes there is always a distribution strategy. when
6796        distribution strategy is not specified the path uses a no-op
6797        distribution strategy.
6798    *   The training step is wrapped in `tf.function` unless `run_eagerly=True`
6799        is set in compile. The single path execution code does not yet support
6800        all use cases. We fallback to the existing v1 execution paths if your
6801        model contains the following:
6802        1.  `sample_weight_mode` in compile
6803        2.  `weighted_metrics` in compile
6804        3.  v1 optimizer
6805        4.  target tensors in compile If you are experiencing any issues because
6806            of this change, please inform us (file an issue) about your use case
6807            and you can unblock yourself by setting
6808            `experimental_run_tf_function=False` in compile meanwhile. We have
6809            seen couple of use cases where the model usage pattern is not as
6810            expected and would not work with this change.
6811    *   output tensors of one layer is used in the constructor of another.
6812    *   symbolic tensors outside the scope of the model are used in custom loss
6813        functions. The flag can be disabled for these cases and ideally the
6814        usage pattern will need to be fixed.
6815    *   Mark Keras `set_session` as `compat.v1` only.
6816    *   `tf.keras.estimator.model_to_estimator` now supports exporting to
6817        `tf.train.Checkpoint format`, which allows the saved checkpoints to be
6818        compatible with `model.load_weights`.
6819    *   `keras.backend.resize_images` (and consequently,
6820        `keras.layers.Upsampling2D`) behavior has changed, a bug in the resizing
6821        implementation was fixed.
6822    *   Add an `implementation=3` mode for `tf.keras.layers.LocallyConnected2D`
6823        and `tf.keras.layers.LocallyConnected1D` layers using `tf.SparseTensor`
6824        to store weights, allowing a dramatic speedup for large sparse models.
6825    *   Raise error if `batch_size` argument is used when input is
6826        dataset/generator/keras sequence.
6827    *   Update TF 2.0 `keras.backend.name_scope` to use TF 2.0 `name_scope`.
6828    *   Add v2 module aliases for losses, metrics, initializers and optimizers:
6829        `tf.losses = tf.keras.losses` & `tf.metrics = tf.keras.metrics` &
6830        `tf.initializers = tf.keras.initializers` & `tf.optimizers =
6831        tf.keras.optimizers`.
6832    *   Updates binary cross entropy logic in Keras when input is probabilities.
6833        Instead of converting probabilities to logits, we are using the cross
6834        entropy formula for probabilities.
6835    *   Added public APIs for `cumsum` and `cumprod` keras backend functions.
6836    *   Add support for temporal sample weight mode in subclassed models.
6837    *   Raise `ValueError` if an integer is passed to the training APIs.
6838    *   Added fault-tolerance support for training Keras model via `model.fit()`
6839        with `MultiWorkerMirroredStrategy`, tutorial available.
6840    *   Custom Callback tutorial is now available.
6841    *   To train with `tf.distribute`, Keras API is recommended over estimator.
6842    *   `steps_per_epoch` and `steps` arguments are supported with numpy arrays.
6843    *   New error message when unexpected keys are used in
6844        sample_weight/class_weight dictionaries
6845    *   Losses are scaled in Keras compile/fit and not in the optimizers
6846        anymore. If you are using custom training loop, we have new utilities to
6847        help scale losses `tf.nn.compute_average_loss`,
6848        `tf.nn.scale_regularization_loss`.
6849    *   `Layer` apply and add_variable APIs are deprecated.
6850    *   Added support for channels first data format in cross entropy losses
6851        with logits and support for tensors with unknown ranks.
6852    *   Error messages will be raised if `add_update`, `add_metric`, `add_loss`,
6853        activity regularizers are used inside of a control flow branch.
6854    *   New loss reduction types:
6855    *   `AUTO`: Indicates that the reduction option will be determined by the
6856        usage context. For almost all cases this defaults to
6857        `SUM_OVER_BATCH_SIZE`. When used with `tf.distribute.Strategy`, outside
6858        of built-in training loops such as `tf.keras` `compile` and `fit`, we
6859        expect reduction value to be `SUM` or `NONE`. Using `AUTO` in that case
6860        will raise an error.
6861    *   `NONE`: Weighted losses with one dimension reduced (axis=-1, or axis
6862        specified by loss function). When this reduction type used with built-in
6863        Keras training loops like `fit`/`evaluate`, the unreduced vector loss is
6864        passed to the optimizer but the reported loss will be a scalar value.
6865    *   `SUM`: Scalar sum of weighted losses. 4. `SUM_OVER_BATCH_SIZE`: Scalar
6866        `SUM` divided by number of elements in losses. This reduction type is
6867        not supported when used with `tf.distribute.Strategy` outside of
6868        built-in training loops like `tf.keras` `compile`/`fit`.
6869    *   Wraps losses passed to the `compile` API (strings and v1 losses) which
6870        are not instances of v2 `Loss` class in `LossWrapper` class. => All
6871        losses will now use `SUM_OVER_BATCH_SIZE` reduction as default.
6872    *   `model.add_loss(symbolic_tensor)` should work in ambient eager.
6873    *   Update metric name to always reflect what the user has given in compile.
6874        Affects following cases
6875    *   When name is given as 'accuracy'/'crossentropy'
6876    *   When an aliased function name is used eg. 'mse'
6877    *   Removing the `weighted` prefix from weighted metric names.
6878    *   Allow non-Tensors through v2 losses.
6879    *   Add v2 sparse categorical crossentropy metric.
6880    *   Add v2 APIs for `AUCCurve` and `AUCSummationMethod` enums.
6881    *   `add_update` can now be passed a zero-arg callable in order to support
6882        turning off the update when setting `trainable=False` on a Layer of a
6883        Model compiled with `run_eagerly=True`.
6884    *   Standardize the LayerNormalization API by replacing the args `norm_axis`
6885        and `params_axis` with `axis`.
6886    *   Fixed critical bugs that help with DenseFeatures usability in TF2
6887
6888*   `tf.lite`:
6889
6890    *   Added evaluation script for `COCO` minival
6891    *   Add delegate support for `QUANTIZE`.
6892    *   Add `GATHER` support to NN API delegate.
6893    *   Added support for TFLiteConverter Python API in 2.0. Contains functions
6894        from_saved_model, from_keras_file, and from_concrete_functions.
6895    *   Add `EXPAND_DIMS` support to NN API delegate TEST.
6896    *   Add `narrow_range` attribute to QuantizeAndDequantizeV2 and V3.
6897    *   Added support for `tflite_convert` command line tool in 2.0.
6898    *   Post-training quantization tool supports quantizing weights shared by
6899        multiple operations. The models made with versions of this tool will use
6900        INT8 types for weights and will only be executable interpreters from
6901        this version onwards.
6902    *   Post-training quantization tool supports fp16 weights and GPU delegate
6903        acceleration for fp16.
6904    *   Add delegate support for `QUANTIZED_16BIT_LSTM`.
6905    *   Extracts `NNAPIDelegateKernel` from nnapi_delegate.cc
6906
6907*   TensorRT
6908
6909    *   Add TensorFlow 2.0-compatible `TrtGraphConverterV2` API for TensorRT
6910        conversion. TensorRT initialization arguments are now passed wrapped in
6911        a named-tuple, `TrtConversionParams`, rather than as separate arguments
6912        as in `TrtGraphConverter`.
6913    *   Changed API to optimize TensorRT engines during graph optimization. This
6914        is now done by calling `converter.build()` where previously
6915        `is_dynamic_op=False` would be set.
6916    *   `converter.convert()` no longer returns a `tf.function`. Now the
6917        function must be accessed from the saved model.
6918    *   The `converter.calibrate()` method has been removed. To trigger
6919        calibration, a `calibration_input_fn` should be provided to
6920        `converter.convert()`.
6921
6922*   Other:
6923
6924    *   Fix accidental quadratic graph construction cost in graph-mode
6925        `tf.gradients()`.
6926    *   ResourceVariable's gather op supports batch dimensions.
6927    *   ResourceVariable support for `gather_nd`.
6928    *   `ResourceVariable` and `Variable` no longer accepts `constraint` in the
6929        constructor, nor expose it as a @property.
6930    *   Added gradient for `SparseToDense` op.
6931    *   Expose a flag that allows the number of threads to vary across Python
6932        benchmarks.
6933    *   `image.resize` in 2.0 now supports gradients for the new resize kernels.
6934    *   `image.resize` now considers proper pixel centers and has new kernels
6935        (incl. anti-aliasing).
6936    *   Renamed `tf.image` functions to remove duplicate "image" where it is
6937        redundant.
6938    *   Variadic reduce is supported on CPU Variadic reduce is supported on CPU
6939    *   Remove unused `StringViewVariantWrapper`.
6940    *   Delete unused `Fingerprint64Map` op registration
6941    *   Add broadcasting support to `tf.matmul`.
6942    *   Add C++ Gradient for `BatchMatMulV2`.
6943    *   Add `tf.math.cumulative_logsumexp` operation.
6944    *   Add ellipsis (...) support for `tf.einsum()`.
6945    *   Add expand_composites argument to all `nest.*` methods.
6946    *   Added `strings.byte_split`.
6947    *   Add a new "result_type" parameter to `tf.strings.split`.
6948    *   Add name argument to `tf.string_split` and `tf.strings_split`.
6949    *   Extend `tf.strings.split` to support inputs with any rank.
6950    *   Added `tf.random.binomial`.
6951    *   Added `key` and `skip` methods to `random.experimental.Generator`.
6952    *   Extend `tf.function` with basic support for CompositeTensors arguments
6953        (such as `SparseTensor` and `RaggedTensor`).
6954    *   `parallel_for.pfor`: add converters for Softmax, LogSoftmax, IsNaN, All,
6955        Any, and MatrixSetDiag.
6956    *   `parallel_for`: add converters for LowerTriangularSolve and Cholesky.
6957    *   `parallel_for`: add converters for `LogMatrixDeterminant` and
6958        `MatrixBandPart`.
6959    *   `parallel_for`: Add converter for `MatrixDiag`.
6960    *   `parallel_for`: Add converters for `OneHot`, `LowerBound`, `UpperBound`.
6961    *   `parallel_for`: add converter for `BroadcastTo`.
6962    *   Add `pfor` converter for `Squeeze`.
6963    *   Add `RaggedTensor.placeholder()`.
6964    *   Add ragged tensor support to `tf.squeeze`.
6965    *   Update RaggedTensors to support int32 row_splits.
6966    *   Allow `LinearOperator.solve` to take a `LinearOperator`.
6967    *   Allow all dtypes for `LinearOperatorCirculant`.
6968    *   Introduce MaxParallelism method
6969    *   Add `LinearOperatorHouseholder`.
6970    *   Adds Philox support to new stateful RNG's XLA path.
6971    *   Added `TensorSpec` support for CompositeTensors.
6972    *   Added `tf.linalg.tridiagonal_solve` op.
6973    *   Added partial_pivoting input parameter to `tf.linalg.tridiagonal_solve`.
6974    *   Added gradient to `tf.linalg.tridiagonal_solve`.
6975    *   Added `tf.linalg.tridiagonal_mul op`.
6976    *   Added GPU implementation of `tf.linalg.tridiagonal_matmul`.
6977    *   Added `LinearOperatorToeplitz`.
6978    *   Upgraded LIBXSMM to version 1.11.
6979    *   Uniform processing of quantized embeddings by Gather and EmbeddingLookup
6980        Ops.
6981    *   Correct a misstatement in the documentation of the sparse softmax cross
6982        entropy logit parameter.
6983    *   Add `tf.ragged.boolean_mask`.
6984    *   `tf.switch_case` added, which selects a branch_fn based on a
6985        branch_index.
6986    *   The C++ kernel of gather op supports batch dimensions.
6987    *   Fixed default value and documentation for `trainable` arg of
6988        tf.Variable.
6989    *   `EagerTensor` now supports numpy buffer interface for tensors.
6990    *   This change bumps the version number of the `FullyConnected` Op to 5.
6991    *   Added new op: `tf.strings.unsorted_segment_join`.
6992    *   Added HW acceleration support for `topK_v2`.
6993    *   CloudBigtable version updated to v0.10.0 BEGIN_PUBLIC CloudBigtable
6994        version updated to v0.10.0.
6995    *   Expose `Head` as public API.
6996    *   Added `tf.sparse.from_dense` utility function.
6997    *   Improved ragged tensor support in `TensorFlowTestCase`.
6998    *   Added a function `nested_value_rowids` for ragged tensors.
6999    *   Added `tf.ragged.stack`.
7000    *   Makes the a-normal form transformation in Pyct configurable as to which
7001        nodes are converted to variables and which are not.
7002    *   `ResizeInputTensor` now works for all delegates.
7003    *   `tf.cond` emits a StatelessIf op if the branch functions are stateless
7004        and do not touch any resources.
7005    *   Add support of local soft device placement for eager op.
7006    *   Pass partial_pivoting to the `_TridiagonalSolveGrad`.
7007    *   Add HW acceleration support for `LogSoftMax`.
7008    *   Add guard to avoid acceleration of L2 Normalization with input rank != 4
7009    *   Fix memory allocation problem when calling `AddNewInputConstantTensor`.
7010    *   Delegate application failure leaves interpreter in valid state
7011    *   `tf.while_loop` emits a StatelessWhile op if the cond and body functions
7012        are stateless and do not touch any resources.
7013    *   `tf.cond`, `tf.while` and if and while in AutoGraph now accept a
7014        nonscalar predicate if has a single element. This does not affect non-V2
7015        control flow.
7016    *   Fix potential security vulnerability where decoding variant tensors from
7017        proto could result in heap out of bounds memory access.
7018    *   Only create a GCS directory object if the object does not already exist.
7019    *   Introduce `dynamic` constructor argument in Layer and Model, which
7020        should be set to `True` when using imperative control flow in the `call`
7021        method.
7022    *   Begin adding Go wrapper for C Eager API.
7023    *   XLA HLO graphs can be inspected with interactive_graphviz tool now.
7024    *   Add dataset ops to the graph (or create kernels in Eager execution)
7025        during the python Dataset object creation instead doing it during
7026        Iterator creation time.
7027    *   Add `batch_dims` argument to `tf.gather`.
7028    *   The behavior of `tf.gather` is now correct when `axis=None` and
7029        `batch_dims<0`.
7030    *   Update docstring for gather to properly describe the non-empty
7031        `batch_dims` case.
7032    *   Removing of dtype in the constructor of initializers and partition_info
7033        in call.
7034    *   Add `tf.math.nextafter` op.
7035    *   Turn on MKL-DNN contraction kernels by default. MKL-DNN dynamically
7036        dispatches the best kernel implementation based on CPU vector
7037        architecture. To disable them, build with
7038        `--define=tensorflow_mkldnn_contraction_kernel=0`.
7039    *   `tf.linspace(start, stop, num)` now always uses "stop" as last value
7040        (for num > 1)
7041    *   Added top-k to precision and recall to keras metrics.
7042    *   Add a ragged size op and register it to the op dispatcher
7043    *   Transitive dependencies on :`pooling_ops` were removed. Some users may
7044        need to add explicit dependencies on :`pooling_ops` if they reference
7045        the operators from that library.
7046    *   Add `CompositeTensor` base class.
7047    *   Malformed gif images could result in an access out of bounds in the
7048        color palette of the frame. This has been fixed now
7049    *   Add templates and interfaces for creating lookup tables
7050    *   `Tensor::UnsafeCopyFromInternal` deprecated in favor
7051        `Tensor::BitcastFrom`.
7052    *   In `map_vectorization` optimization, reduce the degree of parallelism in
7053        the vectorized map node.
7054    *   Add variant wrapper for `absl::string_view`.
7055    *   Add OpKernels for some stateless maps.
7056    *   DType is no longer convertible to an int. Use `dtype.as_datatype_enum`
7057        instead of `int(dtype)` to get the same result.
7058    *   Support both binary and -1/1 label input in v2 hinge and squared hinge
7059        losses.
7060    *   Added `LinearOperator.adjoint` and `LinearOperator.H` (alias).
7061    *   Expose CriticalSection in core as `tf.CriticalSection`.
7062    *   Enhanced graphviz output.
7063    *   Add opkernel templates for common table operations.
7064    *   Fix callbacks do not log values in eager mode when a deferred build
7065        model is used.
7066    *   `SignatureDef` util functions have been deprecated.
7067    *   Update `Fingerprint64Map` to use aliases
7068    *   Add legacy string flat hash map op kernels.
7069    *   Add support for `add_metric` in the graph function mode.
7070    *   Updating cosine similarity loss - removed the negate sign from cosine
7071        similarity.
7072    *   Changed default for gradient accumulation for TPU embeddings to true.
7073    *   Adds summary trace API for collecting graph and profile information.
7074    *   The `precision_mode` argument to `TrtGraphConverter` is now case
7075        insensitive.
7076
7077## Thanks to our Contributors
7078
7079This release contains contributions from many people at Google, as well as:
7080
70811e100, a6802739, 4d55397500, a6802739, Abdullah Selek, abenmao, Abolfazl
7082Shahbazi, Adam Richter, Adam Weiss, Ag Ramesh, Alan Du, Albin Joy, Alex, Alex
7083Itkes, Alex Sergeev, Alexander Pivovarov, Alexey Romanov, alhkad, Aman Patel,
7084Amit, Amit Kumar Jaiswal, Amit Srivastava, amoitra, Andreas Eberle, Andrew
7085Lihonosov, Andy Craze, Anshuman Tripathy, Anthony Hsu, Anthony Platanios, Anuj
7086Rawat, arp95, Arpit Shah, Armen Poghosov, armenpoghosov, Astropeak, Ashwin
7087Ramaswami, Arpit Shah, Augustina Ragwitz, Aurelien Geron, AuréLien Geron,
7088avasid, aweers, awesomealex1, Ayush Agrawal, Bas Aarts, Bastian Eichenberger,
7089Bairen Yi, Bayberry Z, Ben Barsdell, Benjamin Peterson, bhack, Bharat
7090Raghunathan, Bhavani Subramanian, Bin Fan, blairhan, BléNesi Attila, Bodin-E,
7091Brandon Carter, Bryan Cutler, candy.dc, Cao Zongyan, Casper Da Costa-Luis, Chao
7092Liu, Chen Guoyin, chenchc, chengchingwen, chie8842, Christian Hansen, Christoph
7093Boeddeker, Christopher Yeh, Clayne Robison, Coady, Patrick, crafet, csukuangfj,
7094ctiijima, Dan Jarvis, Dan Lazewatsky, Daniel Ingram, Daniel Rasmussen, Daniel
7095Salvadori, Dave Airlie, David Norman, Dayananda V, delock, Denis Khalikov, Deven
7096Desai, Dheeraj Rajaram Reddy, Diego Caballero, dmitrievanthony, Donovan Ong,
7097Drew Szurko, Duncan Dean, Duncan Riach, Dustin Neighly, Dwight J Lyle, Eamon
7098Ito-Fisher, eashtian3, Edward Forgacs, EFanZh, ejot, Elroy Ashtian Jr, Eric
7099Schweitz, Evgeniy Polyakov, Fangjun Kuang, Federico Martinez, Fei Hu, Felix
7100Lemke, Filip Matzner, FlashTek, fo40225, formath, FrançOis Chollet, frreiss,
7101Fred Reiss, Frederic Bastien, Fredrik Knutsson, G. Hussain Chinoy, Gabriel,
7102Gautam, gehring, Geoffrey Irving, George Grzegorz Pawelczak, Grzegorz Pawelczak,
7103George Sterpu, Gianluca Varisco, Gleb Popov, Greg Peatfield, Guillaume Klein,
7104Gurpreet Singh, Gustavo Lima Chaves, Gyoung-Yoon Ryoo, haison, Hanton Yang,
7105HanGuo97, Haraldur TóMas HallgríMsson, Hari Shankar, hehongliang, Heungsub Lee,
7106Hoeseong Kim, Huan Li (李卓桓), HåKon Sandsmark, I-Hong, I-Hong Jhuo, Ilham
7107Firdausi Putra, Ilango R, Imran Salam, Innovimax, Jacky Ko, Irene Dea, Ivan
7108Habernal, Jakub Lipinski, Jacky, Jason Zaman, Jason Zavaglia, jayhpark530,
7109jcf94, jefby, Jeff Daily, Jeff Poznanovic, Jeffrey Poznanovic, Jekyll Lai, jer,
7110Jeroen BéDorf, jerryyin, jhalakp, jiakai, Jia Qingtong, Jiankang, JiangXIAO, Joe
7111Bowser, Joe Q, Joe Quadrino, Joel Shapiro, Johan Gunnarsson, Jojimon Varghese,
7112Jonas Rauber, Jonathan Kyl, Jonathan, Joon, Joppe Geluykens, Joseph Friedman,
7113Josh Beal, jtressle, Julian Niedermeier, Junqin Zhang, Justin Dujardin, Justin
7114Tunis, jwu, K. Hodges, kaixih, Kaixi Hou, kjopek, Karl Lessard, Karl
7115Weinmeister, Karthik Muthuraman, Kashif Rasul, Kay Zhu, Kbhute-Ibm, KDR, Keno
7116Fischer, Kevin Mader, khanhlvg, Kilaru Yasaswi Sri Chandra Gandhi, Koan-Sin Tan,
7117Koock Yoon, kouml, ktaebum, Kyuwon Kim, Lakshay Tokas, Laurent Le Brun,
7118leike666666, leonard951, Leslie-Fang, Letian Kang, Li, Guizi, Loo Rong Jie,
7119Lucas Hendren, Lukas Folle, Lukas Geiger, Luke Han, luxupu, lvli, Ma, Guokai,
7120Mahmoud Abuzaina, Maksym Kysylov, Mandar Deshpande, manhyuk, Manraj Singh
7121Grover, Marco Gaido, Marek Drozdowski, Margaret Maynard-Reid, Mark Ryan, mars20,
7122Mateusz Chudyk, Matt Conley, mbhuiyan, mdfaijul, Mei Jie, Melissa Grueter,
7123merturl, MichaelKonobeev, Michael KäUfl, Michal W. Tarnowski, MickaëL
7124Schoentgen, Miguel Morin, Mihail Salnikov, Mikalai Drabovich, Mike Arpaia, Mike
7125Holcomb, minds, monklof, Moses Marin, mpppk, Mr. Metal, Mshr-H, musikisomorphie,
7126nammbash, Natalia Gimelshein, Nathan Luehr, Nayana-Ibm, Nayana Thorat, neargye,
7127Neeraj Pradhan, Nehal J Wani, Neil, Nick, Nick Lewycky, Niels Ole Salscheider,
7128Niklas SilfverströM, Niranjan Hasabnis, Nuka-137, Nutti, ocjosen, olicht,
7129omeir1, P Sudeepam, Paige Bailey, Palmer Lao, Pan Daoxin, Pariksheet Pinjari,
7130Pasquale Minervini, Patrick J. Lopresti, Patrik Gustavsson, Pavel Akhtyamov,
7131Pavel Samolysov, PENGWA, per1234, PeterLee, Phan Van Nguyen Duc, Philipp Jund,
7132Phillip Kravtsov, Pooya Davoodi, Pranav Marathe, Putra Manggala, Qingqing Cao, R
7133S Nikhil Krishna, Rajeshwar Reddy T, Ramon ViñAs, Rasmus Diederichsen, Reuben
7134Morais, robert, Rohit Gupta, Roland Zimmermann, Roman Soldatow, RonLek, Ruizhe,
7135Ryan Jiang, saishruthi, Saleem Abdulrasool, Samantha Andow, Sami Kama,
7136Sana-Damani, Saurabh Deoras, sdamani, Sean Morgan, seanshpark, Sebastien Iooss,
7137Serv-Inc, Severen Redwood, Shahzad Lone, Shashank Gupta, shashvat, Shashvat
7138Chand Shahi, Shubham Goyal, Shashi, Sigrid Keydana, Siju, Siju Samuel,
7139sleighsoft, smilu97, Snease-Abq, Son Tran, Spencer Schaber, sremedios, Srini511,
7140srinivasan.narayanamoorthy, Steve Lang, Steve Nesae, Subin, Sumesh Udayakumaran,
7141Sungmann Cho, sunway513, Supriya Rao, sxwang, Tae-Hwan Jung, Taehoon Lee, Takeo
7142Sawada, Taylor Jakobson, Taylor Thornton, Ted Chang, TengLu, terryky,
7143ThisIsIsaac, ThisIsPIRI, Thomas Deegan, Thomas Hagebols, tianyapiaozi, Till
7144Hoffmann, Tim Zaman, tomguluson92, Tongxuan Liu, Trent Lo, Trevor Morris,
7145TungJerry, Tyorden, Uday Bondhugula, v1incent, Vagif, Vasileios Lioutas,
7146vbvg2008, vcarpani, Vijay Ravichandran, Vikram Tiwari,Viktor Gal, Vishwak
7147Srinivasan, Vincent, Vishnuvardhan Janapati, Vitor-Alves, Vivek Suryamurthy,
7148wangsiyu, wateryzephyr, WeberXie, Wei Wang, WeijieSun, Wen-Heng (Jack) Chung,
7149wenxizhu, Will Battel, William D. Irons, winstonq, wyzhao, Xiaoming (Jason) Cui,
7150Xiaoquan Kong, Xin, Xinping Wang, Yan Facai (颜发才), Yann-Yy, Yasir Modak,
7151Yasuhiro Matsumoto, ymodak, Yong Tang, Yongfeng Gu, Younes Khoudli, Yuan Lin,
7152Yuan (Terry) Tang, Yuchen Ying, Yves-Noel Weweler, zhangyujing, zjjott, zyeric,
7153王振华 (Zhenhua Wang), 黄鑫
7154
7155# Release 1.14.0
7156
7157## Major Features and Improvements
7158
7159*   This is the first 1.x release containing the compat.v2 module. This module
7160    is required to allow libraries to publish code which works in both 1.x and
7161    2.x. After this release, no backwards incompatible changes are allowed in
7162    the 2.0 Python API.
7163*   Turn on MKL-DNN contraction kernels by default. MKL-DNN dynamically
7164    dispatches the best kernel implementation based on CPU vector architecture.
7165    To disable them, build with --define=tensorflow_mkldnn_contraction_kernel=0.
7166
7167## Behavioral changes
7168
7169*   Set default loss reduction as `AUTO` for improving reliability of loss
7170    scaling with distribution strategy and custom training loops. `AUTO`
7171    indicates that the reduction option will be determined by the usage context.
7172    For almost all cases this defaults to `SUM_OVER_BATCH_SIZE`. When used in
7173    distribution strategy scope, outside of built-in training loops such as
7174    `tf.keras` `compile` and `fit`, we expect reduction value to be 'None' or
7175    'SUM'. Using other values will raise an error.
7176*   Wraps losses passed to the `compile` API (strings and v1 losses) which are
7177    not instances of v2 `Loss` class in `LossWrapper` class. => All losses will
7178    now use `SUM_OVER_BATCH_SIZE` reduction as default.
7179*   Disable `run_eagerly` and distribution strategy if there are symbolic
7180    tensors added to the model using `add_metric` or `add_loss`.
7181*   tf.linspace(start, stop, num) now always uses "stop" as last value (for
7182    num > 1)
7183*   `ResourceVariable` and `Variable` no longer accepts `constraint` in the
7184    constructor, nor expose it as a @property.
7185*   The behavior of tf.gather is now correct when axis=None and batch_dims<0.
7186*   Only create a GCS directory object if the object does not already exist.
7187*   In `map_vectorization` optimization, reduce the degree of parallelism in the
7188    vectorized map node.
7189*   Bug fix: loss and gradients should now more reliably be correctly scaled
7190    w.r.t. the global batch size when using a tf.distribute.Strategy.
7191*   Updating cosine similarity loss - removed the negate sign from cosine
7192    similarity.
7193*   DType is no longer convertible to an int. Use dtype.as_datatype_enum instead
7194    of int(dtype) to get the same result.
7195*   Changed default for gradient accumulation for TPU embeddings to true.
7196*   Callbacks now log values in eager mode when a deferred build model is used.
7197*   Transitive dependencies on :pooling_ops were removed. Some users may need to
7198    add explicit dependencies on :pooling_ops if they reference the operators
7199    from that library.
7200*   tf.keras.optimizers default learning rate changes:
7201    *   Adadelta: 1.000 to 0.001
7202    *   Adagrad: 0.01 to 0.001
7203    *   Adamax: 0.002 to 0.001
7204    *   NAdam: 0.002 to 0.001
7205
7206## Bug Fixes and Other Changes
7207
7208*   Documentation
7209*   Deprecations and Symbol renames.
7210    *   Remove unused StringViewVariantWrapper
7211    *   Delete unused Fingerprint64Map op registration
7212    *   SignatureDef util functions have been deprecated.
7213    *   Renamed tf.image functions to remove duplicate "image" where it is
7214        redundant.
7215    *   tf.keras.experimental.export renamed to
7216        tf.keras.experimental.export_saved_model
7217    *   Standardize the LayerNormalization API by replacing the args `norm_axis`
7218        and `params_axis` with `axis`.
7219    *   Tensor::UnsafeCopyFromInternal deprecated in favor Tensor::BitcastFrom
7220*   Keras & Python API
7221    *   Add v2 module aliases for:
7222    *   tf.initializers => tf.keras.initializers
7223    *   tf.losses => tf.keras.losses & tf.metrics => tf.keras.metrics
7224    *   tf.optimizers => tf.keras.optimizers
7225    *   Add tf.keras.layers.AbstractRNNCell as the preferred implementation of
7226        RNN cell for TF v2. User can use it to implement RNN cell with custom
7227        behavior.
7228    *   Adding `clear_losses` API to be able to clear losses at the end of
7229        forward pass in a custom training loop in eager.
7230    *   Add support for passing list of lists to the `metrics` param in Keras
7231        `compile`.
7232    *   Added top-k to precision and recall to keras metrics.
7233    *   Adding public APIs for `cumsum` and `cumprod` keras backend functions.
7234    *   Fix: model.add_loss(symbolic_tensor) should work in ambient eager.
7235    *   Add name argument to tf.string_split and tf.strings_split
7236    *   Minor change to SavedModels exported from Keras using
7237        tf.keras.experimental.export. (SignatureDef key for evaluation mode is
7238        now "eval" instead of "test"). This will be reverted back to "test" in
7239        the near future.
7240    *   Updates binary cross entropy logic in Keras when input is probabilities.
7241        Instead of converting probabilities to logits, we are using the cross
7242        entropy formula for probabilities.
7243    *   Raw TensorFlow functions can now be used in conjunction with the Keras
7244        Functional API during model creation. This obviates the need for users
7245        to create Lambda layers in most cases when using the Functional API.
7246        Like Lambda layers, TensorFlow functions that result in Variable
7247        creation or assign ops are not supported.
7248    *   Keras training and validation curves are shown on the same plot.
7249    *   Introduce `dynamic` constructor argument in Layer and Model, which
7250        should be set to True when using imperative control flow in the `call`
7251        method.
7252    *   Removing of dtype in the constructor of initializers and partition_info
7253        in call.
7254*   New ops and improved op functionality
7255    *   Add OpKernels for some stateless maps
7256    *   Add v2 APIs for AUCCurve and AUCSummationMethod
7257        enums. #tf-metrics-convergence
7258    *   Add tf.math.nextafter op.
7259    *   Add CompositeTensor base class.
7260    *   Add tf.linalg.tridiagonal_solve op.
7261    *   Add opkernel templates for common table operations.
7262    *   Added support for TFLite in TensorFlow 2.0.
7263    *   Adds summary trace API for collecting graph and profile information.
7264    *   Add batch_dims argument to tf.gather.
7265    *   Add support for `add_metric` in the graph function mode.
7266    *   Add C++ Gradient for BatchMatMulV2.
7267    *   Added tf.random.binomial
7268    *   Added gradient for SparseToDense op.
7269    *   Add legacy string flat hash map op kernels
7270    *   Add a ragged size op and register it to the op dispatcher
7271    *   Add broadcasting support to tf.matmul.
7272    *   Add ellipsis (...) support for tf.einsum()
7273    *   Added LinearOperator.adjoint and LinearOperator.H (alias).
7274    *   Added GPU implementation of tf.linalg.tridiagonal_solve.
7275    *   Added strings.byte_split
7276    *   Add RaggedTensor.placeholder()
7277    *   Add a new "result_type" parameter to tf.strings.split
7278    *   `add_update` can now be passed a zero-arg callable in order to support
7279        turning off the update when setting `trainable=False` on a Layer of a
7280        Model compiled with `run_eagerly=True`.
7281    *   Add variant wrapper for absl::string_view
7282    *   Add expand_composites argument to all nest.* methods.
7283    *   Add pfor converter for Squeeze.
7284    *   Bug fix for tf.tile gradient
7285    *   Expose CriticalSection in core as tf.CriticalSection.
7286    *   Update Fingerprint64Map to use aliases
7287    *   ResourceVariable support for gather_nd.
7288    *   ResourceVariable's gather op supports batch dimensions.
7289    *   Variadic reduce is supported on CPU
7290    *   Extend tf.function with basic support for CompositeTensors arguments
7291        (such as SparseTensor and RaggedTensor).
7292    *   Add templates and interfaces for creating lookup tables
7293    *   Post-training quantization tool supports quantizing weights shared by
7294        multiple operations. The models made with versions of this tool will use
7295        INT8 types for weights and will only be executable interpreters from
7296        this version onwards.
7297    *   Malformed gif images could result in an access out of bounds in the
7298        color palette of the frame. This has been fixed now
7299    *   image.resize now considers proper pixel centers and has new kernels
7300        (incl. anti-aliasing).
7301    *   Added an isotonic regression solver (tf.nn.isotonic_regression).
7302*   Performance
7303    *   Turn on MKL-DNN contraction kernels by default. MKL-DNN dynamically
7304        dispatches the best kernel implementation based on CPU vector
7305        architecture. To disable them, build with
7306        --define=tensorflow_mkldnn_contraction_kernel=0.
7307    *   Support for multi-host ncclAllReduce in Distribution Strategy.
7308    *   Expose a flag that allows the number of threads to vary across Python
7309        benchmarks.
7310*   TensorFlow 2.0 Development
7311    *   Add v2 sparse categorical crossentropy metric.
7312    *   Allow non-Tensors through v2 losses.
7313    *   Add UnifiedGRU as the new GRU implementation for tf2.0. Change the
7314        default recurrent activation function for GRU from 'hard_sigmoid' to
7315        'sigmoid', and 'reset_after' to True in 2.0. Historically recurrent
7316        activation is 'hard_sigmoid' since it is fast than 'sigmoid'. With new
7317        unified backend between CPU and GPU mode, since the CuDNN kernel is
7318        using sigmoid, we change the default for CPU mode to sigmoid as well.
7319        With that, the default GRU will be compatible with both CPU and GPU
7320        kernel. This will enable user with GPU to use CuDNN kernel by default
7321        and get a 10x performance boost in training. Note that this is
7322        checkpoint breaking change. If user want to use their 1.x pre-trained
7323        checkpoint, please construct the layer with
7324        GRU(recurrent_activation='hard_sigmoid', reset_after=False) to fallback
7325        to 1.x behavior.
7326    *   TF 2.0 - Update metric name to always reflect what the user has given in
7327        compile. Affects following cases 1. When name is given as
7328        'accuracy'/'crossentropy' 2. When an aliased function name is used eg.
7329        'mse' 3. Removing the `weighted` prefix from weighted metric names.
7330    *   Begin adding Go wrapper for C Eager API
7331    *   image.resize in 2.0 now supports gradients for the new resize kernels.
7332    *   removed tf.string_split from v2 API
7333    *   Expose tf.contrib.proto.* ops in tf.io (they will exist in TF2)
7334    *   "Updates the TFLiteConverter API in 2.0. Changes from_concrete_function
7335        to from_concrete_functions."
7336    *   Enable tf.distribute.experimental.MultiWorkerMirroredStrategy working in
7337        eager mode.
7338    *   Support both binary and -1/1 label input in v2 hinge and squared hinge
7339        losses.
7340*   TensorFlow Lite
7341    *   "Adds support for tflite_convert in 2.0."
7342    *   "Remove lite.OpHint, lite.experimental, and lite.constant from 2.0 API."
7343*   tf.contrib
7344    *   Added Neural Turing Implementation as described in
7345        https://arxiv.org/abs/1807.08518.
7346    *   Remove tf.contrib.timeseries dependency on TF distributions.
7347*   tf.data
7348    *   Add num_parallel_reads and passing in a Dataset containing filenames
7349        into TextLineDataset and FixedLengthRecordDataset
7350    *   Going forward we operate in TF 2.0, this change is part of the effort to
7351        slowly converting XYZDataset to DatasetV2 type which is the official
7352        version going to be used in TF 2.0 and motivated by some compatibility
7353        issue found, _BigtableXYZDataset (of type DatasetV2) does not implement
7354        the _as_variant_tensor() of DatasetV1, when moving contrib.bigtable to
7355        tensorflow_io. Converting into DatasetV2 removes the overheads to
7356        maintain V1 while we are moving into TF 2.0.
7357    *   Add dataset ops to the graph (or create kernels in Eager execution)
7358        during the python Dataset object creation instead doing it during
7359        Iterator creation time.
7360    *   Add support for TensorArrays to tf.data Dataset.
7361    *   Switching tf.data functions to use `defun`, providing an escape hatch to
7362        continue using the legacy `Defun`.
7363*   Toolchains
7364    *   CUDNN_INSTALL_PATH, TENSORRT_INSTALL_PATH, NCCL_INSTALL_PATH,
7365        NCCL_HDR_PATH are deprecated. Use TF_CUDA_PATHS instead which supports a
7366        comma-separated list of base paths that are searched to find CUDA
7367        libraries and headers.
7368    *   TF code now resides in `tensorflow_core` and `tensorflow` is just a
7369        virtual pip package. No code changes are needed for projects using
7370        TensorFlow, the change is transparent
7371*   XLA
7372    *   XLA HLO graphs can be inspected with interactive_graphviz tool now.
7373*   Estimator
7374    *   Use tf.compat.v1.estimator.inputs instead of tf.estimator.inputs
7375    *   Replace contrib references with tf.estimator.experimental.* for apis in
7376        early_stopping.py
7377
7378## Thanks to our Contributors
7379
7380This release contains contributions from many people at Google, as well as:
7381
73821e100, 4d55397500, a6802739, abenmao, Adam Weiss, Ag Ramesh, Alan Du, Albin Joy,
7383Alex, Aman Patel, Amit, Amit Kumar Jaiswal, Amit Srivastava, Andreas Eberle,
7384Andy Craze, Anthony Platanios, Armen Poghosov, armenpoghosov, arp95, Arpit Shah,
7385Ashwin Ramaswami, Aurelien Geron, AuréLien Geron, aweers, awesomealex1, Ayush
7386Agrawal, Ben Barsdell, Bharat Raghunathan, Bhavani Subramanian, blairhan,
7387BléNesi Attila, Brandon Carter, candy.dc, Chao Liu, chenchc, chie8842, Christian
7388Hansen, Christian Sigg, Clayne Robison, crafet, csukuangfj, ctiijima, Dan
7389Jarvis, Dan Lazewatsky, Daniel Ingram, Daniel Salvadori, Dave Airlie, David
7390Norman, Dayananda V, Dayananda-V, delock, Denis Khalikov, Deven Desai, Dheeraj
7391Rajaram Reddy, dmitrievanthony, Donovan Ong, Drew Szurko, Duncan Riach, Dustin
7392Neighly, Edward Forgacs, EFanZh, Fei Hu, Felix Lemke, Filip Matzner, fo40225,
7393frreiss, Gautam, gehring, Geoffrey Irving, Grzegorz George Pawelczak, Grzegorz
7394Pawelczak, Gyoung-Yoon Ryoo, HanGuo97, Hanton Yang, Hari Shankar, hehongliang,
7395Heungsub Lee, Hoeseong Kim, I-Hong Jhuo, Ilango R, Innovimax, Irene Dea, Jacky
7396Ko, Jakub Lipinski, Jason Zaman, jcf94, Jeffrey Poznanovic, Jens Elofsson,
7397Jeroen BéDorf, Jia Qingtong, Jiankang, Joe Q, Joe Quadrino, Joeran Beel, Jonas
7398Rauber, Jonathan, Jonathan Kyl, Joppe Geluykens, Joseph Friedman, jtressle, jwu,
7399K Yasaswi Sri Chandra Gandhi, K. Hodges, Kaixi Hou, Karl Lessard, Karl
7400Weinmeister, Karthik Muthuraman, Kashif Rasul, KDR, Keno Fischer, Kevin Mader,
7401kjopek, Koan-Sin Tan, kouml, ktaebum, Lakshay Tokas, Laurent Le Brun, Letian
7402Kang, Li, Guizi, Loo Rong Jie, Lucas Hendren, Lukas Geiger, Luke Han, luxupu,
7403Ma, Guokai, Mahmoud Abuzaina, Mandar Deshpande, manhyuk, Marco Gaido, Marek
7404Drozdowski, Mark Collier, Mark Ryan, mars20, Mateusz Chudyk, Matt Conley,
7405MattConley, mbhuiyan, mdfaijul, Melissa Grueter, Michael KäUfl, MickaëL
7406Schoentgen, Miguel Morin, Mihail Salnikov, Mike Arpaia, Mike Holcomb, monklof,
7407Moses Marin, Mshr-H, nammbash, Natalia Gimelshein, Nayana-Ibm, neargye, Neeraj
7408Pradhan, Nehal J Wani, Nick, Niels Ole Salscheider, Niranjan Hasabnis, nlewycky,
7409Nuka-137, Nutti, olicht, P Sudeepam, Palmer Lao, Pan Daoxin, Pariksheet Pinjari,
7410Pavel Samolysov, PENGWA, Pooya Davoodi, R S Nikhil Krishna, Rohit Gupta, Roman
7411Soldatow, rthadur, Ruizhe, Ryan Jiang, Samantha Andow, Sami Kama, Sana-Damani,
7412Saurabh Deoras, sdamani, seanshpark, Sebastien Iooss, Serv-Inc, Shahzad Lone,
7413Shashank Gupta, Shashi, shashvat, shashvatshahi1998, Siju, Siju Samuel,
7414Snease-Abq, Spencer Schaber, sremedios, srinivasan.narayanamoorthy, Steve Lang,
7415Steve Nesae, Sumesh Udayakumaran, Supriya Rao, Taylor Jakobson, Taylor Thornton,
7416Ted Chang, ThisIsPIRI, Thomas Deegan, Thomas Hagebols, tianyapiaozi, Tim Zaman,
7417tomguluson92, Tongxuan Liu, TungJerry, v1incent, Vagif, vcarpani, Vikram Tiwari,
7418Vishwak Srinivasan, Vitor-Alves, wangsiyu, wateryzephyr, WeberXie, WeijieSun,
7419Wen-Heng (Jack) Chung, wenxizhu, Will Battel, William D. Irons, wyzhao, Xin,
7420Yasuhiro Matsumoto, ymodak, Yong Tang, Younes Khoudli, Yuan Lin, Yves-Noel
7421Weweler, Zantares, zjjott, 卜居, 王振华 (Wang Zhenhua), 黄鑫
7422
7423# Release 1.12.3
7424
7425## Bug Fixes and Other Changes
7426
7427*   Updates `png_archive` dependency to 1.6.37 to not be affected by
7428    CVE-2019-7317, CVE-2018-13785, and CVE-2018-14048.
7429*   Updates `sqlite` dependency to 3.28.0 to not be affected by CVE-2018-20506,
7430    CVE-2018-20346, and CVE-2018-20505.
7431
7432# Release 1.12.2
7433
7434## Bug Fixes and Other Changes
7435
7436*   Fixes a potential security vulnerability where carefully crafted GIF images
7437    can produce a null pointer dereference during decoding.
7438
7439# Release 1.13.0
7440
7441## Major Features and Improvements
7442
7443*   TensorFlow Lite has moved from contrib to core. This means that Python
7444    modules are under `tf.lite` and source code is now under `tensorflow/lite`
7445    rather than `tensorflow/contrib/lite`.
7446*   TensorFlow GPU binaries are now built against CUDA 10 and TensorRT 5.0.
7447*   Support for Python3.7 on all operating systems.
7448*   Moved NCCL to core.
7449
7450## Behavioral changes
7451
7452*   Disallow conversion of python floating types to uint32/64 (matching behavior
7453    of other integer types) in `tf.constant`.
7454*   Make the `gain` argument of convolutional orthogonal initializers
7455    (`convolutional_delta_orthogonal`, `convolutional_orthogonal_1D`,
7456    `convolutional_orthogonal_2D`, `convolutional_orthogonal_3D`) have
7457    consistent behavior with the `tf.initializers.orthogonal` initializer, i.e.
7458    scale the output l2-norm by `gain` and NOT by `sqrt(gain)`. (Note that these
7459    functions are currently in `tf.contrib` which is not guaranteed backward
7460    compatible).
7461
7462## Bug Fixes and Other Changes
7463
7464*   Documentation
7465    *   Update the doc with the details about the rounding mode used in
7466        quantize_and_dequantize_v2.
7467    *   Clarify that tensorflow::port::InitMain() *should* be called before
7468        using the TensorFlow library. Programs failing to do this are not
7469        portable to all platforms.
7470*   Deprecations and Symbol renames.
7471    *   Removing deprecations for the following endpoints: `tf.acos`,
7472        `tf.acosh`, `tf.add`, `tf.as_string`, `tf.asin`, `tf.asinh`, `tf.atan`,
7473        `tf.atan2`, `tf.atanh`, `tf.cos`, `tf.cosh`, `tf.equal`, `tf.exp`,
7474        `tf.floor`, `tf.greater`, `tf.greater_equal`, `tf.less`,
7475        `tf.less_equal`, `tf.log`, `tf.logp1`, `tf.logical_and`,
7476        `tf.logical_not`, `tf.logical_or`, `tf.maximum`, `tf.minimum`,
7477        `tf.not_equal`, `tf.sin`, `tf.sinh`, `tf.tan`
7478    *   Deprecate `tf.data.Dataset.shard`.
7479    *   Deprecate `saved_model.loader.load` which is replaced by
7480        `saved_model.load` and `saved_model.main_op`, which will be replaced by
7481        `saved_model.main_op` in V2.
7482    *   Deprecate tf.QUANTIZED_DTYPES. The official new symbol is
7483        tf.dtypes.QUANTIZED_DTYPES.
7484    *   Update sklearn imports for deprecated packages.
7485    *   Deprecate `Variable.count_up_to` and `tf.count_up_to` in favor of
7486        `Dataset.range`.
7487    *   Export `confusion_matrix` op as `tf.math.confusion_matrix` instead of
7488        `tf.train.confusion_matrix`.
7489    *   Add `tf.dtypes.` endpoint for every constant in dtypes.py. Moving
7490        endpoints in versions.py to corresponding endpoints in `tf.sysconfig.`
7491        and `tf.version.`. Moving all constants under `tf.saved_model`
7492        submodules to `tf.saved_model` module. New endpoints are added in V1 and
7493        V2 but existing endpoint removals are only applied in V2.
7494    *   Deprecates behavior where device assignment overrides collocation
7495        constraints inside a collocation context manager.
7496*   Keras & Python API
7497    *   Add to Keras functionality analogous to
7498        `tf.register_tensor_conversion_function`.
7499    *   Subclassed Keras models can now be saved through
7500        `tf.contrib.saved_model.save_keras_model`.
7501    *   `LinearOperator.matmul` now returns a new `LinearOperator`.
7502*   New ops and improved op functionality
7503    *   Add a Nearest Neighbor Resize op.
7504    *   Add an `ignore_unknown` argument to `parse_values` which suppresses
7505        ValueError for unknown hyperparameter types. Such * Add
7506        `tf.linalg.matvec` convenience function.
7507    *   `tf.einsum()`raises `ValueError` for unsupported equations like
7508        `"ii->"`.
7509    *   Add DCT-I and IDCT-I in `tf.signal.dct` and `tf.signal.idct`.
7510    *   Add LU decomposition op.
7511    *   Add quantile loss to gradient boosted trees in estimator.
7512    *   Add `round_mode` to `QuantizeAndDequantizeV2` op to select rounding
7513        algorithm.
7514    *   Add `unicode_encode`, `unicode_decode`, `unicode_decode_with_offsets`,
7515        `unicode_split`, `unicode_split_with_offset`, and `unicode_transcode`
7516        ops. Amongst other things, this Op adds the ability to encode, decode,
7517        and transcode a variety of input text encoding formats into the main
7518        Unicode encodings (UTF-8, UTF-16-BE, UTF-32-BE)
7519    *   Add "unit" attribute to the substr op, which allows obtaining the
7520        substring of a string containing unicode characters.
7521    *   Broadcasting support for Ragged Tensors.
7522    *   `SpaceToDepth` supports uint8 data type.
7523    *   Support multi-label quantile regression in estimator.
7524    *   We now use "div" as the default partition_strategy in
7525        `tf.nn.safe_embedding_lookup_sparse`, `tf.nn.sampled_softmax` and
7526        `tf.nn.nce_loss`. hyperparameter are ignored.
7527*   Performance
7528    *   Improve performance of GPU cumsum/cumprod by up to 300x.
7529    *   Added support for weight decay in most TPU embedding optimizers,
7530        including AdamW and MomentumW.
7531*   TensorFlow 2.0 Development
7532    *   Add a command line tool to convert to TF2.0, tf_upgrade_v2
7533    *   Merge `tf.spectral` into `tf.signal` for TensorFlow 2.0.
7534    *   Change the default recurrent activation function for LSTM from
7535        'hard_sigmoid' to 'sigmoid' in 2.0. Historically recurrent activation is
7536        'hard_sigmoid' since it is fast than 'sigmoid'. With new unified backend
7537        between CPU and GPU mode, since the CuDNN kernel is using sigmoid, we
7538        change the default for CPU mode to sigmoid as well. With that, the
7539        default LSTM will be compatible with both CPU and GPU kernel. This will
7540        enable user with GPU to use CuDNN kernel by default and get a 10x
7541        performance boost in training. Note that this is checkpoint breaking
7542        change. If user want to use their 1.x pre-trained checkpoint, please
7543        construct the layer with LSTM(recurrent_activation='hard_sigmoid') to
7544        fallback to 1.x behavior.
7545*   TensorFlow Lite
7546    *   Move from `tensorflow/contrib/lite` to `tensorflow/lite`.
7547    *   Add experimental Java API for injecting TensorFlow Lite delegates
7548    *   Add support for strings in TensorFlow Lite Java API.
7549*   `tf.contrib`:
7550    *   Add Apache Ignite Filesystem plugin to support accessing Apache IGFS.
7551    *   Dropout now takes `rate` argument, `keep_prob` is deprecated.
7552    *   Estimator occurrences references `tf.contrib.estimator` were changed to
7553        `tf.estimator`:
7554    *   `tf.contrib.estimator.BaselineEstimator` with
7555        `tf.estimator.BaselineEstimator`
7556    *   `tf.contrib.estimator.DNNLinearCombinedEstimator` with
7557        `tf.estimator.DNNLinearCombinedEstimator`
7558    *   `tf.contrib.estimator.DNNEstimator` with `tf.estimator.DNNEstimator`
7559    *   `tf.contrib.estimator.LinearEstimator` with
7560        `tf.estimator.LinearEstimator`
7561    *   `tf.contrib.estimator.InMemoryEvaluatorHook` and
7562        tf.estimator.experimental.InMemoryEvaluatorHook`.
7563    *   `tf.contrib.estimator.make_stop_at_checkpoint_step_hook` with
7564        `tf.estimator.experimental.make_stop_at_checkpoint_step_hook`.
7565    *   Expose `tf.distribute.Strategy as the new name for
7566        tf.contrib.distribute.DistributionStrategy.
7567    *   Migrate linear optimizer from contrib to core.
7568    *   Move `tf.contrib.signal` to `tf.signal` (preserving aliases in
7569        tf.contrib.signal).
7570    *   Users of `tf.contrib.estimator.export_all_saved_models` and related
7571        should switch to
7572        `tf.estimator.Estimator.experimental_export_all_saved_models`.
7573*   tf.data:
7574    *   Add `tf.data.experimental.StatsOptions()`, to configure options to
7575        collect statistics from `tf.data.Dataset` pipeline using
7576        `StatsAggregator`. Add nested option, `experimental_stats` (which takes
7577        a `tf.data.experimen tal.StatsOptions` object), to `tf.data.Options`.
7578        Deprecates `tf.data.experimental.set_stats_agregator`.
7579    *   Performance optimizations:
7580    *   Add `tf.data.experimental.OptimizationOptions()`, to configure options
7581        to enable `tf.data` performance optimizations. Add nested option,
7582        `experimental_optimization` (which takes a
7583        `tf.data.experimental.OptimizationOptions` object), to
7584        `tf.data.Options`. Remove performance optimization options from
7585        `tf.data.Options`, and add them under
7586        `tf.data.experimental.OptimizationOptions` instead.
7587    *   Enable `map_and_batch_fusion` and `noop_elimination` optimizations by
7588        default. They can be disabled by configuring
7589        `tf.data.experimental.OptimizationOptions` to set `map_and_batch =
7590        False` or `noop_elimination = False` respectively. To disable all
7591        default optimizations, set `apply_default_optimizations = False`.
7592    *   Support parallel map in `map_and_filter_fusion`.
7593    *   Disable static optimizations for input pipelines that use non-resource
7594        `tf.Variable`s.
7595    *   Add NUMA-aware MapAndBatch dataset.
7596    *   Deprecate `tf.data.Dataset.make_one_shot_iterator()` in V1, removed it
7597        from V2, and added tf.compat.v1.data.make_one_shot_iterator()`.
7598    *   Deprecate `tf.data.Dataset.make_initializable_iterator()` in V1, removed
7599        it from V2, and added `tf.compat.v1.data.make_initializable_iterator()`.
7600    *   Enable nested dataset support in core `tf.data` transformations.
7601    *   For `tf.data.Dataset` implementers: Added
7602        `tf.data.Dataset._element_structured property` to replace
7603        `Dataset.output_{types,shapes,classes}`.
7604    *   Make `num_parallel_calls` of `tf.data.Dataset.interleave` and
7605        `tf.data.Dataset.map` work in Eager mode.
7606*   Toolchains
7607    *   Fixed OpenSSL compatibility by avoiding `EVP_MD_CTX_destroy`.
7608    *   Added bounds checking to printing deprecation warnings.
7609    *   Upgraded CUDA dependency to 10.0
7610    *   To build with Android NDK r14b, add "#include <linux/compiler.h>" to
7611        android-ndk-r14b/platforms/android-14/arch-*/usr/include/linux/futex.h
7612    *   Removed `:android_tensorflow_lib_selective_registration*` targets, use
7613        `:android_tensorflow_lib_lite*` targets instead.
7614*   XLA
7615    *   Move `RoundToEven` function to xla/client/lib/math.h.
7616    *   A new environment variable `TF_XLA_DEBUG_OPTIONS_PASSTHROUGH` set to "1"
7617        or "true" allows the debug options passed within an XRTCompile op to be
7618        passed directly to the XLA compilation backend. If such variable is not
7619        set (service side), only a restricted set will be passed through.
7620    *   Allow the XRTCompile op to return the ProgramShape resulted form the XLA
7621        compilation as a second return argument.
7622    *   XLA HLO graphs can now be rendered as SVG/HTML.
7623*   Estimator
7624    *   Replace all occurrences of `tf.contrib.estimator.BaselineEstimator` with
7625        `tf.estimator.BaselineEstimator`
7626    *   Replace all occurrences of
7627        `tf.contrib.estimator.DNNLinearCombinedEstimator` with
7628        `tf.estimator.DNNLinearCombinedEstimator`
7629    *   Replace all occurrences of `tf.contrib.estimator.DNNEstimator` with
7630        `tf.estimator.DNNEstimator`
7631    *   Replace all occurrences of `tf.contrib.estimator.LinearEstimator` with
7632        `tf.estimator.LinearEstimator`
7633    *   Users of `tf.contrib.estimator.export_all_saved_models` and related
7634        should switch to
7635        `tf.estimator.Estimator.experimental_export_all_saved_models`.
7636    *   Update `regression_head` to the new Head API for Canned Estimator V2.
7637    *   Switch `multi_class_head` to Head API for Canned Estimator V2.
7638    *   Replace all occurrences of `tf.contrib.estimator.InMemoryEvaluatorHook`
7639        and `tf.contrib.estimator.make_stop_at_checkpoint_step_hook` with
7640        `tf.estimator.experimental.InMemoryEvaluatorHook` and
7641        `tf.estimator.experimental.make_stop_at_checkpoint_step_hook`
7642    *   Migrate linear optimizer from contrib to core.
7643
7644## Thanks to our Contributors
7645
7646This release contains contributions from many people at Google, as well as:
7647
7648Abhinav Upadhyay, Ag Ramesh, akikaaa, Alexis Louis, Anders Huss, Andreas Madsen,
7649Andrew Banchich, Andy Craze, Anton Dmitriev, Artem Malykh, Avijit-Nervana,
7650Balint Cristian, Benjamin Tan Wei Hao, Bhavani Subramanian, Brendan Finan, Brian
7651Nemsick, Bryan Cutler, By Shen, Cao Zongyan, Castiel, Chris Antaki, Christian
7652Goll, Cibifang, Clayne Robison, Codrut Grosu, Cong Xu, Dalmo Cirne, Daniel
7653Hunter, Dougal J. Sutherland, Edvard Fagerholm, EFanZh, Erik Smistad, Evgeniy
7654Polyakov, Feiyang Chen, franklin5, Fred Reiss, Gautam, gehring, Geoffrey Irving,
7655George Sterpu, Gitea, Grzegorz George Pawelczak, Guozhong Zhuang, himkt,
7656Hoeseong Kim, Huan Li (李卓桓), HuiyangFei, hyunyoung, Isaac Burbank, jackonan,
7657Jacky Ko, Jason Furmanek, Jason Zaman, Javier Luraschi, Jiang,Zhoulong, joaak,
7658John Lin, Jonathan Wyatt Hoech, josephyearsley, Josh Gordon, Julian Niedermeier,
7659Karl Lessard, Keno Fischer, lanhin, Leon Graser, leondgarse, Li, Guizi, Li,
7660Yiqiang, lxl910915, Mahmoud Abuzaina, manhyuk, Marcela Morales Quispe,
7661margaretmz, Matt Conley, Max Pumperla, mbhuiyan, mdfaijul, Meng, Peng, Michael,
7662Michael Gielda, mrTsjolder, Muhammad Wildan, neargye, Nehal J Wani, NEWPLAN,
7663Niranjan Hasabnis, Nutti, olicht, Pan Daoxin, Pedro Monreal, Peng Yu,
7664pillarpond, Pooya Davoodi, qiezi, Rholais Lii, Richard Yu, Rin Arakaki, Roger
7665Iyengar, sahilbadyal, Sami Kama, Sandip Giri, Scott Leishman, Serge Panev,
7666Seunghoon Park, Shafi Dayatar, shengfuintel, Shimin Guo, Siju, silent567, Stefan
7667Dyulgerov, steven, Tao Wei, Thor Johnsen, Tingbo Lu, tomguluson92, Tongxuan Liu,
7668Trevor Morris, Ubuntu, Vadim Borisov, vanderliang, wangsiyu, Wen Yun, Wen-Heng
7669(Jack) Chung, wenxizhu, William D. Irons, Xiaoming (Jason) Cui, Yan Facai (颜发才),
7670Yanbo Liang, Yaniv Blumenfeld, Yash Gaurkar, Yicheng Fan, Yong Tang, Yongjoon
7671Lee, Yuan (Terry) Tang, Yuxin Wu, zldrobit
7672
7673# Release 1.12.0
7674
7675## Major Features and Improvements
7676
7677*   Keras models can now be directly exported to the SavedModel
7678    format(`tf.contrib.saved_model.save_keras_model()`) and used with Tensorflow
7679    Serving.
7680*   Keras models now support evaluating with a `tf.data.Dataset`.
7681*   TensorFlow binaries are built with XLA support linked in by default.
7682*   Ignite Dataset added to contrib/ignite that allows to work with Apache
7683    Ignite.
7684
7685## Bug Fixes and Other Changes
7686
7687*   tf.data:
7688    *   tf.data users can now represent, get, and set options of TensorFlow
7689        input pipelines using `tf.data.Options()`, `tf.data.Dataset.options()`,
7690        and `tf.data.Dataset.with_options()` respectively.
7691    *   New `tf.data.Dataset.reduce()` API allows users to reduce a finite
7692        dataset to a single element using a user-provided reduce function.
7693    *   New `tf.data.Dataset.window()` API allows users to create finite windows
7694        of input dataset; when combined with the `tf.data.Dataset.reduce()` API,
7695        this allows users to implement customized batching.
7696    *   All C++ code moves to the `tensorflow::data` namespace.
7697    *   Add support for `num_parallel_calls` to `tf.data.Dataset.interleave`.
7698*   `tf.contrib`:
7699    *   Remove `tf.contrib.linalg`. `tf.linalg` should be used instead.
7700    *   Replace any calls to `tf.contrib.get_signature_def_by_key(metagraph_def,
7701        signature_def_key)` with
7702        `meta_graph_def.signature_def[signature_def_key]`. Catching a ValueError
7703        exception thrown by `tf.contrib.get_signature_def_by_key` should be
7704        replaced by catching a KeyError exception.
7705*   `tf.contrib.data`
7706    *   Deprecate, and replace by tf.data.experimental.
7707*   Other:
7708    *   Instead of jemalloc, revert back to using system malloc since it
7709        simplifies build and has comparable performance.
7710    *   Remove integer types from `tf.nn.softplus` and `tf.nn.softsign` OpDefs.
7711        This is a bugfix; these ops were never meant to support integers.
7712    *   Allow subslicing Tensors with a single dimension.
7713    *   Add option to calculate string length in Unicode characters.
7714    *   Add functionality to SubSlice a tensor.
7715    *   Add searchsorted (ie lower/upper_bound) op.
7716    *   Add model explainability to Boosted Trees.
7717    *   Support negative positions for tf.substr.
7718    *   There was previously a bug in the bijector_impl where the
7719        _reduce_jacobian_det_over_event does not handle scalar ILDJ
7720        implementations properly.
7721    *   In tf eager execution, allow re-entering a GradientTape context.
7722    *   Add tf_api_version flag. If --define=tf_api_version=2 flag is passed in,
7723        then bazel will build TensorFlow API version 2.0. Note that TensorFlow
7724        2.0 is under active development and has no guarantees at this point.
7725    *   Add additional compression options to TfRecordWriter.
7726    *   Performance improvements for regex full match operations.
7727    *   Replace tf.GraphKeys.VARIABLES with `tf.GraphKeys.GLOBAL_VARIABLES`.
7728    *   Remove unused dynamic learning rate support.
7729
7730## Thanks to our Contributors
7731
7732This release contains contributions from many people at Google, as well as:
7733
7734(David) Siu-Kei Muk, Ag Ramesh, Anton Dmitriev, Artem Sobolev, Avijit-Nervana,
7735Bairen Yi, Bruno Goncalves, By Shen, candy.dc, Cheng Chen, Clayne Robison,
7736coder3101, Dao Zhang, Elms, Fei Hu, feiquan, Geoffrey Irving, Guozhong Zhuang,
7737hellcom, Hoeseong Kim, imsheridan, Jason Furmanek, Jason Zaman, Jenny Sahng,
7738jiefangxuanyan, Johannes Bannhofer, Jonathan Homer, Koan-Sin Tan, kouml, Loo
7739Rong Jie, Lukas Geiger, manipopopo, Ming Li, Moritz KröGer, Naurril, Niranjan
7740Hasabnis, Pan Daoxin, Peng Yu, pengwa, rasmi, Roger Xin, Roland Fernandez, Sami
7741Kama, Samuel Matzek, Sangjung Woo, Sergei Lebedev, Sergii Khomenko, shaohua,
7742Shaohua Zhang, Shujian2015, Sunitha Kambhampati, tomguluson92, ViníCius Camargo,
7743wangsiyu, weidankong, Wen-Heng (Jack) Chung, William D. Irons, Xin Jin, Yan
7744Facai (颜发才), Yanbo Liang, Yash Katariya, Yong Tang, 在原佐为
7745
7746# Release 1.11.0
7747
7748## Major Features and Improvements
7749
7750*   Nvidia GPU:
7751    *   Prebuilt binaries are now (as of TensorFlow 1.11) built against cuDNN
7752        7.2 and TensorRT 4. See updated install guides:
7753        [Installing TensorFlow on Ubuntu](https://www.tensorflow.org/install/install_linux#tensorflow_gpu_support)
7754*   Google Cloud TPU:
7755    *   Experimental tf.data integration for Keras on Google Cloud TPUs.
7756    *   Experimental / preview support for eager execution on Google Cloud TPUs.
7757*   DistributionStrategy:
7758    *   Add multi-GPU DistributionStrategy support in tf.keras. Users can now
7759        use `fit`, `evaluate` and `predict` to distribute their model on
7760        multiple GPUs.
7761    *   Add multi-worker DistributionStrategy and standalone client support in
7762        Estimator. See
7763        [README](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/distribute)
7764        for more details.
7765*   Add C, C++, and Python functions for querying kernels.
7766
7767## Breaking Changes
7768
7769*   Keras:
7770    *   The default values for tf.keras `RandomUniform`, `RandomNormal`, and
7771        `TruncatedNormal` initializers have been changed to match those in
7772        external Keras.
7773    *   Breaking change: `model.get_config()` on a Sequential model now returns
7774        a config dictionary (consistent with other Model instances) instead of a
7775        list of configs for the underlying layers.
7776
7777## Bug Fixes and Other Changes
7778
7779*   C++:
7780    *   Changed the signature of SessionFactory::NewSession so that it can
7781        return a meaningful error message on failure.
7782*   tf.data:
7783    *   Remove `num_parallel_parser_calls` argument from
7784        `tf.contrib.data.make_csv_dataset()`. [tf.data] Remove
7785        `num_parallel_parser_calls` argument from
7786        `tf.contrib.data.make_csv_dataset()`.
7787    *   `tf.data.Dataset.list_files()` raises an exception at initialization
7788        time if the argument matches no files.
7789    *   Renamed BigTable class to BigtableTable for clarity
7790    *   Document use of the Cloud Bigtable API
7791    *   Add `tf.contrib.data.reduce_dataset` which can be used to reduce a
7792        dataset to a single element.
7793    *   Generalization of `tf.contrib.data.sliding_window_batch`.
7794*   INC:
7795    *   Runtime improvements to triangular solve.
7796*   `tf.contrib`:
7797    *   Add an `implementation` argument to `tf.keras.layers.LocallyConnected2D`
7798        and `tf.keras.layers.LocallyConnected1D`. The new mode
7799        (`implementation=2`) performs forward pass as a single dense matrix
7800        multiplication, allowing dramatic speedups in certain scenarios (but
7801        worse performance in others - see docstring). The option also allows to
7802        use `padding=same`.
7803    *   Add documentation clarifying the differences between tf.fill and
7804        tf.constant.
7805    *   Add experimental IndexedDatasets.
7806    *   Add selective registration target using the lite proto runtime.
7807    *   Add simple Tensor and DataType classes to TensorFlow Lite Java
7808    *   Add support for bitcasting to/from uint32 and uint64.
7809    *   Added a subclass of Estimator that can be created from a SavedModel
7810        (SavedModelEstimator).
7811    *   Adds leaf index modes as an argument.
7812    *   Allow a different output shape from the input in
7813        tf.contrib.image.transform.
7814    *   Change the state_size order of the StackedRNNCell to be natural order.
7815        To keep the existing behavior, user can add reverse_state_order=True
7816        when constructing the StackedRNNCells.
7817    *   Deprecate self.test_session() in favor of self.session() or
7818        self.cached_session().
7819    *   Directly import tensor.proto.h (the transitive import will be removed
7820        from tensor.h soon).
7821    *   Estimator.train() now supports tf.contrib.summary.\* summaries out of
7822        the box; each call to .train() will now create a separate tfevents file
7823        rather than re-using a shared one.
7824    *   Fix FTRL L2-shrinkage behavior: the gradient from the L2 shrinkage term
7825        should not end up in the accumulator.
7826    *   Fix toco compilation/execution on Windows.
7827    *   GoogleZoneProvider class added to detect which Google Cloud Engine zone
7828        tensorflow is running in.
7829    *   It is now safe to call any of the C API's TF_Delete\* functions on
7830        nullptr.
7831    *   Log some errors on Android to logcat.
7832    *   Match FakeQuant numerics in TFLite to improve accuracy of TFLite
7833        quantized inference models.
7834    *   Optional bucket location check for the GCS Filesystem.
7835    *   Performance enhancements for StringSplitOp & StringSplitV2Op.
7836    *   Performance improvements for regex replace operations.
7837    *   TFRecordWriter now raises an error if .write() fails.
7838    *   TPU: More helpful error messages in TPUClusterResolvers.
7839    *   The legacy_init_op argument to SavedModelBuilder methods for adding
7840        MetaGraphs has been deprecated. Please use the equivalent main_op
7841        argument instead. As part of this, we now explicitly check for a single
7842        main_op or legacy_init_op at the time of SavedModel building, whereas
7843        the check on main_op was previously only done at load time.
7844    *   The protocol used for Estimator training is now configurable in
7845        RunConfig.
7846    *   Triangular solve performance improvements.
7847    *   Unify RNN cell interface between TF and Keras. Add new
7848        get_initial_state() to Keras and TF RNN cell, which will use to replace
7849        the existing zero_state() method.
7850    *   Update initialization of variables in Keras.
7851    *   Updates to "constrained_optimization" in tensorflow/contrib.
7852    *   boosted trees: adding pruning mode.
7853    *   tf.train.Checkpoint does not delete old checkpoints by default.
7854    *   tfdbg: Limit the total disk space occupied by dumped tensor data to 100
7855        GBytes. Add environment variable `TFDBG_DISK_BYTES_LIMIT` to allow
7856        adjustment of this upper limit.
7857
7858## Thanks to our Contributors
7859
7860This release contains contributions from many people at Google, as well as:
7861
7862Aapeli, adoda, Ag Ramesh, Amogh Mannekote, Andrew Gibiansky, Andy Craze, Anirudh
7863Koul, Aurelien Geron, Avijit, Avijit-Nervana, Ben, Benjamin H. Myara, bhack,
7864Brett Koonce, Cao Zongyan, cbockman, cheerss, Chikanaga Tomoyuki, Clayne
7865Robison, cosine0, Cui Wei, Dan J, David, David Norman, Dmitry Klimenkov, Eliel
7866Hojman, Florian Courtial, fo40225, formath, Geoffrey Irving, gracehoney,
7867Grzegorz Pawelczak, Guoliang Hua, Guozhong Zhuang, Herman Zvonimir DošIlović,
7868HuiyangFei, Jacker, Jan HüNnemeyer, Jason Taylor, Jason Zaman, Jesse,
7869Jiang,Zhoulong, Jiawei Zhang, Jie, Joe Yearsley, Johannes Schmitz, Jon Perl, Jon
7870Triebenbach, Jonathan, Jonathan Hseu, Jongmin Park, Justin Shenk, [email protected],
7871Kate Hodesdon, Kb Sriram, Keishi Hattori, Kenneth Blomqvist, Koan-Sin Tan, Li
7872Liangbin, Li, Yiqiang, Loo Rong Jie, Madiyar, Mahmoud Abuzaina, Mark Ryan, Matt
7873Dodge, mbhuiyan, melvinljy96, Miguel Mota, Nafis Sadat, Nathan Luehr, naurril,
7874Nehal J Wani, Niall Moran, Niranjan Hasabnis, Nishidha Panpaliya, npow, olicht,
7875Pei Zhang, Peng Wang (Simpeng), Peng Yu, Philipp Jund, Pradeep Banavara, Pratik
7876Kalshetti, qwertWZ, Rakesh Chada, Randy West, Ray Kim, Rholais Lii, Robin
7877Richtsfeld, Rodrigo Silveira, Ruizhi, Santosh Kumar, Seb Bro, Sergei Lebedev,
7878sfujiwara, Shaba Abhiram, Shashi, SneakyFish5, Soila Kavulya, Stefan Dyulgerov,
7879Steven Winston, Sunitha Kambhampati, Surry Shome, Taehoon Lee, Thor Johnsen,
7880Tristan Rice, TShapinsky, tucan, tucan9389, Vicente Reyes, Vilmar-Hillow, Vitaly
7881Lavrukhin, wangershi, weidan.kong, weidankong, Wen-Heng (Jack) Chung, William D.
7882Irons, Wim Glenn, XFeiF, Yan Facai (颜发才), Yanbo Liang, Yong Tang, Yoshihiro
7883Yamazaki, Yuan (Terry) Tang, Yuan, Man, zhaoyongke, ÁRon Ricardo Perez-Lopez,
7884张天启, 张晓飞
7885
7886# Release 1.10.1
7887
7888## Bug Fixes and Other Changes
7889
7890*   `tf.keras`:
7891    *   Fixing keras on Cloud TPUs. No new binaries will be built for Windows.
7892
7893# Release 1.10.0
7894
7895## Major Features And Improvements
7896
7897*   The `tf.lite` runtime now supports `complex64`.
7898*   Initial
7899    [Google Cloud Bigtable integration](https://github.com/tensorflow/tensorflow/tree/r1.10/tensorflow/contrib/bigtable)
7900    for `tf.data`.
7901*   Improved local run behavior in `tf.estimator.train_and_evaluate` which does
7902    not reload checkpoints for evaluation.
7903*   `RunConfig` now sets device_filters to restrict how workers and PS can
7904    communicate. This can speed up training and ensure clean shutdowns in some
7905    situations. But if you have jobs that require communication between workers,
7906    you will have to set custom session_options in your `RunConfig`.
7907*   Moved Distributions and Bijectors from `tf.contrib.distributions` to
7908    [Tensorflow Probability (TFP)](https://github.com/tensorflow/probability).
7909    `tf.contrib.distributions` is now deprecated and will be removed by the end
7910    of 2018.
7911*   Adding new endpoints for existing tensorflow symbols. These endpoints are
7912    going to be the preferred endpoints going forward and may replace some of
7913    the existing endpoints in the future. See below for the complete list. New
7914    symbols have been added to the following modules:
7915    [`tf.debugging`](https://www.tensorflow.org/versions/master/api_docs/python/tf/debugging),
7916    [`tf.dtypes`](https://www.tensorflow.org/versions/master/api_docs/python/tf/dtypes),
7917    [`tf.image`](https://www.tensorflow.org/versions/master/api_docs/python/tf/image),
7918    [`tf.io`](https://www.tensorflow.org/versions/master/api_docs/python/tf/io),
7919    [`tf.linalg`](https://www.tensorflow.org/versions/master/api_docs/python/tf/linalg),
7920    [`tf.manip`](https://www.tensorflow.org/versions/master/api_docs/python/tf/manip),
7921    [`tf.math`](https://www.tensorflow.org/versions/master/api_docs/python/tf/math),
7922    [`tf.quantization`](https://www.tensorflow.org/versions/master/api_docs/python/tf/quantization),
7923    [`tf.strings`](https://www.tensorflow.org/versions/master/api_docs/python/tf/strings)
7924
7925## Breaking Changes
7926
7927*   Prebuilt binaries are now (as of TensorFlow 1.10) built against NCCL 2.2 and
7928    no longer include NCCL in the binary install. TensorFlow usage with multiple
7929    GPUs and NCCL requires upgrade to
7930    [NCCL 2.2](https://developer.nvidia.com/nccl). See updated install guides:
7931    [TensorFlow GPU support](https://www.tensorflow.org/install/gpu) and
7932    [Build TensorFlow from source](https://www.tensorflow.org/install/source).
7933*   Starting from TensorFlow 1.11, Windows builds will use Bazel. Therefore, we
7934    will drop official support for cmake.
7935
7936## Bug Fixes and Other Changes
7937
7938*   `tf.data`:
7939    *   `tf.contrib.data.group_by_reducer()` is now available via the public
7940        API.
7941    *   `tf.contrib.data.choose_from_datasets()` is now available via the public
7942        API.
7943    *   Adding `drop_remainder` argument to `tf.data.Dataset.batch()` and
7944        `tf.data.Dataset.padded_batch()`, deprecating
7945        `tf.contrib.data.batch_and_drop_remainder()` and
7946        `tf.contrib.data.padded_batch_and_drop_remainder()`.
7947*   `tf.estimator`:
7948    *   `Estimator`s now use custom savers included in `EstimatorSpec` scaffolds
7949        for saving SavedModels during export.
7950    *   `EstimatorSpec` will now add a default prediction output for export if
7951        no `export_output` is provided, eliminating the need to explicitly
7952        include a `PredictOutput` object in the `model_fn` for simple use-cases.
7953    *   Support sparse_combiner in canned Linear Estimators.
7954    *   Added batch normalization to `DNNClassifier`, `DNNRegressor`, and
7955        `DNNEstimator`.
7956    *   Adding ranking support for boosted trees.
7957    *   Adding center bias option for boosted trees.
7958*   Add `synchronization` and `aggregation` args to get_variable(). These args
7959    will be used for distributed variables.
7960*   Add `synchronization` and `aggregation` args to the layer `add_weight()`
7961    API. These args will be used for distributed variables.
7962*   `tf.losses.*` do not add to the global collection when executing eagerly (to
7963    avoid leaking memory).
7964*   Support different summary and checkpoint directories in
7965    `tf.train.MonitoredTrainingSession()`.
7966*   Added IndRNN, IndyGRU, and IndyLSTM cells to `tf.contrib.rnn`.
7967*   Add safe static factory functions for SparseTensor and convert all CHECKs to
7968    DCHECKs. Using the constructor directly is unsafe and deprecated.
7969*   Make the Bigtable client connection pool configurable & increase the
7970    default # of connections for performance.
7971*   Added derivative of `tf.random_gamma` with respect to the alpha parameter.
7972*   Added derivative of `tf.igamma(a, x)` and `tf.igammac(a, x)` with respect to
7973    a.
7974*   Modified Bessel functions of order zero and one.
7975*   Add FillTriangular Bijector to create triangular matrices.
7976*   Added support for Type III DCT, and `tf.spectral.idct(type=2|3)`.
7977*   Correctly handle CuDNN RNN weight loaded when nest in `TimeDistributed`.
7978*   Adding per-element weight support for `WALSComputePartialLhsAndRhsOp`.
7979*   ZerosLike and OnesLike ops treated as constants by Graph Transform Tool.
7980*   Gamma distribution and the derived distributions (Beta, Dirichlet, Student's
7981    t, inverse Gamma) now fully reparameterized.
7982*   Java: Experimental wrapper classes to make graph generation easier. Thanks
7983    @karllessard and @kbsriram
7984*   Build & link in secure gRPC components (switch from the insecure grpc
7985    dependency to secure grpc dependency).
7986*   Adding new endpoints for existing tensorflow symbols. These endpoints are
7987    going to be the preferred endpoints going forward and may replace some of
7988    the existing endpoints in the future. List of new endpoints:
7989    *   New endpoints in `tf.image` namespace: `tf.image.extract_image_patches`
7990    *   New endpoints in `tf.debugging` namespace:
7991        `tf.debugging.check_numerics`, `tf.debugging.is_finite`,
7992        `tf.debugging.is_inf`, `tf.debugging.is_nan`.
7993    *   New endpoints in `tf.dtypes` namespace: `tf.dtypes.as_string`.
7994    *   New endpoints in `tf.io` namespace: `tf.io.decode_base64`,
7995        `tf.io.decode_compressed`, `tf.io.decode_json_example`,
7996        `tf.io.decode_raw`, `tf.io.encode_base64`, `tf.io.matching_files`,
7997        `tf.io.parse_tensor`, `tf.io.read_file,`tf.io.write_file`.
7998    *   New endpoints in tf.linalg namespace: `tf.linalg.cross`,
7999        `tf.linalg.tensor_diag` (corresponds to `tf.diag`),
8000        `tf.linalg.tensor_diag_part` (corresponds to `tf.diag_part`).
8001    *   New endpoints in tf.manip namespace: `tf.manip.batch_to_space_nd`,
8002        `tf.manip.gather_nd`, `tf.manip.reshape`, `tf.manip.reverse`,
8003        `tf.manip.scatter_nd`, `tf.manip.space_to_batch_nd`, `tf.manip.tile`
8004    *   New endpoints in tf.math namespace: `tf.math.acos`, `tf.math.acosh`,
8005        `tf.math.add`, `tf.math.asin`, `tf.math.asinh`, `tf.math.atan`,
8006        `tf.math.atan2`, `tf.math.atanh`, `tf.math.betainc`, `tf.math.ceil`,
8007        `tf.math.cos`, `tf.math.cosh`, `tf.math.digamma`, `tf.math.equal`,
8008        `tf.math.erfc`, `tf.math.exp`, `tf.math.expm1`, `tf.math.floor`,
8009        `tf.math.greater`, `tf.math.greater_equal`, `tf.math.igamma`,
8010        `tf.math.igammac`, `tf.math.invert_permutation`, `tf.math.less`,
8011        `tf.math.less_equal`, `tf.math.lgamma`, `tf.math.log`, `tf.math.log1p`,
8012        `tf.math.logical_and`, `tf.math.logical_not`, `tf.math.logical_or`,
8013        `tf.math.maximum`, `tf.math.minimum`, `tf.math.not_equal`,
8014        `tf.math.polygamma`, `tf.math.reciprocal`, `tf.math.rint`,
8015        `tf.math.rsqrt`, `tf.math.segment_max`, `tf.math.segment_mean`,
8016        `tf.math.segment_min`, `tf.math.segment_prod`, `tf.math.segment_sum`,
8017        `tf.math.sin`, `tf.math.sinh`, `tf.math.softplus`, `tf.math.softsign`,
8018        `tf.math.squared_difference`, `tf.math.tan`,
8019        `tf.math.unsorted_segment_max`, `tf.math.unsorted_segment_min`,
8020        `tf.math.unsorted_segment_prod`, `tf.math.unsorted_segment_sum`,
8021        `tf.math.zeta`.
8022    *   New endpoints in `tf.quantization` namespace:
8023        `tf.quantization.dequantize`,
8024        `tf.quantization.fake_quant_with_min_max_args`,
8025        `tf.quantization.fake_quant_with_min_max_args_gradient`,
8026        `tf.quantization.fake_quant_with_min_max_vars`,
8027        `tf.quantization.fake_quant_with_min_max_vars_gradient`,
8028        `tf.quantization.fake_quant_with_min_max_vars_per_channel`,
8029        `tf.quantization.fake_quant_with_min_max_vars_per_channel_gradient`.
8030    *   New endpoints in tf.strings namespace: `tf.strings.join` (corresponds to
8031        `tf.string_join`), `tf.strings.regex_replace`, `tf.strings.to_number`
8032        (corresponds to `tf.string_to_number`), `tf.strings.strip` (corresponds
8033        to `tf.string_strip`), `tf.strings.substr`, `tf.strings.to_hash_bucket`
8034        (corresponds to `tf.string_to_hash_bucket`),
8035        `tf.strings.to_hash_bucket_fast` (corresponds to
8036        `tf.string_to_hash_bucket_fast`), `tf.strings.to_hash_bucket_strong`
8037        (corresponds to `tf.string_to_hash_bucket_strong`).
8038
8039## Thanks to our Contributors
8040
8041This release contains contributions from many people at Google, as well as:
8042
8043Ag Ramesh, Alex Wiltschko, Alexander Pantyukhin, Amogh Mannekote, An Jiaoyang,
8044Andrei Nigmatulin, Andrew Ginns, BjøRn Moholt, Brett Koonce, Chengzhi Chen,
8045Chinmay Das, Christian Ertler, Christoph Boeddeker, Clayne Robison, Courtial
8046Florian, ctiijima, Dan Douthit, Dan J, Dan Ringwalt, EFanZh, Emanuele Ballarin,
8047eqy, Evgeniy Zheltonozhskiy, Freedom" Koan-Sin Tan, FréDéRic Branchaud-Charron,
8048G K, gracehoney, Guillaume Klein, Guozhong Zhuang, Hsien-Yang Li, hsm207,
8049ImSheridan, Jayaram Bobba, Jiandong Ruan, Jie, Joel Shor, Jonas Rauber, Jongmin
8050Baek, jsawruk, Karan Kaw, Karl Lessard, [email protected], Kb Sriram, KinmanLam,
8051leiiwang, Li, Yiqiang, Loo Rong Jie, Mahmoud Abuzaina, Mahmoud Aslan, ManHyuk,
8052Martin Patz, Martin Zeitler, mktozk, Mohammad Ashraf Bhuiyan, mrTsjolder, Naman
8053Bhalla, Nick Felt, Nicolas Lopez, Niranjan Hasabnis, Nishidha Panpaliya, Nitish,
8054nrstott, Nutti, Parag Jain, PeterLee, Philipp Jund, Rach L, Rafal Wojdyla,
8055Roland Zimmermann, Sergei Lebedev, SneakyFish5, Soila Kavulya, Sriram Veturi,
8056Steven Schmatz, Taehoon Lee, Tang, Wenyi, Taras Sereda, Ted Chang, Tim Zaman,
8057Tristan Rice, tucan, vchigrin, Vikram Tiwari, Vincent, WeberXie, William D.
8058Irons, Yan Facai (颜发才), Yong Tang, Yu Yi, Yuxin Wu, Zé ViníCius
8059
8060# Release 1.9.0
8061
8062## Major Features And Improvements
8063
8064*   Updated docs for `tf.keras`: New Keras-based
8065    [get started](http://tensorflow.org/versions/r1.9/get_started), and
8066    [programmers guide page](http://tensorflow.org/versions/r1.9/programmers_guide/keras).
8067*   Update `tf.keras` to the Keras 2.1.6 API.
8068*   Added
8069    [`tf.keras.layers.CuDNNGRU`](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/keras/layers/CuDNNGRU)
8070    and
8071    [`tf.keras.layers.CuDNNLSTM`](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/keras/layers/CuDNNLSTM)
8072    layers.
8073    [Try it](https://colab.sandbox.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/nmt_with_attention/nmt_with_attention.ipynb?linkId=53292082).
8074*   Adding support of core
8075    [feature columns](https://www.tensorflow.org/get_started/feature_columns)
8076    and [losses](https://www.tensorflow.org/api_docs/python/tf/losses) to
8077    [gradient boosted trees estimators](https://github.com/tensorflow/models/tree/master/official/r1/boosted_trees).
8078*   The
8079    [python interface](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/lite)
8080    for the
8081    [TFLite Optimizing Converter](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/toco/README.md)
8082    has been expanded, and the command line interface (AKA: `toco`,
8083    `tflite_convert`) is once again included in the standard `pip` installation.
8084*   Improved data-loading and text processing with:
8085    *   [`tf.decode_compressed`](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/decode_compressed)
8086    *   [`tf.string_strip`](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/string_strip)
8087    *   [`tf.strings.regex_full_match`](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/strings/regex_full_match)
8088*   Added experimental support for new pre-made Estimators:
8089    *   [`tf.contrib.estimator.BaselineEstimator`](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/contrib/estimator/BaselineEstimator)
8090    *   [`tf.contrib.estimator.RNNClassifier`](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/contrib/estimator/RNNEstimator)
8091    *   [`tf.contrib.estimator.RNNEstimator`](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/contrib/estimator/RNNClassifier)
8092*   The
8093    [distributions.Bijector](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/contrib/distributions/bijectors/Bijector)
8094    API supports broadcasting for Bijectors with new API changes.
8095
8096## Breaking Changes
8097
8098*   If you're opening empty variable scopes; replace `variable_scope('', ...)`
8099    by `variable_scope(tf.get_variable_scope(), ...)`.
8100*   Headers used for building custom ops have been moved from
8101    site-packages/external into site-packages/tensorflow/include/external.
8102
8103## Bug Fixes and Other Changes
8104
8105*   `tfe.Network` is deprecated. Please inherit from `tf.keras.Model`.
8106*   Layered variable names have changed in the following conditions:
8107    *   Using `tf.keras.layers` with custom variable scopes.
8108    *   Using `tf.layers` in a subclassed `tf.keras.Model` class. See
8109        [here](https://www.tensorflow.org/versions/r1.9/api_docs/python/tf/layers)
8110        for more details
8111*   `tf.data`:
8112    *   `Dataset.from_generator()` now accepts an `args` list, in order to
8113        create nested generators.
8114    *   `Dataset.list_files()` now produces deterministic results when
8115        `shuffle=False` or a `seed` is passed.
8116    *   `tf.contrib.data.sample_from_datasets()` and
8117        `tf.contrib.data.choose_from_datasets()` make it easier to sample or
8118        deterministically choose elements from multiple datasets.
8119    *   `tf.contrib.data.make_csv_dataset()` now supports line breaks in quoted
8120        strings, and two infrequently used arguments removed.
8121    *   (C++) `DatasetBase::DebugString()` is now `const`.
8122    *   (C++) `DatasetBase::MakeIterator()` has been renamed to
8123        `DatasetBase::MakeIteratorInternal()`.
8124    *   (C++) `IteratorBase::Initialize()` method was added to support raising
8125        errors during iterator construction.
8126*   Eager Execution:
8127    *   Added the ability to pause recording operations for gradient computation
8128        via `tf.GradientTape.stop_recording`.
8129    *   Updated documentation, introductory notebooks.
8130*   `tf.keras`:
8131    *   Move Keras code out of _impl folder and remove API files.
8132    *   `tf.keras.Model.save_weights` now saves in TensorFlow format by default.
8133    *   Enable dataset iterators to be passed to `tf.keras.Model` training/eval
8134        methods.
8135*   TensorFlow Debugger (tfdbg) CLI: fix an issue in which the TensorBoard
8136    Debugger Plugin could not handle total source file size exceeding gRPC
8137    message size limit (4 MB).
8138*   `tf.contrib`:
8139    *   `tf.contrib.framework.zero_initializer` supports ResourceVariable.
8140    *   Adding "constrained_optimization" to tensorflow/contrib.
8141*   Other:
8142    *   Add GCS Configuration Ops.
8143    *   Changing signature of `MakeIterator` to enable propagating error status.
8144    *   KL divergence for two Dirichlet distributions.
8145    *   More consistent GcsFileSystem behavior for certain reads past EOF.
8146    *   Update benchmark for tf.scan to match ranges across eager and graph
8147        modes.
8148    *   Fixed bug in `tf.reduce_prod gradient` for complex dtypes.
8149    *   Allow the use of '.' in variables (e.g. "hparams.parse('a.b=1.0')"),
8150        which would previously raise an error. This will correspond to an
8151        attribute name with an embedded '.' symbol (e.g. 'a.b'), which can only
8152        be accessed indirectly (e.g. through getattr and setattr). To set this
8153        up the user will first need to explicitly add the variable to the hparam
8154        object (e.g. "hparams.add_hparam(name='a.b', value=0.0)").
8155    *   Benchmark for tf.scan in graph and eager modes.
8156    *   Added complex128 support to FFT, FFT2D, FFT3D, IFFT, IFFT2D, and IFFT3D.
8157    *   Making ids unique in `nn.embedding_lookup_sparse`. This helps to reduce
8158        RPC calls for looking up the embeddings when there are repeated ids in
8159        the batch.
8160    *   Support indicator column in boosted trees.
8161    *   Prevent `tf.gradients()` from backpropagating through integer tensors.
8162    *   LinearOperator[1D,2D,3D]Circulant added to `tensorflow.linalg`.
8163    *   Conv3D, Conv3DBackpropInput, Conv3DBackpropFilter now supports
8164        arbitrary.
8165    *   Added `tf.train.Checkpoint` for reading/writing object-based
8166        checkpoints.
8167    *   Added LinearOperatorKronecker, a dense-free implementation of the
8168        Kronecker Product.
8169    *   Allow LinearOperator to broadcast.
8170    *   SavedModelBuilder will now deduplicate asset names that point to files
8171        with the same basename and the same contents. Note that this may result
8172        in new asset files included in SavedModels in cases where assets with
8173        the same name but different contents were previously overwriting each
8174        other.
8175
8176## Thanks to our Contributors
8177
8178This release contains contributions from many people at Google, as well as:
8179
8180Abdullah Alrasheed, Achal Shah, Ad-530, ADiegoCAlonso, Aditya Yogi, Ag Ramesh,
8181akindyakov, Andy Kernahan, Anya Petrova, Aurelien Geron, Ben, Ben Barsdell,
8182Bhavani-Subramanian, braincodercn, Brett Koonce, Brian Nemsick, Brian Zier,
8183Bryan Heden, candy.dc, cclauss, Clayne Robison, ctiijima, Dalmo Cirne, David
8184Norman, David T.H. Kao, DosLin, ekelsen, Elson Rodriguez, Erik Smistad, Felix
8185Abecassis, Fergal Cotter, fo40225, foo0x29a, Freedom" Koan-Sin Tan, FréDéRic
8186Branchaud-Charron, gdh1995, Geoffrey Irving, Giuseppe, gracehoney, Guido
8187Zuidhof, Guillaume Klein, Guozhong Zhuang, Haggai, Harald Husum, imsheridan,
8188Ivan Zhang, Jan Zikes, Jayaram Bobba, Jesse Benson, Jesse Gumz, Jiajia Li, Jie,
8189jinghuangintel, Jingwen, jjsjann123, Joe Yearsley, Joel Hestness, Joel Shor,
8190josephyearsley, Junpeng Lao, Karol M. Langner, Kb Sriram, krantideep95, Krish
8191Ravindranath, Letian Feng, Loo Rong Jie, Lukas Geiger, Maciej, Mahmoud Abuzaina,
8192ManHyuk, Mark Ryan, mbhuiyan, Michal Turek, Mostafa Alaa, Myungsung Kwak, Nand
8193Dalal, Nehal J Wani, Neil Tenenholtz, ngc92, Nicholas Nadeau, P.Eng., Avs,
8194Niranjan Hasabnis, P-Hidringer, Paul Van Eck, Peng Yu, Qing Zhao, Qingying Chen,
8195Quanlong, Rajendra Arora, Rholais Lii, rmanyari, Robin Richtsfeld, Russell
8196Klopfer, Sagi, Sam Sendelbach, Sandeep N Gupta, Sandip Giri, Sarah Edkins, Scott
8197Tseng, Sdalbsoo, Sergii Khomenko, Seungwoo Choi (Biggie), Seyed Majid Azimi,
8198Shaoning Zeng, shengfuintel, Siu Kei, Muk, Smit Shilu, soonson, Stefan Schweter,
8199Sukhwan Kim, Sunitha Kambhampati, Taehoon Lee, tamimaddari82, Tang, Wenyi, Ted
8200Chang, u2takey, Utkarsh Upadhyay, Vadim Markovtsev, voegtlel, Wai Hon Law,
8201wangsiyu, Wenhao Hu, wenhao.hu, William D. Irons, Yan Facai (颜发才), Yanbo Liang,
8202Yihong Wang, Yilei (Dolee) Yang, Yong Tang, Yuan (Terry) Tang
8203
8204# Release 1.8.0
8205
8206## Major Features And Improvements
8207
8208*   Can now pass `tf.contrib.distribute.MirroredStrategy()` to
8209    `tf.estimator.RunConfig()` to run an Estimator model on multiple GPUs on one
8210    machine.
8211*   Add `tf.contrib.data.prefetch_to_device()`, which supports prefetching to
8212    GPU memory.
8213*   Added Gradient Boosted Trees as pre-made Estimators: BoostedTreesClassifier,
8214    BoostedTreesRegressor.
8215*   Add 3rd generation pipeline config for Cloud TPUs which improves performance
8216    and usability.
8217*   `tf.contrib.bayesflow` is moving out to it's own repo.
8218*   Added `tf.contrib.{proto,rpc}` to allow generic proto parsing and RPC
8219    communication<sup>[1](#rpc-issue)</sup>.
8220
8221## Bug Fixes and Other Changes
8222
8223*   `tf.data`:
8224    *   Add `tf.contrib.data.prefetch_to_device`, which enables prefetching
8225        dataset elements to GPU memory.
8226    *   Add `tf.contrib.data.AUTOTUNE`, which allows the tf.data runtime to
8227        automatically tune the prefetch buffer sizes based on your system and
8228        environment.
8229    *   Add `tf.contrib.data.make_csv_dataset` for building datasets of CSV
8230        files.
8231*   Eager Execution:
8232    *   With eager execution Datasets can now be used as standard python
8233        iterators (`for batch in dataset:`). Both `Dataset.__iter__()` and
8234        `Dataset.make_one_shot_iterator()` can now be used to create iterators
8235        when eager execution is enabled.
8236    *   Automatic device placement has been enabled (i.e., use a GPU if
8237        available automatically, without requiring an explicit `with
8238        tf.device(“/gpu:0”)`) (Fixes #14133)
8239    *   `tf.GradientTape` has moved out of contrib.
8240*   `tf.keras`:
8241    *   Added the fashion mnist dataset.
8242    *   New data preprocessing functions: `image/random_brightness`,
8243        `sequence/TimeseriesGenerator`, and `text/hashing_trick`.
8244*   Accelerated Linear Algebra (XLA):
8245    *   Select and scatter in reference util and evaluator now use
8246        lexicographical order to break ties.
8247*   TensorFlow Debugger (tfdbg) CLI:
8248    *   During tensor-filter operations, allow exclusion of nodes by regular
8249        expressions.
8250    *   Fix spurious background colors in some text terminals.
8251*   `tf.contrib`:
8252    *   Add meta-distribution BatchReshape which reshapes batch dimensions.
8253    *   `tf.contrib.layers.recompute_grad` works for explicit gradient
8254        checkpointing on TPU.
8255    *   Add `tf.contrib.framework.argsort`.
8256    *   Allow `DNNBoostedTreeCombinedEstimator` to work with core versions of
8257        feature columns and losses.
8258    *   Add non-linear image warping ops: `tf.contrib.image.sparse_image_warp`,
8259        `tf.contrib.image.dense_image_warp`, and
8260        `tf.contrib.image.interpolate_spline`.
8261    *   Fix bug in `tf.contrib.opt.MultitaskOptimizerWrapper` where types of
8262        tensors were mismatched.
8263*   Other:
8264    *   Low-level graph construction now calls the TensorFlow C API. This change
8265        should be invisible to most users, but can be disabled by setting the
8266        environment variable `TF_C_API_GRAPH_CONSTRUCTION=0` in this release.
8267        Future releases will remove the ability to disable this change. Please
8268        [file a bug](https://github.com/tensorflow/tensorflow/issues/new) if you
8269        find yourself using this escape hatch.
8270    *   Add description of shapes and a pointer to tutorial notebook in
8271        `tf.distributions.Distribution`.
8272    *   Update scatter operations:
8273    *   Add `tf.scatter_min` and `tf.scatter_max`
8274    *   Extend scatter operations to work with a scalar update parameter.
8275    *   Move cuDNN RNN ops to core for use in TensorFlow codebase only.
8276    *   Add `float64` support for `Conv2d`, `Conv2dBackpropInput`, and
8277        `Conv2dBackpropFilter`.
8278    *   Add `float64` support for `AvgPool`/`AvgPoolGrad`.
8279    *   Make graph name scope thread local so that they work correctly in
8280        multi-threaded environments.
8281    *   Update nsync synchronization library to avoid slow primitives on Linux.
8282    *   Removed need to put nsync/public on C include path when building custom
8283        ops.
8284    *   Add `tf.image.psnr`, `tf.image.ssim`, `tf.image.ssim_multiscale`,
8285        `tf.image.image_gradients`, `tf.image.sobel_edges`.
8286    *   Add links to https://js.tensorflow.org.
8287    *   Fix non-uniformity of orthogonal matrices.
8288    *   Fix bug where multi-image Estimator eval summaries were not displayed
8289        correctly.
8290
8291<a name="rpc-issue"><sup>1</sup></a> The cancellation logic of the RPC op
8292contains a concurrency error. A fix has been submitted to master and will be
8293part of the next release.
8294
8295## Thanks to our Contributors
8296
8297This release contains contributions from many people at Google, as well as:
8298
82994d55397500, Aghasy, Alan Du, Alan Lee, Alan Yee, Alex Wiltschko, Animesh
8300Karnewar, Ankit Gupta, Anton Matosov, Aris L, Ben Barsdell, Brent Yi, Brett
8301Koonce, Carl Thomé, cbockman, Chikanaga Tomoyuki, Chris Tava, CéDric Deltheil,
8302Dahan Gong, Dalmo Cirne, Daniel Erenrich, David Norman, DavidNorman, Edd
8303Wilder-James, Fanjin Zeng, Felix Abecassis, fo40225, George Sterpu, Giovanni
8304Terlingen, Gor Baghdasaryan, Guillaume Klein, Hanchen Li, Ilya Polenov, Jakub
8305Kolodziejczyk, Jason Sadler, Jayaram Bobba, Jerry Liu, jinghuangintel, Jiongyan
8306Zhang (张炯衍), Joel Shor, Jong Wook Kim, Julian Eisenschlos, Karl Lessard, Krish
8307Ravindranath, Loo Rong Jie, Lukas Geiger, Luke Iwanski, Mahmoud Abuzaina,
8308ManHyuk, Marvin Richter, Maximilian Mitchell, Mohammad Ashraf Bhuiyan, msofka,
8309Mustafa Kasap, Nathan Burnham, Nathan Luehr, Naveen Marri, ngc92, nio1814, Oleg
8310Zabluda, Ou Changkun, Panos Ipeirotis, Paul Van Eck, Peter Lee, Piotr Czapla,
8311qjivy, Rholais Lii, Rodrigo Formigone, Russell Klopfer, ryantimjohn, Sang Han,
8312SebastiáN RamíRez, shengfuintel, Siby Jose Plathottam, Silver Chan, Stanislaw
8313Antol, Taehoon Lee, Tarang Chugh, Ted Chang, Thomas Bastiani, Xian Xu, Xiaoming
8314(Jason) Cui, Yan Facai (颜发才), yaox12, Yashal Shakti Kanungo, Yong Tang, Yuan
8315(Terry) Tang, Yuxin Wu, Ziyue(Louis) Lu
8316
8317# Release 1.7.0
8318
8319## Major Features And Improvements
8320
8321*   Eager mode is moving out of contrib, try `tf.enable_eager_execution()`.
8322*   Graph rewrites emulating fixed-point quantization compatible with TensorFlow
8323    Lite, supported by new `tf.contrib.quantize` package.
8324*   Easily customize gradient computation with `tf.custom_gradient`.
8325*   [TensorBoard Debugger Plugin](https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/debugger/README.md),
8326    the graphical user interface (GUI) of TensorFlow Debugger (tfdbg), is now in
8327    alpha.
8328*   Experimental support for reading a sqlite database as a `Dataset` with new
8329    `tf.contrib.data.SqlDataset`.
8330*   Distributed Mutex / CriticalSection added to
8331    `tf.contrib.framework.CriticalSection`.
8332*   Better text processing with `tf.regex_replace`.
8333*   Easy, efficient sequence input with
8334    `tf.contrib.data.bucket_by_sequence_length`
8335*   Initial support for `tf.contrib.tensorrt` that enables native TensorRT in
8336    TensorFlow.
8337
8338## Bug Fixes and Other Changes
8339
8340*   Accelerated Linear Algebra (XLA):
8341    *   Add `MaxPoolGradGrad` support for XLA
8342    *   CSE pass from Tensorflow is now disabled in XLA.
8343*   `tf.data`:
8344    *   `tf.data.Dataset`
8345    *   Add support for building C++ Dataset op kernels as external libraries,
8346        using the `tf.load_op_library()` mechanism.
8347    *   `Dataset.list_files()` now shuffles its output by default.
8348    *   `Dataset.shuffle(..., seed=tf.constant(0, dtype=tf.int64))` now yields
8349        the same sequence of elements as `Dataset.shuffle(..., seed=0)`.
8350    *   Add `num_parallel_reads` argument to `tf.data.TFRecordDataset`.
8351*   `tf.contrib`:
8352    *   `tf.contrib.bayesflow.halton_sequence` now supports randomization.
8353    *   Add support for scalars in `tf.contrib.all_reduce`.
8354    *   Add `effective_sample_size` to `tf.contrib.bayesflow.mcmc_diagnostics`.
8355    *   Add `potential_scale_reduction` to
8356        `tf.contrib.bayesflow.mcmc_diagnostics`.
8357    *   Add `BatchNormalization`, `Kumaraswamy` bijectors.
8358    *   Deprecate `tf.contrib.learn`. Please check contrib/learn/README.md for
8359        instructions on how to convert existing code.
8360    *   `tf.contrib.data`
8361    *   Remove deprecated `tf.contrib.data.Dataset`, `tf.contrib.data.Iterator`,
8362        `tf.contrib.data.FixedLengthRecordDataset`,
8363        `tf.contrib.data.TextLineDataset`, and `tf.contrib.data.TFRecordDataset`
8364        classes.
8365    *   Added `bucket_by_sequence_length`, `sliding_window_batch`, and
8366        `make_batched_features_dataset`
8367    *   Remove unmaintained `tf.contrib.ndlstm`. You can find it externally at
8368        https://github.com/tmbarchive/tfndlstm.
8369    *   Moved most of `tf.contrib.bayesflow` to its own repo: `tfp`
8370*   Other:
8371    *   tf.py_func now reports the full stack trace if an exception occurs.
8372    *   Integrate `TPUClusterResolver` with GKE's integration for Cloud TPUs.
8373    *   Add a library for statistical testing of samplers.
8374    *   Add Helpers to stream data from the GCE VM to a Cloud TPU.
8375    *   Integrate ClusterResolvers with TPUEstimator.
8376    *   Unify metropolis_hastings interface with HMC kernel.
8377    *   Move LIBXSMM convolutions to a separate --define flag so that they are
8378        disabled by default.
8379    *   Fix `MomentumOptimizer` lambda.
8380    *   Reduce `tfp.layers` boilerplate via programmable docstrings.
8381    *   Add `auc_with_confidence_intervals`, a method for computing the AUC and
8382        confidence interval with linearithmic time complexity.
8383    *   `regression_head` now accepts customized link function, to satisfy the
8384        usage that user can define their own link function if the
8385        `array_ops.identity` does not meet the requirement.
8386    *   Fix `initialized_value` and `initial_value` behaviors for
8387        `ResourceVariables` created from `VariableDef` protos.
8388    *   Add TensorSpec to represent the specification of Tensors.
8389    *   Constant folding pass is now deterministic.
8390    *   Support `float16` `dtype` in `tf.linalg.*`.
8391    *   Add `tf.estimator.export.TensorServingInputReceiver` that allows
8392        `tf.estimator.Estimator.export_savedmodel` to pass raw tensors to model
8393        functions.
8394
8395## Deprecations
8396
8397*   TensorFlow 1.7 may be the last time we support Cuda versions below 8.0.
8398    Starting with TensorFlow 1.8 release, 8.0 will be the minimum supported
8399    version.
8400*   TensorFlow 1.7 may be the last time we support cuDNN versions below 6.0.
8401    Starting with TensorFlow 1.8 release, 6.0 will be the minimum supported
8402    version.
8403
8404## Thanks to our Contributors
8405
8406This release contains contributions from many people at Google, as well as:
8407
84084d55397500, Abe, Alistair Low, Andy Kernahan, Appledore, Ben, Ben Barsdell,
8409Boris Pfahringer, Brad Wannow, Brett Koonce, Carl Thomé, cclauss, Chengzhi Chen,
8410Chris Drake, Christopher Yeh, Clayne Robison, Codrut Grosu, Daniel Trebbien,
8411Danny Goodman, David Goodwin, David Norman, Deron Eriksson, Donggeon Lim, Donny
8412Viszneki, DosLin, DylanDmitri, Francisco Guerrero, Fred Reiss, gdh1995,
8413Giuseppe, Glenn Weidner, gracehoney, Guozhong Zhuang, Haichen "Hc" Li, Harald
8414Husum, harumitsu.nobuta, Henry Spivey, hsm207, Jekyll Song, Jerome, Jiongyan
8415Zhang, jjsjann123, John Sungjin Park, Johnson145, JoshVarty, Julian Wolff, Jun
8416Wang, June-One, Kamil Sindi, Kb Sriram, Kdavis-Mozilla, Kenji, lazypanda1,
8417Liang-Chi Hsieh, Loo Rong Jie, Mahesh Bhosale, MandarJKulkarni, ManHyuk, Marcus
8418Ong, Marshal Hayes, Martin Pool, matthieudelaro, mdfaijul, mholzel, Michael
8419Zhou, Ming Li, Minmin Sun, Myungjoo Ham, MyungsungKwak, Naman Kamra, Peng Yu,
8420Penghao Cen, Phil, Raghuraman-K, resec, Rohin Mohanadas, Sandeep N Gupta, Scott
8421Tseng, seaotterman, Seo Sanghyeon, Sergei Lebedev, Ted Chang, terrytangyuan, Tim
8422H, tkunic, Tod, vihanjain, Yan Facai (颜发才), Yin Li, Yong Tang, Yukun Chen,
8423Yusuke Yamada
8424
8425# Release 1.6.0
8426
8427## Breaking Changes
8428
8429*   Prebuilt binaries are now built against CUDA 9.0 and cuDNN 7.
8430*   Prebuilt binaries will use AVX instructions. This may break TF on older
8431    CPUs.
8432
8433## Major Features And Improvements
8434
8435*   New Optimizer internal API for non-slot variables. Descendants of
8436    AdamOptimizer that access _beta[12]_power will need to be updated.
8437*   `tf.estimator.{FinalExporter,LatestExporter}` now export stripped
8438    SavedModels. This improves forward compatibility of the SavedModel.
8439*   FFT support added to XLA CPU/GPU.
8440
8441## Bug Fixes and Other Changes
8442
8443*   Documentation updates:
8444    *   Added a second version of Getting Started, which is aimed at ML
8445        newcomers.
8446    *   Clarified documentation on `resize_images.align_corners` parameter.
8447    *   Additional documentation for TPUs.
8448*   Google Cloud Storage (GCS):
8449    *   Add client-side throttle.
8450    *   Add a `FlushCaches()` method to the FileSystem interface, with an
8451        implementation for GcsFileSystem.
8452*   Other:
8453    *   Add `tf.contrib.distributions.Kumaraswamy`.
8454    *   `RetryingFileSystem::FlushCaches()` calls the base FileSystem's
8455        `FlushCaches()`.
8456    *   Add `auto_correlation` to distributions.
8457    *   Add `tf.contrib.distributions.Autoregressive`.
8458    *   Add SeparableConv1D layer.
8459    *   Add convolutional Flipout layers.
8460    *   When both inputs of `tf.matmul` are bfloat16, it returns bfloat16,
8461        instead of float32.
8462    *   Added `tf.contrib.image.connected_components`.
8463    *   Add `tf.contrib.framework.CriticalSection` that allows atomic variable
8464        access.
8465    *   Output variance over trees predictions for classifications tasks.
8466    *   For `pt` and `eval` commands, allow writing tensor values to filesystem
8467        as numpy files.
8468    *   gRPC: Propagate truncated errors (instead of returning gRPC internal
8469        error).
8470    *   Augment `parallel_interleave` to support 2 kinds of prefetching.
8471    *   Improved XLA support for C64-related ops log, pow, atan2, tanh.
8472    *   Add probabilistic convolutional layers.
8473
8474## API Changes
8475
8476*   Introducing `prepare_variance` boolean with default setting to False for
8477    backward compatibility.
8478*   Move `layers_dense_variational_impl.py` to `layers_dense_variational.py`.
8479
8480## Known Bugs
8481
8482*   Using XLA:GPU with CUDA 9 and CUDA 9.1 results in garbage results and/or
8483    `CUDA_ILLEGAL_ADDRESS` failures.
8484
8485    Google discovered in mid-December 2017 that the PTX-to-SASS compiler in CUDA
8486    9 and CUDA 9.1 sometimes does not properly compute the carry bit when
8487    decomposing 64-bit address calculations with large offsets (e.g. `load [x +
8488    large_constant]`) into 32-bit arithmetic in SASS.
8489
8490    As a result, these versions of `ptxas` miscompile most XLA programs which
8491    use more than 4GB of temp memory. This results in garbage results and/or
8492    `CUDA_ERROR_ILLEGAL_ADDRESS` failures.
8493
8494    A fix in CUDA 9.1.121 is expected in late February 2018. We do not expect a
8495    fix for CUDA 9.0.x. Until the fix is available, the only workaround is to
8496    [downgrade](https://developer.nvidia.com/cuda-toolkit-archive) to CUDA 8.0.x
8497    or disable XLA:GPU.
8498
8499    TensorFlow will print a warning if you use XLA:GPU with a known-bad version
8500    of CUDA; see e00ba24c4038e7644da417ddc639169b6ea59122.
8501
8502## Thanks to our Contributors
8503
8504This release contains contributions from many people at Google, as well as:
8505
85064d55397500, Ag Ramesh, Aiden Scandella, Akimasa Kimura, Alex Rothberg, Allen
8507Goodman, amilioto, Andrei Costinescu, Andrei Nigmatulin, Anjum Sayed, Anthony
8508Platanios, Anush Elangovan, Armando Fandango, Ashish Kumar Ram, Ashwini Shukla,
8509Ben, Bhavani Subramanian, Brett Koonce, Carl Thomé, cclauss, Cesc, Changming
8510Sun, Christoph Boeddeker, Clayne Robison, Clemens Schulz, Clint (Woonhyuk Baek),
8511codrut3, Cole Gerdemann, Colin Raffel, Daniel Trebbien, Daniel Ylitalo, Daniel
8512Zhang, Daniyar, Darjan Salaj, Dave Maclachlan, David Norman, Dong--Jian,
8513dongsamb, dssgsra, Edward H, eladweiss, elilienstein, Eric Lilienstein, error.d,
8514Eunji Jeong, fanlu, Florian Courtial, fo40225, Fred, Gregg Helt, Guozhong
8515Zhuang, Hanchen Li, hsm207, hyunyoung2, ImSheridan, Ishant Mrinal Haloi, Jacky
8516Ko, Jay Young, Jean Flaherty, Jerome, JerrikEph, Jesse Kinkead, jfaath, Jian
8517Lin, jinghuangintel, Jiongyan Zhang, Joel Hestness, Joel Shor, Johnny Chan,
8518Julian Niedermeier, Julian Wolff, JxKing, K-W-W, Karl Lessard, Kasper Marstal,
8519Keiji Ariyama, Koan-Sin Tan, Loki Der Quaeler, Loo Rong Jie, Luke Schaefer, Lynn
8520Jackson, ManHyuk, Matt Basta, Matt Smith, Matthew Schulkind, Michael,
8521michaelkhan3, Miguel Piedrafita, Mikalai Drabovich, Mike Knapp, mjwen, mktozk,
8522Mohamed Aly, Mohammad Ashraf Bhuiyan, Myungjoo Ham, Naman Bhalla, Namrata-Ibm,
8523Nathan Luehr, nathansilberman, Netzeband, Niranjan Hasabnis, Omar Aflak, Ozge
8524Yalcinkaya, Parth P Panchal, patrickzzy, Patryk Chrabaszcz, Paul Van Eck, Paweł
8525Kapica, Peng Yu, Philip Yang, Pierre Blondeau, Po-Hsien Chu, powderluv, Puyu
8526Wang, Rajendra Arora, Rasmus, Renat Idrisov, resec, Robin Richtsfeld, Ronald
8527Eddy Jr, Sahil Singh, Sam Matzek, Sami Kama, sandipmgiri, Santiago Castro, Sayed
8528Hadi Hashemi, Scott Tseng, Sergii Khomenko, Shahid, Shengpeng Liu, Shreyash
8529Sharma, Shrinidhi Kl, Simone Cirillo, simsicon, Stanislav Levental,
8530starsblinking, Stephen Lumenta, Steven Hickson, Su Tang, Taehoon Lee, Takuya
8531Wakisaka, Ted Chang, Ted Ying, Tijmen Verhulsdonck, Timofey Kondrashov, vade,
8532vaibhav, Valentin Khrulkov, vchigrin, Victor Costan, Viraj Navkal, Vivek Rane,
8533wagonhelm, Yan Facai (颜发才), Yanbo Liang, Yaroslav Bulatov, yegord, Yong Tang,
8534Yoni Tsafir, yordun, Yuan (Terry) Tang, Yuxin Wu, zhengdi, Zhengsheng Wei, 田传武
8535
8536# Release 1.5.0
8537
8538## Breaking Changes
8539
8540*   Prebuilt binaries are now built against CUDA 9.0 and cuDNN 7.
8541*   Starting from 1.6 release, our prebuilt binaries will use AVX instructions.
8542    This may break TF on older CPUs.
8543
8544## Major Features And Improvements
8545
8546*   [Eager execution](https://github.com/tensorflow/tensorflow/tree/r1.5/tensorflow/contrib/eager)
8547    preview version is now available.
8548*   [TensorFlow Lite](https://github.com/tensorflow/tensorflow/tree/r1.5/tensorflow/lite)
8549    dev preview is now available.
8550*   CUDA 9.0 and cuDNN 7 support.
8551*   Accelerated Linear Algebra (XLA):
8552    *   Add `complex64` support to XLA compiler.
8553    *   `bfloat` support is now added to XLA infrastructure.
8554    *   Make `ClusterSpec` propagation work with XLA devices.
8555    *   Use a deterministic executor to generate XLA graph.
8556*   `tf.contrib`:
8557    *   `tf.contrib.distributions`:
8558    *   Add `tf.contrib.distributions.Autoregressive`.
8559    *   Make `tf.contrib.distributions` QuadratureCompound classes support batch
8560    *   Infer `tf.contrib.distributions.RelaxedOneHotCategorical` `dtype` from
8561        arguments.
8562    *   Make `tf.contrib.distributions` quadrature family parameterized by
8563        `quadrature_grid_and_prob` vs `quadrature_degree`.
8564    *   `auto_correlation` added to `tf.contrib.distributions`
8565    *   Add `tf.contrib.bayesflow.layers`, a collection of probabilistic
8566        (neural) layers.
8567    *   Add `tf.contrib.bayesflow.halton_sequence`.
8568    *   Add `tf.contrib.data.make_saveable_from_iterator.`
8569    *   Add `tf.contrib.data.shuffle_and_repeat`.
8570    *   Add new custom transformation: `tf.contrib.data.scan()`.
8571    *   `tf.contrib.distributions.bijectors`:
8572    *   Add `tf.contrib.distributions.bijectors.MaskedAutoregressiveFlow`.
8573    *   Add `tf.contrib.distributions.bijectors.Permute`.
8574    *   Add `tf.contrib.distributions.bijectors.Gumbel`.
8575    *   Add `tf.contrib.distributions.bijectors.Reshape`.
8576    *   Support shape inference (i.e., shapes containing -1) in the Reshape
8577        bijector.
8578*   Add `streaming_precision_recall_at_equal_thresholds,` a method for computing
8579    streaming precision and recall with `O(num_thresholds + size of
8580    predictions)` time and space complexity.
8581*   Change `RunConfig` default behavior to not set a random seed, making random
8582    behavior independently random on distributed workers. We expect this to
8583    generally improve training performance. Models that do rely on determinism
8584    should set a random seed explicitly.
8585*   Replaced the implementation of `tf.flags` with `absl.flags`.
8586*   Add support for `CUBLAS_TENSOR_OP_MATH` in fp16 GEMM
8587*   Add support for CUDA on NVIDIA Tegra devices
8588
8589## Bug Fixes and Other Changes
8590
8591*   Documentation updates:
8592    *   Clarified that you can only install TensorFlow on 64-bit machines.
8593    *   Added a short doc explaining how `Estimator`s save checkpoints.
8594    *   Add documentation for ops supported by the `tf2xla` bridge.
8595    *   Fix minor typos in the doc of `SpaceToDepth` and `DepthToSpace`.
8596    *   Updated documentation comments in `mfcc_mel_filterbank.h` and `mfcc.h`
8597        to clarify that the input domain is squared magnitude spectra and the
8598        weighting is done on linear magnitude spectra (sqrt of inputs).
8599    *   Change `tf.contrib.distributions` docstring examples to use `tfd` alias
8600        rather than `ds`, `bs`.
8601    *   Fix docstring typos in `tf.distributions.bijectors.Bijector`.
8602    *   `tf.assert_equal` no longer raises `ValueError.` It now raises
8603        `InvalidArgumentError,` as documented.
8604    *   Update Getting Started docs and API intro.
8605*   Google Cloud Storage (GCS):
8606    *   Add userspace DNS caching for the GCS client.
8607    *   Customize request timeouts for the GCS filesystem.
8608    *   Improve GCS filesystem caching.
8609*   Bug Fixes:
8610    *   Fix bug where partitioned integer variables got their wrong shapes.
8611        Before
8612    *   Fix correctness bug in CPU and GPU implementations of Adadelta.
8613    *   Fix a bug in `import_meta_graph`'s handling of partitioned variables
8614        when importing into a scope. WARNING: This may break loading checkpoints
8615        of graphs with partitioned variables saved after using
8616        `import_meta_graph` with a non-empty `import_scope` argument.
8617    *   Fix bug in offline debugger which prevented viewing events.
8618    *   Added the `WorkerService.DeleteWorkerSession` method to the gRPC
8619        interface, to fix a memory leak. Ensure that your master and worker
8620        servers are running the same version of TensorFlow to avoid
8621        compatibility issues.
8622    *   Fix bug in peephole implementation of BlockLSTM cell.
8623    *   Fix bug by casting dtype of `log_det_jacobian` to match `log_prob` in
8624        `TransformedDistribution`.
8625    *   Fix a bug in `import_meta_graph`'s handling of partitioned variables
8626        when
8627    *   Ensure `tf.distributions.Multinomial` doesn't underflow in `log_prob`.
8628        Before this change, all partitions of an integer variable were
8629        initialized with the shape of the unpartitioned variable; after this
8630        change they are initialized correctly.
8631*   Other:
8632    *   Add necessary shape util support for bfloat16.
8633    *   Add a way to run ops using a step function to MonitoredSession.
8634    *   Add `DenseFlipout` probabilistic layer.
8635    *   A new flag `ignore_live_threads` is available on train. If set to
8636        `True`, it will ignore threads that remain running when tearing down
8637        infrastructure after successfully completing training, instead of
8638        throwing a RuntimeError.
8639    *   Restandardize `DenseVariational` as simpler template for other
8640        probabilistic layers.
8641    *   `tf.data` now supports `tf.SparseTensor` components in dataset elements.
8642    *   It is now possible to iterate over `Tensor`s.
8643    *   Allow `SparseSegmentReduction` ops to have missing segment IDs.
8644    *   Modify custom export strategy to account for multidimensional sparse
8645        float splits.
8646    *   `Conv2D`, `Conv2DBackpropInput`, `Conv2DBackpropFilter` now supports
8647        arbitrary dilations with GPU and cuDNNv6 support.
8648    *   `Estimator` now supports `Dataset`: `input_fn` can return a `Dataset`
8649        instead of `Tensor`s.
8650    *   Add `RevBlock`, a memory-efficient implementation of reversible residual
8651        layers.
8652    *   Reduce BFCAllocator internal fragmentation.
8653    *   Add `cross_entropy` and `kl_divergence` to
8654        `tf.distributions.Distribution`.
8655    *   Add `tf.nn.softmax_cross_entropy_with_logits_v2` which enables backprop
8656        w.r.t. the labels.
8657    *   GPU back-end now uses `ptxas` to compile generated PTX.
8658    *   `BufferAssignment`'s protocol buffer dump is now deterministic.
8659    *   Change embedding op to use parallel version of `DynamicStitch`.
8660    *   Add support for sparse multidimensional feature columns.
8661    *   Speed up the case for sparse float columns that have only 1 value.
8662    *   Allow sparse float splits to support multivalent feature columns.
8663    *   Add `quantile` to `tf.distributions.TransformedDistribution`.
8664    *   Add `NCHW_VECT_C` support for `tf.depth_to_space` on GPU.
8665    *   Add `NCHW_VECT_C` support for `tf.space_to_depth` on GPU.
8666
8667## API Changes
8668
8669*   Rename `SqueezeDims` attribute to `Axis` in C++ API for Squeeze op.
8670*   `Stream::BlockHostUntilDone` now returns Status rather than bool.
8671*   Minor refactor: move stats files from `stochastic` to `common` and remove
8672    `stochastic`.
8673
8674## Known Bugs
8675
8676*   Using XLA:GPU with CUDA 9 and CUDA 9.1 results in garbage results and/or
8677    `CUDA_ILLEGAL_ADDRESS` failures.
8678
8679    Google discovered in mid-December 2017 that the PTX-to-SASS compiler in CUDA
8680    9 and CUDA 9.1 sometimes does not properly compute the carry bit when
8681    decomposing 64-bit address calculations with large offsets (e.g. `load [x +
8682    large_constant]`) into 32-bit arithmetic in SASS.
8683
8684    As a result, these versions of `ptxas` miscompile most XLA programs which
8685    use more than 4GB of temp memory. This results in garbage results and/or
8686    `CUDA_ERROR_ILLEGAL_ADDRESS` failures.
8687
8688    A fix in CUDA 9.1.121 is expected in late February 2018. We do not expect a
8689    fix for CUDA 9.0.x. Until the fix is available, the only workaround is to
8690    [downgrade](https://developer.nvidia.com/cuda-toolkit-archive) to CUDA 8.0.x
8691    or disable XLA:GPU.
8692
8693    TensorFlow will print a warning if you use XLA:GPU with a known-bad version
8694    of CUDA; see e00ba24c4038e7644da417ddc639169b6ea59122.
8695
8696## Thanks to our Contributors
8697
8698This release contains contributions from many people at Google, as well as:
8699
8700Adam Zahran, Ag Ramesh, Alan Lee, Alan Yee, Alex Sergeev, Alexander, Amir H.
8701Jadidinejad, Amy, Anastasios Doumoulakis, Andrei Costinescu, Andrei Nigmatulin,
8702Anthony Platanios, Anush Elangovan, arixlin, Armen Donigian, ArtëM Sobolev,
8703Atlas7, Ben Barsdell, Bill Prin, Bo Wang, Brett Koonce, Cameron Thomas, Carl
8704Thomé, Cem Eteke, cglewis, Changming Sun, Charles Shenton, Chi-Hung, Chris
8705Donahue, Chris Filo Gorgolewski, Chris Hoyean Song, Chris Tava, Christian Grail,
8706Christoph Boeddeker, cinqS, Clayne Robison, codrut3, concerttttt, CQY, Dan
8707Becker, Dan Jarvis, Daniel Zhang, David Norman, dmaclach, Dmitry Trifonov,
8708Donggeon Lim, dongpilYu, Dr. Kashif Rasul, Edd Wilder-James, Eric Lv, fcharras,
8709Felix Abecassis, FirefoxMetzger, formath, FredZhang, Gaojin Cao, Gary Deer,
8710Guenther Schmuelling, Hanchen Li, Hanmin Qin, hannesa2, hyunyoung2, Ilya
8711Edrenkin, Jackson Kontny, Jan, Javier Luraschi, Jay Young, Jayaram Bobba, Jeff,
8712Jeff Carpenter, Jeremy Sharpe, Jeroen BéDorf, Jimmy Jia, Jinze Bai, Jiongyan
8713Zhang, Joe Castagneri, Johan Ju, Josh Varty, Julian Niedermeier, JxKing, Karl
8714Lessard, Kb Sriram, Keven Wang, Koan-Sin Tan, Kyle Mills, lanhin, LevineHuang,
8715Loki Der Quaeler, Loo Rong Jie, Luke Iwanski, LáSzló Csomor, Mahdi Abavisani,
8716Mahmoud Abuzaina, ManHyuk, Marek ŠUppa, MathSquared, Mats Linander, Matt Wytock,
8717Matthew Daley, Maximilian Bachl, mdymczyk, melvyniandrag, Michael Case, Mike
8718Traynor, miqlas, Namrata-Ibm, Nathan Luehr, Nathan Van Doorn, Noa Ezra, Nolan
8719Liu, Oleg Zabluda, opensourcemattress, Ouwen Huang, Paul Van Eck, peisong, Peng
8720Yu, PinkySan, pks, powderluv, Qiao Hai-Jun, Qiao Longfei, Rajendra Arora, Ralph
8721Tang, resec, Robin Richtsfeld, Rohan Varma, Ryohei Kuroki, SaintNazaire, Samuel
8722He, Sandeep Dcunha, sandipmgiri, Sang Han, scott, Scott Mudge, Se-Won Kim, Simon
8723Perkins, Simone Cirillo, Steffen Schmitz, Suvojit Manna, Sylvus, Taehoon Lee,
8724Ted Chang, Thomas Deegan, Till Hoffmann, Tim, Toni Kunic, Toon Verstraelen,
8725Tristan Rice, Urs KöSter, Utkarsh Upadhyay, Vish (Ishaya) Abrams, Winnie Tsang,
8726Yan Chen, Yan Facai (颜发才), Yi Yang, Yong Tang, Youssef Hesham, Yuan (Terry)
8727Tang, Zhengsheng Wei, zxcqwe4906, 张志豪, 田传武
8728
8729We are also grateful to all who filed issues or helped resolve them, asked and
8730answered questions, and were part of inspiring discussions.
8731
8732# Release 1.4.1
8733
8734## Bug Fixes and Other Changes
8735
8736*   `LinearClassifier` fix.
8737
8738# Release 1.4.0
8739
8740## Major Features And Improvements
8741
8742*   `tf.keras` is now part of the core TensorFlow API.
8743*   [`tf.data`](http://tensorflow.org/guide/data) is now part of the core
8744    TensorFlow API.
8745    *   The API is now subject to backwards compatibility guarantees.
8746    *   For a guide to migrating from the `tf.contrib.data` API, see the
8747        [README](https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/contrib/data/README.md).
8748    *   Major new features include `Dataset.from_generator()` (for building an
8749        input pipeline from a Python generator), and the `Dataset.apply()`
8750        method for applying custom transformation functions.
8751    *   Several custom transformation functions have been added, including
8752        `tf.contrib.data.batch_and_drop_remainder()` and
8753        `tf.contrib.data.sloppy_interleave()`.
8754*   Add `train_and_evaluate` for simple distributed `Estimator` training.
8755*   Add `tf.spectral.dct` for computing the DCT-II.
8756*   Add Mel-Frequency Cepstral Coefficient support to `tf.contrib.signal` (with
8757    GPU and gradient support).
8758*   Add a self-check on `import tensorflow` for Windows DLL issues.
8759*   Add NCHW support to `tf.depth_to_space` on GPU.
8760*   TensorFlow Debugger (tfdbg):
8761    *   Add `eval` command to allow evaluation of arbitrary Python/numpy
8762        expressions in tfdbg command-line interface. See
8763        [Debugging TensorFlow Programs](https://www.tensorflow.org/guide/debugger)
8764        for more details.
8765    *   Usability improvement: The frequently used tensor filter
8766        `has_inf_or_nan` is now added to `Session` wrappers and hooks by
8767        default. So there is no need for clients to call
8768        `.add_tensor_filter(tf_debug.has_inf_or_nan)` anymore.
8769*   SinhArcsinh (scalar) distribution added to `contrib.distributions`.
8770*   Make `GANEstimator` opensource.
8771*   `Estimator.export_savedmodel()` now includes all valid serving signatures
8772    that can be constructed from the Serving Input Receiver and all available
8773    ExportOutputs. For instance, a classifier may provide regression- and
8774    prediction-flavored outputs, in addition to the classification-flavored one.
8775    Building signatures from these allows TF Serving to honor requests using the
8776    different APIs (Classify, Regress, and Predict). Furthermore,
8777    `serving_input_receiver_fn()` may now specify alternative subsets of nodes
8778    that may act as inputs. This allows, for instance, producing a prediction
8779    signature for a classifier that accepts raw `Tensors` instead of a
8780    serialized `tf.Example`.
8781*   Add `tf.contrib.bayesflow.hmc`.
8782*   Add `tf.contrib.distributions.MixtureSameFamily`.
8783*   Make `Dataset.shuffle()` always reshuffles after each iteration by default.
8784*   Add `tf.contrib.bayesflow.metropolis_hastings`.
8785*   Add `log_rate` parameter to `tf.contrib.distributions.Poisson`.
8786*   Extend `tf.contrib.distributions.bijector` API to handle some non-injective
8787    transforms.
8788*   Java:
8789    *   Generics (e.g., `Tensor<Integer>`) for improved type-safety (courtesy
8790        @andrewcmyers).
8791    *   Support for multi-dimensional string tensors.
8792    *   Support loading of custom operations (e.g. many in `tf.contrib`) on
8793        Linux and OS X
8794*   All our prebuilt binaries have been built with CUDA 8 and cuDNN 6. We
8795    anticipate releasing TensorFlow 1.5 with CUDA 9 and cuDNN 7.
8796
8797## Bug Fixes and Other Changes
8798
8799*   `tf.nn.rnn_cell.DropoutWrapper` is now more careful about dropping out LSTM
8800    states. Specifically, it no longer ever drops the `c` (memory) state of an
8801    `LSTMStateTuple`. The new behavior leads to proper dropout behavior for
8802    LSTMs and stacked LSTMs. This bug fix follows recommendations from published
8803    literature, but is a behavioral change. State dropout behavior may be
8804    customized via the new `dropout_state_filter_visitor` argument.
8805*   Removed `tf.contrib.training.python_input`. The same behavior, in a more
8806    flexible and reproducible package, is available via the new
8807    `tf.contrib.data.Dataset.from_generator` method!
8808*   Fix `tf.contrib.distributions.Affine` incorrectly computing
8809    log-det-jacobian.
8810*   Fix `tf.random_gamma` incorrectly handling non-batch, scalar draws.
8811*   Resolved a race condition in TensorForest TreePredictionsV4Op.
8812*   Google Cloud Storage file system, Amazon S3 file system, and Hadoop file
8813    system support are now default build options.
8814*   Custom op libraries must link against libtensorflow_framework.so (installed
8815    at `tf.sysconfig.get_lib()`).
8816*   Change `RunConfig` default behavior to not set a random seed, making random
8817    behavior independently random on distributed workers. We expect this to
8818    generally improve training performance. Models that do rely on determinism
8819    should set a random seed explicitly.
8820
8821## Breaking Changes to the API
8822
8823*   The signature of the `tf.contrib.data.rejection_resample()` function has
8824    been changed. It now returns a function that can be used as an argument to
8825    `Dataset.apply()`.
8826*   Remove `tf.contrib.data.Iterator.from_dataset()` method. Use
8827    `Dataset.make_initializable_iterator()` instead.
8828*   Remove seldom used and unnecessary `tf.contrib.data.Iterator.dispose_op()`.
8829*   Reorder some TF-GAN loss functions in a non-backwards compatible way.
8830
8831## Known Issues
8832
8833*   In Python 3, `Dataset.from_generator()` does not support Unicode strings.
8834    You must convert any strings to bytes objects before yielding them from the
8835    generator.
8836
8837## Thanks to our Contributors
8838
8839This release contains contributions from many people at Google, as well as:
8840
88414d55397500, Abdullah Alrasheed, abenmao, Adam Salvail, Aditya Dhulipala, Ag
8842Ramesh, Akimasa Kimura, Alan Du, Alan Yee, Alexander, Amit Kushwaha, Amy, Andrei
8843Costinescu, Andrei Nigmatulin, Andrew Erlichson, Andrew Myers, Andrew Stepanov,
8844Androbin, AngryPowman, Anish Shah, Anton Daitche, Artsiom Chapialiou, asdf2014,
8845Aseem Raj Baranwal, Ash Hall, Bart Kiers, Batchu Venkat Vishal, ben, Ben
8846Barsdell, Bill Piel, Carl Thomé, Catalin Voss, Changming Sun, Chengzhi Chen, Chi
8847Zeng, Chris Antaki, Chris Donahue, Chris Oelmueller, Chris Tava, Clayne Robison,
8848Codrut, Courtial Florian, Dalmo Cirne, Dan J, Darren Garvey, David
8849Kristoffersson, David Norman, David RöThlisberger, DavidNorman, Dhruv, DimanNe,
8850Dorokhov, Duncan Mac-Vicar P, EdwardDixon, EMCP, error.d, FAIJUL, Fan Xia,
8851Francois Xavier, Fred Reiss, Freedom" Koan-Sin Tan, Fritz Obermeyer, Gao, Xiang,
8852Guenther Schmuelling, Guo Yejun (郭叶军), Hans Gaiser, HectorSVC, Hyungsuk Yoon,
8853James Pruegsanusak, Jay Young, Jean Wanka, Jeff Carpenter, Jeremy Rutman, Jeroen
8854BéDorf, Jett Jones, Jimmy Jia, jinghuangintel, jinze1994, JKurland, Joel
8855Hestness, joetoth, John B Nelson, John Impallomeni, John Lawson, Jonas, Jonathan
8856Dekhtiar, joshkyh, Jun Luan, Jun Mei, Kai Sasaki, Karl Lessard, [email protected], Kb
8857Sriram, Kenichi Ueno, Kevin Slagle, Kongsea, Lakshay Garg, lhlmgr, Lin Min,
8858liu.guangcong, Loki Der Quaeler, Louie Helm, lucasmoura, Luke Iwanski, Lyndon
8859White, Mahmoud Abuzaina, Marcel Puyat, Mark Aaron Shirley, Michele Colombo,
8860MtDersvan, Namrata-Ibm, Nathan Luehr, Naurril, Nayana Thorat, Nicolas Lopez,
8861Niranjan Hasabnis, Nolan Liu, Nouce, Oliver Hennigh, osdamv, Patrik Erdes,
8862Patryk Chrabaszcz, Pavel Christof, Penghao Cen, postBG, Qingqing Cao, Qingying
8863Chen, qjivy, Raphael, Rasmi, raymondxyang, Renze Yu, resec, Roffel, Ruben
8864Vereecken, Ryohei Kuroki, sandipmgiri, Santiago Castro, Scott Kirkland, Sean
8865Vig, Sebastian Raschka, Sebastian Weiss, Sergey Kolesnikov, Sergii Khomenko,
8866Shahid, Shivam Kotwalia, Stuart Berg, Sumit Gouthaman, superzerg, Sven Mayer,
8867tetris, Ti Zhou, Tiago Freitas Pereira, Tian Jin, Tomoaki Oiki, Vaibhav Sood,
8868vfdev, Vivek Rane, Vladimir Moskva, wangqr, Weber Xie, Will Frey, Yan Facai
8869(颜发才), yanivbl6, Yaroslav Bulatov, Yixing Lao, Yong Tang, youkaichao, Yuan
8870(Terry) Tang, Yue Zhang, Yuxin Wu, Ziming Dong, ZxYuan, 黄璞
8871
8872We are also grateful to all who filed issues or helped resolve them, asked and
8873answered questions, and were part of inspiring discussions.
8874
8875# Release 1.3.0
8876
8877See also
8878[TensorBoard 0.1.4](https://github.com/tensorflow/tensorboard/releases/tag/0.1.4)
8879release notes.
8880
8881## Major Features and Improvements
8882
8883*   Added canned estimators to Tensorflow library. List of added estimators:
8884    *   `DNNClassifier`
8885    *   `DNNRegressor`
8886    *   `LinearClassifier`
8887    *   `LinearRegressor`
8888    *   `DNNLinearCombinedClassifier`
8889    *   `DNNLinearCombinedRegressor`.
8890*   All our prebuilt binaries have been built with cuDNN 6. We anticipate
8891    releasing TensorFlow 1.4 with cuDNN 7.
8892*   `import tensorflow` now goes much faster.
8893*   Adds a file cache to the GCS filesystem with configurable max staleness for
8894    file contents. This permits caching of file contents across close/open
8895    boundaries.
8896*   Added an axis parameter to `tf.gather`.
8897*   Added a `constant_values` keyword argument to `tf.pad`.
8898*   Adds `Dataset.interleave` transformation.
8899*   Add `ConcatenateDataset` to concatenate two datasets.
8900*   Added Mobilenet support to TensorFlow for Poets training script.
8901*   Adds a block cache to the GCS filesystem with configurable block size and
8902    count.
8903*   SinhArcSinh bijector added.
8904*   Added `Dataset.list_files` API.
8905*   Introduces new operations and Python bindings for the Cloud TPU.
8906*   Adding TensorFlow-iOS CocoaPod for symmetry with tensorflow-android.
8907*   Introduces base implementations of ClusterResolvers.
8908*   Unify memory representations of TensorShape and PartialTensorShape. As a
8909    consequence, tensors now have a maximum of 254 dimensions, not 255.
8910*   Changed references to LIBXSMM to use version 1.8.1.
8911*   TensorFlow Debugger (tfdbg):
8912    *   Display summaries of numeric tensor values with the `-s` flag to command
8913        `print_tensor` or `pt`.
8914    *   Display feed values with the `print_feed` or `pf` command and clickable
8915        links in the curses UI.
8916    *   Runtime profiler at the op level and the Python source line level with
8917        the `run -p` command.
8918*   Initial release of the statistical distribution library `tf.distributions`.
8919*   GPU kernels and speed improvements for unary `tf.where` and `tf.nn.top_k`.
8920*   Monotonic Attention wrappers added to `tf.contrib.seq2seq`.
8921*   Added `tf.contrib.signal`, a library for signal processing primitives.
8922*   Added `tf.contrib.resampler`, containing CPU and GPU ops for differentiable
8923    resampling of images.
8924
8925## Breaking Changes to the API
8926
8927*   `tf.RewriterConfig` was removed from the Python API after being available in
8928    1.2 release candidates (it was never in an actual release). Graph rewriting
8929    is still available, just not as `tf.RewriterConfig`. Instead add an explicit
8930    import.
8931*   Breaking change to `tf.contrib.data.Dataset` APIs that expect a nested
8932    structure. Lists are now converted to `tf.Tensor` implicitly. You may need
8933    to change uses of lists to tuples in existing code. In addition, dicts are
8934    now supported as a nested structure.
8935
8936## Changes to contrib APIs
8937
8938*   Adds tf.contrib.nn.rank_sampled_softmax_loss, a sampled-softmax variant that
8939    can improve rank loss.
8940*   `tf.contrib.metrics`.{streaming_covariance,streaming_pearson_correlation}
8941    modified to return nan when they have seen less or equal to 1 unit of
8942    weight.
8943*   Adds time series models to contrib. See contrib/timeseries/README.md for
8944    details.
8945*   Adds FULLY_CONNECTED Op to tensorflow/lite/schema.fbs
8946
8947## Known Issues
8948
8949*   Tensorflow_gpu compilation fails with Bazel 0.5.3.
8950
8951## Bug Fixes and Other Changes
8952
8953*   Fixes `strides` and `begin` dtype mismatch when slicing using int64 Tensor
8954    index in python.
8955*   Improved convolution padding documentation.
8956*   Add a tag constant, gpu, to present graph with GPU support.
8957*   `saved_model.utils` now support SparseTensors transparently.
8958*   A more efficient implementation of non-max suppression.
8959*   Add support for the shrinkage-type L2 to FtrlOptimizer in addition to the
8960    online L2 it already supports.
8961*   Fix negative variance in moments calculation.
8962*   Expand UniqueOp Benchmark Tests to cover more collision cases.
8963*   Improves stability of GCS filesystem on Mac.
8964*   Add time estimation to HloCostAnalysis.
8965*   Fixed the bug in Estimator that params in constructor was not a deepcopy of
8966    the user provided one. This bugs inadvertently enabled user to mutate the
8967    params after the creation of Estimator, leading to potentially undefined
8968    behavior.
8969*   Added None check for save_path in `saver.restore`.
8970*   Register devices under their legacy names in device_mgr to ease the
8971    transition to clusterspec-propagated configurations.
8972*   VectorExponential added to distributions.
8973*   Add a bitwise module with bitwise_and, bitwise_or, bitwise_xor, and invert
8974    functions.
8975*   Add fixed-grid ODE integration routines.
8976*   Allow passing bounds to ScipyOptimizerInterface.
8977*   Correctness fixes for fft_length parameter to `tf.spectral.rfft` &
8978    `tf.spectral.irfft`.
8979*   Exported model signatures using the 'predict' method will no longer have
8980    their input and output keys silently ignored and rewritten to 'inputs' and
8981    'outputs'. If a model was exported with different names before 1.2, and is
8982    now served with tensorflow/serving, it will accept requests using 'inputs'
8983    and 'outputs'. Starting at 1.2, such a model will accept the keys specified
8984    during export. Therefore, inference requests using 'inputs' and 'outputs'
8985    may start to fail. To fix this, either update any inference clients to send
8986    requests with the actual input and output keys used by the trainer code, or
8987    conversely, update the trainer code to name the input and output Tensors
8988    'inputs' and 'outputs', respectively. Signatures using the 'classify' and
8989    'regress' methods are not affected by this change; they will continue to
8990    standardize their input and output keys as before.
8991*   Add in-memory caching to the Dataset API.
8992*   Set default end_of_sequence variable in datasets iterators to false.
8993*   [Performance] Increase performance of `tf.layers.conv2d` when setting
8994    use_bias=True by 2x by using nn.bias_add.
8995*   Update iOS examples to use CocoaPods, and moved to tensorflow/examples/ios.
8996*   Adds a family= attribute in `tf.summary` ops to allow controlling the tab
8997    name used in Tensorboard for organizing summaries.
8998*   When GPU is configured, do not require --config=cuda, instead, automatically
8999    build for GPU if this is requested in the configure script.
9000*   Fix incorrect sampling of small probabilities in CPU/GPU multinomial.
9001*   Add a list_devices() API on sessions to list devices within a cluster.
9002    Additionally, this change augment the ListDevices master API to support
9003    specifying a session.
9004*   Allow uses of over-parameterized separable convolution.
9005*   TensorForest multi-regression bug fix.
9006*   Framework now supports armv7, cocoapods.org now displays correct page.
9007*   Script to create iOS framework for CocoaPods.
9008*   Android releases of TensorFlow are now pushed to jcenter for easier
9009    integration into apps. See
9010    https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/android/inference_interface/README.md
9011    for more details.
9012*   TensorFlow Debugger (tfdbg):
9013    *   Fixed a bug that prevented tfdbg from functioning with multi-GPU setups.
9014    *   Fixed a bug that prevented tfdbg from working with
9015        `tf.Session.make_callable`.
9016
9017## Thanks to our Contributors
9018
9019This release contains contributions from many people at Google, as well as:
9020
90214F2E4A2E, Adriano Carmezim, Adrià Arrufat, Alan Yee, Alex Lattas, Alex Rothberg,
9022Alexandr Baranezky, Ali Siddiqui, Andreas Solleder, Andrei Costinescu, Andrew
9023Hundt, Androbin, Andy Kernahan, Anish Shah, Anthony Platanios, Arvinds-Ds, b1rd,
9024Baptiste Arnaud, Ben Mabey, Benedikt Linse, Beomsu Kim, Bo Wang, Boyuan Deng,
9025Brett Koonce, Bruno Rosa, Carl Thomé, Changming Sun, Chase Roberts, Chirag
9026Bhatia, Chris Antaki, Chris Hoyean Song, Chris Tava, Christos Nikolaou, Croath
9027Liu, cxx, Czxck001, Daniel Ylitalo, Danny Goodman, Darren Garvey, David
9028Brailovsky, David Norman, DavidNorman, davidpham87, ddurham2, Dhruv, DimanNe,
9029Drew Hintz, Dustin Tran, Earthson Lu, ethiraj, Fabian Winnen, Fei Sun, Freedom"
9030Koan-Sin Tan, Fritz Obermeyer, Gao, Xiang, Gautam, Guenther Schmuelling, Gyu-Ho
9031Lee, Hauke Brammer, horance, Humanity123, J Alammar, Jayeol Chun, Jeroen BéDorf,
9032Jianfei Wang, jiefangxuanyan, Jing Jun Yin, Joan Puigcerver, Joel Hestness,
9033Johannes Mayer, John Lawson, Johnson145, Jon Malmaud, Jonathan
9034Alvarez-Gutierrez, Juang, Yi-Lin, Julian Viereck, Kaarthik Sivashanmugam, Karl
9035Lessard, [email protected], Kevin Carbone, Kevin Van Der Burgt, Kongsea, ksellesk,
9036lanhin, Lef Ioannidis, Liangliang He, Louis Tiao, Luke Iwanski, LáSzló Csomor,
9037magixsno, Mahmoud Abuzaina, Marcel Hlopko, Mark Neumann, Maxwell Paul Brickner,
9038mdfaijul, MichaëL Defferrard, Michał JastrzęBski, Michele Colombo, Mike Brodie,
9039Mosnoi Ion, mouradmourafiq, myPrecious, Nayana Thorat, Neeraj Kashyap, Nelson
9040Liu, Niranjan Hasabnis, Olivier Moindrot, orome, Pankaj Gupta, Paul Van Eck,
9041peeyush18, Peng Yu, Pierre, preciousdp11, qjivy, Raingo, raoqiyu, ribx, Richard
9042S. Imaoka, Rishabh Patel, Robert Walecki, Rockford Wei, Ryan Kung, Sahil Dua,
9043Sandip Giri, Sayed Hadi Hashemi, sgt101, Shitian Ni, Shuolongbj, Siim PõDer,
9044Simon Perkins, sj6077, SOLARIS, Spotlight0xff, Steffen Eberbach, Stephen Fox,
9045superryanguo, Sven Mayer, Tapan Prakash, Tiago Morais Morgado, Till Hoffmann, Tj
9046Rana, Vadim Markovtsev, vhasanov, Wei Wu, windead, Yan (Asta) Li, Yan Chen, Yann
9047Henon, Yi Wang, Yong Tang, yorkie, Yuan (Terry) Tang, Yuxin Wu, zhengjiajin,
9048zhongzyd, 黄璞
9049
9050We are also grateful to all who filed issues or helped resolve them, asked and
9051answered questions, and were part of inspiring discussions.
9052
9053# Release 1.2.1
9054
9055## Bug Fixes and Other Changes
9056
9057*   Updating markdown version required to >= 2.6.8.
9058*   Support tensors as dropout rates again, by removing the min(max(..))
9059
9060# Release 1.2.0
9061
9062## Major Features and Improvements
9063
9064*   Python 3.6 support on Windows.
9065*   Added `tf.layers.conv3d_transpose` layer for spatio temporal deconvolution.
9066*   Added `tf.Session.make_callable()`, which provides a lower overhead means of
9067    running a similar step multiple times.
9068*   Added libverbs-based RDMA support to contrib (courtesy @junshi15 from
9069    Yahoo).
9070*   Bring `tf.feature_column.*` into the API. Non-deprecated functionality from
9071    `tf.contrib.layers.*` is moved to `tf.feature_column.*` with cosmetic
9072    changes.
9073*   `RNNCell` objects now subclass `tf.layers.Layer`. The strictness described
9074    in the TensorFlow 1.1 release is gone: The first time an RNNCell is used, it
9075    caches its scope. All future uses of the RNNCell will reuse variables from
9076    that same scope. This is a breaking change from the behavior of RNNCells in
9077    TensorFlow versions <= 1.0.1. TensorFlow 1.1 had checks in place to ensure
9078    old code works correctly with the new semantics; this version allows more
9079    flexible uses of RNNCell but can lead to subtle errors if using code meant
9080    for TensorFlow <= 1.0.1. For example, writing: `MultiRNNCell([lstm] * 5)`
9081    will now build a 5-layer LSTM stack where each layer shares the **same**
9082    parameters. To get 5 layers each with their own parameters, write:
9083    `MultiRNNCell([LSTMCell(...) for _ in range(5)])`. If at all unsure, first
9084    test your code with TF 1.1; ensure it raises no errors, and then upgrade to
9085    TF 1.2.
9086*   RNNCells' variable names have been renamed for consistency with Keras
9087    layers. Specifically, the previous variable names "weights" and "biases"
9088    have been changed to "kernel" and "bias", respectively. This may cause
9089    backward incompatibility with regard to your old checkpoints containing such
9090    RNN cells, in which case you can use the tool
9091    [checkpoint_convert script](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/rnn/python/tools/checkpoint_convert.py)
9092    to convert the variable names in your old checkpoints.
9093*   Many of the RNN functions and classes that were in the `tf.nn` namespace
9094    before the 1.0 release and which were moved to `tf.contrib.rnn` have now
9095    been moved back to the core namespace. This includes `RNNCell`, `LSTMCell`,
9096    `GRUCell`, and a number of other cells. These now reside in `tf.nn.rnn_cell`
9097    (with aliases in `tf.contrib.rnn` for backwards compatibility). The original
9098    `tf.nn.rnn` function is now `tf.nn.static_rnn`, and the bidirectional static
9099    and state saving static rnn functions are also now back in the `tf.nn`
9100    namespace.
9101
9102    Notable exceptions are the `EmbeddingWrapper`, `InputProjectionWrapper` and
9103    `OutputProjectionWrapper`, which will slowly be moved to deprecation in
9104    `tf.contrib.rnn`. These are inefficient wrappers that should often be
9105    replaced by calling `embedding_lookup` or `layers.dense` as pre- or post-
9106    processing of the rnn. For RNN decoding, this functionality has been
9107    replaced with an alternative API in `tf.contrib.seq2seq`.
9108
9109*   Intel MKL Integration
9110    (https://software.intel.com/en-us/articles/tensorflow-optimizations-on-modern-intel-architecture).
9111    Intel developed a number of optimized deep learning primitives: In addition
9112    to matrix multiplication and convolution, these building blocks include:
9113    Direct batched convolution Pooling: maximum, minimum, average Normalization:
9114    LRN, batch normalization Activation: rectified linear unit (ReLU) Data
9115    manipulation: multi-dimensional transposition (conversion), split, concat,
9116    sum and scale.
9117
9118*   TensorForest Estimator now supports SavedModel export for serving.
9119
9120*   Support client-provided ClusterSpec's and propagate them to all workers to
9121    enable the creation of dynamic TensorFlow clusters.
9122
9123*   TensorFlow C library now available for Windows.
9124
9125*   We released a new open-source version of TensorBoard.
9126
9127*   [`SavedModel CLI`](https://www.tensorflow.org/versions/master/guide/saved_model_cli)
9128    tool available to inspect and execute MetaGraph in SavedModel
9129
9130*   Android releases of TensorFlow are now pushed to jcenter for easier
9131    integration into apps. See
9132    https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/android/inference_interface/README.md
9133    for more details.
9134
9135## Deprecations
9136
9137*   TensorFlow 1.2 may be the last time we build with cuDNN 5.1. Starting with
9138    TensorFlow 1.3, we will try to build all our prebuilt binaries with cuDNN
9139    6.0. While we will try to keep our source code compatible with cuDNN 5.1, it
9140    will be best effort.
9141
9142## Breaking Changes to the API
9143
9144*   `org.tensorflow.contrib.android.TensorFlowInferenceInterface` now throws
9145    exceptions where possible and has simplified method signatures.
9146
9147## Changes to contrib APIs
9148
9149*   Added `tf.contrib.util.create_example`.
9150*   Added bilinear interpolation to `tf.contrib.image`.
9151*   Add `tf.contrib.stateless` for random ops with custom seed control.
9152*   MultivariateNormalFullCovariance added to contrib/distributions/
9153*   tensorflow/contrib/rnn undergoes RNN cell variable renaming for consistency
9154    with Keras layers. Specifically, the previous variable names "weights" and
9155    "biases" are changed to "kernel" and "bias", respectively. This may cause
9156    backward incompatibility with regard to your old checkpoints containing such
9157    RNN cells, in which case you can use the
9158    [checkpoint_convert script](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/rnn/python/tools/checkpoint_convert.py)
9159    to convert the variable names in your old checkpoints.
9160*   Added `tf.contrib.kernel_methods` module with Ops and estimators for primal
9161    (explicit) kernel methods in TensorFlow.
9162
9163## Bug Fixes and Other Changes
9164
9165*   In python, `Operation.get_attr` on type attributes returns the Python DType
9166    version of the type to match expected get_attr documentation rather than the
9167    protobuf enum.
9168*   tensorflow/contrib/rnn undergoes RNN cell variable renaming for consistency
9169    with Keras layers. Specifically, the previous variable names "weights" and
9170    "biases" are changed to "kernel" and "bias", respectively.
9171*   Changed MIN_SDK version to 8.0 when building iOS libraries.
9172*   Fixed LIBXSMM integration.
9173*   Make decode_jpeg/decode_png/decode_gif handle all formats, since users
9174    frequently try to decode an image as the wrong type.
9175*   Improve implicit broadcasting lowering.
9176*   Improving stability of GCS/BigQuery clients by a faster retrying of stale
9177    transmissions.
9178*   Remove OpKernelConstruction::op_def() as part of minimizing proto
9179    dependencies.
9180*   VectorLaplaceDiag distribution added.
9181*   Android demo no longer requires libtensorflow_demo.so to run
9182    (libtensorflow_inference.so still required)
9183*   Added `categorical_column_with_vocabulary_file`.
9184*   Introduce ops for batching/unbatching tensors across Session::Run() calls.
9185*   Add tf.log_sigmoid(x) = tf.log(tf.sigmoid(x)) = -tf.nn.softplus(-x).
9186*   Changed hooks lists to immutable tuples, and now allow any iterable for the
9187    associated arguments.
9188*   Introduce TFDecorator.
9189*   Added an Mfcc op for speech feature generation.
9190*   Improved DirectSession::Run() overhead and error checking. Feeding a value
9191    of the wrong type will now synchronously raise an INVALID_ARGUMENT error
9192    instead of asynchronously raising an INTERNAL error. Code that depends on
9193    the (undefined) behavior when feeding a tensor of the wrong type may need to
9194    be updated.
9195*   Added unreduced NONE, and reduced MEAN options for losses. Removed
9196    "WEIGHTED_" prefix from other Reduction constants.
9197*   assertAllClose now handles dicts.
9198*   Added Gmock matcher for HloInstructions.
9199*   Add var name to errors on variable restore.
9200*   Added an AudioSpectrogram op for audio feature generation.
9201*   Added `reduction` arg to losses.
9202*   `tf.placeholder` can represent scalar shapes and partially known.
9203*   Remove estimator_spec(mode) argument.
9204*   Added an AudioSpectrogram op for audio feature generation.
9205*   TensorBoard disables all runs by default if there are more than 40 runs.
9206*   Removed old doc generator code.
9207*   GCS file system integration now supports domain buckets, e.g
9208    gs://bucket.domain.com/path.
9209*   Add `tf.summary.text` for outputting text to TensorBoard.
9210*   The "run" command of tfdbg's command-line interface now supports filtering
9211    of tensors by node name, op type and tensor dtype.
9212*   `tf.string_to_number` now supports int64 and float64 outputs.
9213
9214## Thanks to our Contributors
9215
9216This release contains contributions from many people at Google, as well as:
9217
92184F2E4A2E, Aaron Schumacher, Abhi Agg, admcrae, Adriano Carmezim, Adrià Arrufat,
9219agramesh1, Akimitsu Seo, Alan Mosca, Alex Egg, Alex Rothberg, Alexander
9220Heinecke, Alexander Matyasko, Alexandr Baranezky, Alexandre Caulier, Ali
9221Siddiqui, Anand Venkat, Andrew Hundt, Androbin, Anmol Sharma, Arie, Arno Leist,
9222Arron Cao, AuréLien Geron, Bairen Yi, Beomsu Kim, Carl Thomé, cfperez, Changming
9223Sun, Corey Wharton, critiqjo, Dalei Li, Daniel Rasmussen, Daniel Trebbien, DaríO
9224Hereñú, David Eng, David Norman, David Y. Zhang, Davy Song, ddurham2, Deepak
9225Subburam, Dmytro Kyrychuk, Dominic Rossi, Dominik SchlöSser, Dustin Tran,
9226Eduardo Pinho, Egil Martinsson, Elliot Saba, Eric Bigelow, Erik Smistad, Evan
9227Klitzke, Fabrizio Milo, Falcon Dai, Fei Gao, FloopCZ, Fung Lam, Gautam,
9228GBLin5566, Greg Peatfield, Gu Wang, Guenther Schmuelling, Hans Pabst, Harun
9229Gunaydin, Huaizheng, Ido Shamay, Ikaro Silva, Ilya Edrenkin, Immexxx, James
9230Mishra, Jamie Cooke, Jay Young, Jayaram Bobba, Jianfei Wang, jinghua2, Joey
9231Meyer, John Maidens, Jonghoon Jin, Julian Villella, Jun Kim, Jun Shi, Junwei
9232Pan, jyegerlehner, Karan Desai, Karel Van De Plassche, Kb Sriram,
9233KhabarlakKonstantin, Koan-Sin Tan, krivard, Kwotsin, Leandro Gracia Gil, Li
9234Chen, Liangliang He, Louie Helm, lspvic, Luiz Henrique Soares, LáSzló Csomor,
9235Mark Wong, Mathew Wicks, Matthew Rahtz, Maxwell Paul Brickner, Michael Hofmann,
9236Miguel Flores Ruiz De Eguino, MikeTam1021, Mortada Mehyar, Mycosynth, Namnamseo,
9237Nate Harada, Neven Miculinic, Nghia Tran, Nick Lyu, Niranjan Hasabnis, Nishidha,
9238Oleksii Kuchaiev, Oyesh Mann Singh, Panmari, Patrick, Paul Van Eck, Piyush
9239Chaudhary, Quim Llimona, Raingo, Richard Davies, Ruben Vereecken, Sahit
9240Chintalapudi, Sam Abrahams, Santiago Castro, Scott Sievert, Sean O'Keefe,
9241Sebastian Schlecht, Shane, Shubhankar Deshpande, Spencer Schaber, Sunyeop Lee,
9242t13m, td2014, Thomas H. P. Andersen, Toby Petty, Umang Mehta, Vadim Markovtsev,
9243Valentin Iovene, Vincent Zhao, Vit Stepanovs, Vivek Rane, Vu Pham,
9244wannabesrevenge, weipingpku, wuhaixutab, wydwww, Xiang Gao, Xiaolin Lin,
9245xiaoyaozhuzi, Yaroslav Bulatov, Yi Liu, Yoshihiro Sugi, Yuan (Terry) Tang,
9246Yuming Wang, Yuxin Wu, Zader Zheng, Zhaojun Zhang, zhengjiajin, ZhipengShen,
9247Ziming Dong, zjj2wry
9248
9249We are also grateful to all who filed issues or helped resolve them, asked and
9250answered questions, and were part of inspiring discussions.
9251
9252# Release 1.1.0
9253
9254## Major Features and Improvements
9255
9256*   Added Java API support for Windows.
9257*   Added `tf.spectral` module. Moved existing FFT ops to `tf.spectral` while
9258    keeping an alias in the old location (`tf.*`).
9259*   Added 1D, 2D and 3D Fourier transform ops for real signals to `tf.spectral`.
9260*   Added a `tf.bincount` function.
9261*   Added Keras 2 API to contrib.
9262*   Added a new lightweight queue-like object - `RecordInput`.
9263*   Added `tf.contrib.image.compose_transforms` function.
9264*   Bring `tf.estimator.*` into the API. Non-deprecated functionality from
9265    `tf.contrib.learn.Estimator` is moved to `tf.estimator.Estimator` with
9266    cosmetic changes.
9267*   Docker images: TF images on gcr.io and Docker Hub are upgraded to
9268    ubuntu:16.04.
9269*   Added the following features to TensorFlow Debugger (tfdbg):
9270    *   Ability to inspect Python source file against TF ops and tensors
9271        (command `print_source` / `ps`)
9272    *   New navigation bar in Curses-based UI
9273    *   NodeStepper (command `invoke_stepper`) now uses intermediate tensor
9274        dumps. It also uses `TensorHandles` as direct feeds during successive
9275        `cont` calls for improved performance and reduced memory consumption.
9276*   Initial release of installation guides for Java, C, and Go.
9277*   Added Text Dashboard to TensorBoard.
9278
9279## Deprecations
9280
9281*   TensorFlow 1.1.0 will be the last time we release a binary with Mac GPU
9282    support. Going forward, we will stop testing on Mac GPU systems. We continue
9283    to welcome patches that maintain Mac GPU support, and we will try to keep
9284    the Mac GPU build working.
9285
9286## Changes to contrib APIs
9287
9288*   The behavior of RNNCells is now stricter due to the transition towards
9289    making RNNCells act more like Keras layers.
9290    *   If an RNNCell is used twice in two different variable scopes, an error
9291        is raised describing how to avoid this behavior.
9292    *   If an RNNCell is used in a variable scope with existing conflicting
9293        variables, an error is raised showing that the RNNCell must be
9294        constructed with argument `reuse=True`.
9295*   Deprecated contrib/distributions `pmf`, `pdf`, `log_pmf`, `log_pdf`.
9296*   Moved `bayesflow.special_math` to distributions.
9297*   `tf.contrib.tensor_forest.python.tensor_forest.RandomForestDeviceAssigner`
9298    removed.
9299*   Changed some MVN classes and parameters:
9300    *   `tf.contrib.distributions.MultivariateNormalFull` replaced by
9301        `tf.contrib.distributions.MultivariateNormalTriL`.
9302    *   `tf.contrib.distributions.MultivariateNormalCholesky` replaced by
9303        `tf.contrib.distributions.MultivariateNormalTriL`
9304    *   `tf.contrib.distributions.MultivariateNormalDiagWithSoftplusStDev`
9305        replaced by
9306        `tf.contrib.distributions.MultivariateNormalDiagWithSoftplusScale`
9307    *   `tf.contrib.distributions.MultivariateNormalDiag` arguments changed from
9308        `mu`, `diag_stddev` to `log`, `scale_diag`.
9309    *   `tf.contrib.distributions.MultivariateNormalDiagPlusVDVT` removed.
9310    *   `tf.contrib.distributions.MultivariateNormalDiagPlusLowRank` added.
9311
9312## Bug Fixes and Other Changes
9313
9314*   Java: Support for loading models exported using the SavedModel API (courtesy
9315    @EronWright).
9316*   Go: Added support for incremental graph execution.
9317*   Fix a bug in the WALS solver when single-threaded.
9318*   Added support for integer sparse feature values in
9319    `tf.contrib.layers.sparse_column_with_keys`.
9320*   Fixed `tf.set_random_seed(0)` to be deterministic for all ops.
9321*   Stability improvements for the GCS file system support.
9322*   Improved TensorForest performance.
9323*   Added support for multiple filename globs in `tf.matching_files`.
9324*   `LogMessage` now includes a timestamp as beginning of a message.
9325*   Added MultiBox person detector example standalone binary.
9326*   Android demo: Makefile build functionality added to build.gradle to fully
9327    support building TensorFlow demo in Android on Windows.
9328*   Android demo: read MultiBox priors from txt file rather than protobuf.
9329*   Added colocation constraints to `StagingArea`.
9330*   `sparse_matmul_op` reenabled for Android builds.
9331*   Restrict weights rank to be the same as the broadcast target, to avoid
9332    ambiguity on broadcast rules.
9333*   Upgraded libxsmm to 1.7.1 and applied other changes for performance and
9334    memory usage.
9335*   Fixed bfloat16 integration of LIBXSMM sparse mat-mul.
9336*   Improved performance and reduce memory usage by allowing ops to forward
9337    input buffers to output buffers and perform computations in-place.
9338*   Improved the performance of CPU assignment for strings.
9339*   Speed up matrix * vector multiplication and matrix * matrix with unknown
9340    shapes.
9341*   C API: Graph imports now support input remapping, control dependencies, and
9342    returning imported nodes (see `TF_GraphImportGraphDefWithReturnOutputs()`)
9343*   Multiple C++ API updates.
9344*   Multiple TensorBoard updates including:
9345    *   Users can now view image summaries at various sampled steps (instead of
9346        just the last step).
9347    *   Bugs involving switching runs as well as the image dashboard are fixed.
9348    *   Removed data download links from TensorBoard.
9349    *   TensorBoard uses a relative data directory, for easier embedding.
9350    *   TensorBoard automatically ignores outliers for domain calculation, and
9351        formats proportional values consistently.
9352*   Multiple tfdbg bug fixes:
9353    *   Fixed Windows compatibility issues.
9354    *   Command history now persists across runs.
9355    *   Bug fix in graph validation related to `tf.while_loops`.
9356*   Java Maven fixes for bugs with Windows installation.
9357*   Backport fixes and improvements from external keras.
9358*   Keras config file handling fix.
9359
9360## Thanks to our Contributors
9361
9362This release contains contributions from many people at Google, as well as:
9363
9364A. Besir Kurtulmus, Adal Chiriliuc, @akash, Alec-Desouza, Alex Rothberg, Alex
9365Sergeev, Alexander Heinecke, Allen Guo, Andreas Madsen, Ankesh Anand, Anton
9366Loss, @Aravind, @Arie, Ashutosh Das, AuréLien Geron, Bairen Yi, @bakunyo, Ben
9367Visser, Brady Zhou, Calpa Liu, Changming Sun, Chih Cheng Liang, Christopher
9368Berner, Clark Zinzow, @Conchylicultor, Dan Ellis, Dan J, Dan Jarvis, Daniel
9369Ylitalo, Darren Garvey, David Norman, David Truong, @DavidNorman, Dimitar
9370Pavlov, Dmitry Persiyanov, @Eddie, @elirex, Erfan Noury, Eron Wright, Evgeny
9371Mazovetskiy, Fabrizio (Misto) Milo, @fanlu, Fisher Coder, Florian Courtial,
9372Franck Dernoncourt, Gagan Goel, Gao, Xiang, @Gautam, Gefu Tang, @guilherme,
9373@guschmue, Hannah Provenza, Hans Pabst, @hartb, Hsiao Yi, Huazuo Gao, Igor
9374ChorążEwicz, Ivan Smirnov, Jakub Kolodziejczyk, Jason Gavris, Jason Morton, Jay
9375Young, Jayaram Bobba, Jeremy Sawruk, Jiaming Liu, Jihun Choi, @jiqiu, Joan
9376Thibault, John C F, Jojy George Varghese, Jon Malmaud, Julian Berman, Julian
9377Niedermeier, Junpeng Lao, Kai Sasaki, @Kankroc, Karl Lessard, Kyle Bostelmann,
9378@Lezcano, Li Yi, Luo Yun, @lurker, Mahmoud-Abuzaina, Mandeep Singh, Marek
9379Kolodziej, Mark Szepieniec, Martial Hue, Medhat Omr, Memo Akten, Michael Gharbi,
9380MichaëL Defferrard, Milan Straka, @MircoT, @mlucool, Muammar Ibn Faisal, Nayana
9381Thorat, @nghiattran, Nicholas Connor, Nikolaas Steenbergen, Niraj Patel,
9382Niranjan Hasabnis, @Panmari, Pavel Bulanov, Philip Pries Henningsen, Philipp
9383Jund, @polonez, Prayag Verma, Rahul Kavi, Raphael Gontijo Lopes, @rasbt, Raven
9384Iqqe, Reid Pryzant, Richard Shin, Rizwan Asif, Russell Kaplan, Ryo Asakura,
9385RüDiger Busche, Saisai Shao, Sam Abrahams, @sanosay, Sean Papay, @seaotterman,
9386@selay01, Shaurya Sharma, Sriram Narayanamoorthy, Stefano Probst, @taknevski,
9387@tbonza, @teldridge11, Tim Anglade, Tomas Reimers, Tomer Gafner, Valentin
9388Iovene, Vamsi Sripathi, Viktor Malyi, Vit Stepanovs, Vivek Rane, Vlad Firoiu,
9389@wangg12, @will, Xiaoyu Tao, Yaroslav Bulatov, Yi Liu, Yuan (Terry) Tang,
9390@Yufeng, Yuming Wang, Yuxin Wu, Zafar Takhirov, Ziming Dong
9391
9392We are also grateful to all who filed issues or helped resolve them, asked and
9393answered questions, and were part of inspiring discussions.
9394
9395# Release 1.0.1
9396
9397## Bug Fixes and Other Changes
9398
9399*   Change GraphConstructor to not increase the version when importing, but
9400    instead take the min of all versions.
9401*   Google Cloud Storage fixes.
9402*   Removed `tf.core` and `tf.python` modules from the API. These were never
9403    intended to be exposed. Please use the same objects through top-level `tf`
9404    module instead.
9405
9406# Release 1.0.0
9407
9408## Major Features and Improvements
9409
9410*   XLA (experimental): initial release of
9411    [XLA](https://www.tensorflow.org/versions/master/experimental/xla/), a
9412    domain-specific compiler for TensorFlow graphs, that targets CPUs and GPUs.
9413*   TensorFlow Debugger (tfdbg): command-line interface and API.
9414*   New python 3 docker images added.
9415*   Made pip packages pypi compliant. TensorFlow can now be installed by `pip
9416    install tensorflow` command.
9417*   Several python API calls have been changed to resemble NumPy more closely.
9418*   Android: person detection + tracking demo implementing Scalable Object
9419    Detection using Deep Neural Networks.
9420*   New (experimental)
9421    [Java API](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/java).
9422*   Add new Android image stylization demo based on "A Learned Representation
9423    For Artistic Style", and add YOLO object detector support.
9424
9425## Breaking Changes to the API
9426
9427To help you upgrade your existing TensorFlow Python code to match the API
9428changes below, we have prepared a
9429[conversion script](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/compatibility).
9430* TensorFlow/models have been moved to a separate github repository. * Division
9431and modulus operators (/, //, %) now match Python (flooring) semantics. This
9432applies to `tf.div` and `tf.mod` as well. To obtain forced integer truncation
9433based behaviors you can use `tf.truncatediv` and `tf.truncatemod`. *
9434`tf.divide()` is now the recommended division function. `tf.div()` will remain,
9435but its semantics do not respond to Python 3 or `from future` mechanisms. *
9436tf.reverse() now takes indices of axes to be reversed. E.g. `tf.reverse(a,
9437[True, False, True])` must now be written as `tf.reverse(a, [0, 2])`.
9438`tf.reverse_v2()` will remain until 1.0 final. * `tf.mul`, `tf.sub` and `tf.neg`
9439are deprecated in favor of `tf.multiply`, `tf.subtract` and `tf.negative`. *
9440`tf.pack` and `tf.unpack` are deprecated in favor of `tf.stack` and
9441`tf.unstack`. * `TensorArray.pack` and `TensorArray.unpack` are getting
9442deprecated in favor of `TensorArray.stack` and `TensorArray.unstack`. * The
9443following Python functions have had their arguments changed to use `axis` when
9444referring to specific dimensions. We have kept the old keyword arguments for
9445compatibility currently, but we will be removing them well before the final 1.0.
9446* `tf.argmax`: `dimension` becomes `axis` * `tf.argmin`: `dimension` becomes
9447`axis` * `tf.count_nonzero`: `reduction_indices` becomes `axis` *
9448`tf.expand_dims`: `dim` becomes `axis` * `tf.reduce_all`: `reduction_indices`
9449becomes `axis` * `tf.reduce_any`: `reduction_indices` becomes `axis` *
9450`tf.reduce_join`: `reduction_indices` becomes `axis` * `tf.reduce_logsumexp`:
9451`reduction_indices` becomes `axis` * `tf.reduce_max`: `reduction_indices`
9452becomes `axis` * `tf.reduce_mean`: `reduction_indices` becomes `axis` *
9453`tf.reduce_min`: `reduction_indices` becomes `axis` * `tf.reduce_prod`:
9454`reduction_indices` becomes `axis` * `tf.reduce_sum`: `reduction_indices`
9455becomes `axis` * `tf.reverse_sequence`: `batch_dim` becomes `batch_axis`,
9456`seq_dim` becomes `seq_axis` * `tf.sparse_concat`: `concat_dim` becomes `axis` *
9457`tf.sparse_reduce_sum`: `reduction_axes` becomes `axis` *
9458`tf.sparse_reduce_sum_sparse`: `reduction_axes` becomes `axis` *
9459`tf.sparse_split`: `split_dim` becomes `axis` * `tf.listdiff` has been renamed
9460to `tf.setdiff1d` to match NumPy naming. * `tf.inv` has been renamed to be
9461`tf.reciprocal` (component-wise reciprocal) to avoid confusion with `np.inv`
9462which is matrix inversion * tf.round now uses banker's rounding (round to even)
9463semantics to match NumPy. * `tf.split` now takes arguments in a reversed order
9464and with different keywords. In particular, we now match NumPy order as
9465`tf.split(value, num_or_size_splits, axis)`. * `tf.sparse_split` now takes
9466arguments in reversed order and with different keywords. In particular we now
9467match NumPy order as `tf.sparse_split(sp_input, num_split, axis)`. NOTE: we have
9468temporarily made `tf.sparse_split` require keyword arguments. * `tf.concat` now
9469takes arguments in reversed order and with different keywords. In particular we
9470now match NumPy order as `tf.concat(values, axis, name)`. *
9471`tf.image.decode_jpeg` by default uses the faster DCT method, sacrificing a
9472little fidelity for improved speed. One can revert to the old behavior by
9473specifying the attribute `dct_method='INTEGER_ACCURATE'`. * `tf.complex_abs` has
9474been removed from the Python interface. `tf.abs` supports complex tensors and
9475should be used instead. * In the C++ API (in tensorflow/cc), Input, Output, etc.
9476have moved from the tensorflow::ops namespace to tensorflow. *
9477Template.`var_scope` property renamed to `.variable_scope` *
9478SyncReplicasOptimizer is removed and SyncReplicasOptimizerV2 renamed to
9479SyncReplicasOptimizer. * `tf.zeros_initializer()` and `tf.ones_initializer()`
9480now return a callable that must be called with initializer arguments, in your
9481code replace `tf.zeros_initializer` with `tf.zeros_initializer()`. *
9482`SparseTensor.shape` has been renamed to `SparseTensor.dense_shape`. Same for
9483`SparseTensorValue.shape`. * Replace tf.scalar_summary, tf.histogram_summary,
9484tf.audio_summary, tf.image_summary with tf.summary.scalar, tf.summary.histogram,
9485tf.summary.audio, tf.summary.image, respectively. The new summary ops take name
9486rather than tag as their first argument, meaning summary ops now respect
9487TensorFlow name scopes. * Replace tf.train.SummaryWriter and
9488tf.train.SummaryWriterCache with tf.summary.FileWriter and
9489tf.summary.FileWriterCache. * Removes RegisterShape from public API. Use C++
9490shape function registration instead. * Deprecated `_ref` dtypes from the python
9491API. * In the C++ API (in tensorflow/cc), Input, Output, etc. have moved from
9492the tensorflow::ops namespace to tensorflow. * Change arg order for
9493`{softmax,sparse_softmax,sigmoid}_cross_entropy_with_logits` to be (labels,
9494predictions), and force use of named args. * tf.nn.rnn_cell.* and most functions
9495in tf.nn.rnn.* (with the exception of dynamic_rnn and raw_rnn) are temporarily
9496in tf.contrib.rnn. They will be moved back into core for TF 1.2. *
9497`tf.nn.sampled_softmax_loss` and `tf.nn.nce_loss` have both changed their API
9498such that you need to switch the `inputs, labels` to `labels, inputs`
9499parameters. * The shape keyword argument of the `SparseTensor` constructor
9500changes its name to `dense_shape` between Tensorflow 0.12 and Tensorflow 1.0.
9501
9502## Bug Fixes and Other Changes
9503
9504*   Numerous C++ API updates.
9505*   New op: `parallel_stack`.
9506*   Introducing common tf io compression options constants for
9507    RecordReader/RecordWriter.
9508*   Add `sparse_column_with_vocabulary_file`, to specify a feature column that
9509    transform string features to IDs, where the mapping is defined by a
9510    vocabulary file.
9511*   Added `index_to_string_table` which returns a lookup table that maps indices
9512    to strings.
9513*   Add `string_to_index_table`, which returns a lookup table that matches
9514    strings to indices.
9515*   Add a `ParallelForWithWorkerId` function.
9516*   Add `string_to_index_table`, which returns a lookup table that matches
9517    strings to indices.
9518*   Support restore session from checkpoint files in v2 in
9519    `contrib/session_bundle`.
9520*   Added a tf.contrib.image.rotate function for arbitrary angles.
9521*   Added `tf.contrib.framework.filter_variables` as a convenience function to
9522    filter lists of variables based on regular expressions.
9523*   `make_template()` takes an optional `custom_getter_ param`.
9524*   Added comment about how existing directories are handled by
9525    `recursive_create_dir`.
9526*   Added an op for QR factorizations.
9527*   Divides and mods in Python API now use flooring (Python) semantics.
9528*   Android: pre-built libs are now built nightly.
9529*   Android: cmake/gradle build for TensorFlow Inference library under
9530    `contrib/android/cmake`
9531*   Android: Much more robust Session initialization code.
9532*   Android: TF stats now exposed directly in demo and log when debug mode is
9533    active
9534*   Android: new/better README.md documentation
9535*   saved_model is available as `tf.saved_model`.
9536*   Empty op is now stateful.
9537*   Improve speed of scatter_update on the cpu for ASSIGN operations.
9538*   Change `reduce_join` to treat `reduction_indices` in the same way as other
9539    `reduce_` ops.
9540*   Move `TensorForestEstimator` to `contrib/tensor_forest`.
9541*   Enable compiler optimizations by default and allow configuration in
9542    configure.
9543*   `tf.divide` now honors the name field.
9544*   Make metrics weight broadcasting more strict.
9545*   Add new queue-like `StagingArea` and new ops: `stage` and `unstage`.
9546*   Enable inplace update ops for strings on CPU. Speed up string concat.
9547
9548## Thanks to our Contributors
9549
9550This release contains contributions from many people at Google, as well as:
9551
9552Aaron Hu, Abhishek Aggarwal, Adam Michael, Adriano Carmezim, @AfirSraftGarrier,
9553Alexander Novikov, Alexander Rosenberg Johansen, Andrew Gibiansky, Andrew Hundt,
9554Anish Shah, Anton Loss, @b0noI, @BoyuanJiang, Carl Thomé, Chad Kennedy, Comic
9555Chang, Connor Braa, Daniel N. Lang, Daniel Trebbien, @danielgordon10, Darcy Liu,
9556Darren Garvey, Dmitri Lapin, Eron Wright, Evan Cofer, Fabrizio Milo, Finbarr
9557Timbers, Franck Dernoncourt, Garrett Smith, @guschmue, Hao Wei, Henrik Holst,
9558Huazuo Gao, @Ian, @Issac, Jacob Israel, Jangsoo Park, Jin Kim, Jingtian Peng,
9559John Pope, Kye Bostelmann, Liangliang He, Ling Zhang, Luheng He, Luke Iwanski,
9560@lvli, Michael Basilyan, Mihir Patel, Mikalai Drabovich, Morten Just, @newge,
9561Nick Butlin, Nishant Shukla, Pengfei Ni, Przemyslaw Tredak, @rasbt, @Ronny,
9562Rudolf Rosa, @RustingSword, Sam Abrahams, Sam Putnam, @SeongAhJo, Shi Jiaxin,
9563@skavulya, Steffen MüLler, @TheUSER123, @tiriplicamihai, @vhasanov, Victor
9564Costan, Vit Stepanovs, Wangda Tan, Wenjian Huang, Xingdong Zuo, Yaroslav
9565Bulatov, Yota Toyama, Yuan (Terry) Tang, Yuxin Wu
9566
9567We are also grateful to all who filed issues or helped resolve them, asked and
9568answered questions, and were part of inspiring discussions.
9569
9570# Release 0.12.0
9571
9572## Major Features and Improvements
9573
9574*   TensorFlow now builds and runs on Microsoft Windows (tested on Windows 10,
9575    Windows 7, and Windows Server 2016). Supported languages include Python (via
9576    a pip package) and C++. CUDA 8.0 and cuDNN 5.1 are supported for GPU
9577    acceleration. Known limitations include: It is not currently possible to
9578    load a custom op library. The GCS and HDFS file systems are not currently
9579    supported. The following ops are not currently implemented: Dequantize,
9580    QuantizeAndDequantize, QuantizedAvgPool,
9581    QuantizedBatchNomWithGlobalNormalization, QuantizedBiasAdd, QuantizedConcat,
9582    QuantizedConv2D, QuantizedMatmul, QuantizedMaxPool,
9583    QuantizeDownAndShrinkRange, QuantizedRelu, QuantizedRelu6, QuantizedReshape,
9584    QuantizeV2, RequantizationRange, and Requantize.
9585*   Go: Experimental API in Go to create and execute graphs
9586    (https://godoc.org/github.com/tensorflow/tensorflow/tensorflow/go)
9587*   New checkpoint format becomes the default in `tf.train.Saver`. Old V1
9588    checkpoints continue to be readable; controlled by the `write_version`
9589    argument, `tf.train.Saver` now by default writes out in the new V2 format.
9590    It significantly reduces the peak memory required and latency incurred
9591    during restore.
9592*   Added a new library for library of matrix-free (iterative) solvers for
9593    linear equations, linear least-squares, eigenvalues and singular values in
9594    tensorflow/contrib/solvers. Initial version has lanczos bidiagonalization,
9595    conjugate gradients and CGLS.
9596*   Added gradients for `matrix_solve_ls` and `self_adjoint_eig`.
9597*   Large cleanup to add second order gradient for ops with C++ gradients and
9598    improve existing gradients such that most ops can now be differentiated
9599    multiple times.
9600*   Added a solver for ordinary differential equations,
9601    `tf.contrib.integrate.odeint`.
9602*   New contrib module for tensors with named axes, `tf.contrib.labeled_tensor`.
9603*   Visualization of embeddings in TensorBoard.
9604
9605## Breaking Changes to the API
9606
9607*   `BusAdjacency` enum replaced with a protocol buffer `DeviceLocality`. PCI
9608    bus indexing now starts from 1 instead of 0, and `bus_id==0` is used where
9609    previously `BUS_ANY` was used.
9610*   `Env::FileExists` and `FileSystem::FileExists` now return a
9611    tensorflow::Status instead of a bool. Any callers to this function can be
9612    converted to a bool by adding .ok() to the call.
9613*   The C API type `TF_SessionWithGraph` has been renamed to `TF_Session`,
9614    indicating its preferred use in language bindings for TensorFlow. What was
9615    previously `TF_Session` has been renamed to `TF_DeprecatedSession`.
9616*   Renamed `TF_Port` to `TF_Output` in the C API.
9617*   Removes RegisterShape from public API. Use C++ shape function registration
9618    instead. indexing now starts from 1 instead of 0, and `bus_id==0` is used
9619    where previously `BUS_ANY` was used.
9620*   Most RNN cells and RNN functions now use different variable scopes to be
9621    consistent with layers (`tf.contrib.layers`). This means old checkpoints
9622    written using this code will not load after this change without providing
9623    `Saver` a list of variable renames. Examples of variable scope changes
9624    include `RNN` -> `rnn` in `tf.nn.rnn`, `tf.nn.dynamic_rnn` and moving from
9625    `Linear/Matrix` -> `weights` and `Linear/Bias` -> `biases` in most RNN
9626    cells.
9627*   Deprecated tf.select op. tf.where should be used instead.
9628*   `SparseTensor.shape` has been renamed to `SparseTensor.dense_shape`. Same
9629    for `SparseTensorValue.shape`.
9630*   `Env::FileExists` and `FileSystem::FileExists` now return a
9631    `tensorflow::Status` instead of a bool. Any callers to this function can be
9632    converted to a bool by adding `.ok()` to the call.
9633*   C API: Type `TF_SessionWithGraph` has been renamed to `TF_Session`,
9634    indicating its preferred use in language bindings for TensorFlow. What was
9635    previously `TF_Session` has been renamed to `TF_DeprecatedSession`.
9636*   C API: Renamed `TF_Port` to `TF_Output`.
9637*   C API: The caller retains ownership of `TF_Tensor` objects provided to
9638    `TF_Run`, `TF_SessionRun`, `TF_SetAttrTensor` etc.
9639*   Renamed `tf.image.per_image_whitening()` to
9640    `tf.image.per_image_standardization()`
9641*   Move Summary protobuf constructors to `tf.summary` submodule.
9642*   Deprecate `histogram_summary`, `audio_summary`, `scalar_summary`,
9643    `image_summary`, `merge_summary`, and `merge_all_summaries`.
9644*   Combined `batch_*` and regular version of linear algebra and FFT ops. The
9645    regular op now handles batches as well. All `batch_*` Python interfaces were
9646    removed.
9647*   `tf.all_variables`, `tf.VARIABLES` and `tf.initialize_all_variables` renamed
9648    to `tf.global_variables`, `tf.GLOBAL_VARIABLES` and
9649    `tf.global_variables_initializer` respectively.
9650*   `tf.zeros_initializer()` and `tf.ones_initializer()` now return a callable
9651    that must be called with initializer arguments, in your code replace
9652    `tf.zeros_initializer` with `tf.zeros_initializer()`
9653
9654## Bug Fixes and Other Changes
9655
9656*   Use threadsafe version of `lgamma` function.
9657*   Fix `tf.sqrt` handling of negative arguments.
9658*   Fixed bug causing incorrect number of threads to be used for multi-threaded
9659    benchmarks.
9660*   Performance optimizations for `batch_matmul` on multi-core CPUs.
9661*   Improve trace, `matrix_set_diag`, `matrix_diag_part` and their gradients to
9662    work for rectangular matrices.
9663*   Support for SVD of complex valued matrices.
9664
9665## Thanks to our Contributors
9666
9667This release contains contributions from many people at Google, as well as:
9668
9669@a7744hsc, Abhi Agg, @admcrae, Adriano Carmezim, Aki Sukegawa, Alex Kendall,
9670Alexander Rosenberg Johansen, @amcrae, Amlan Kar, Andre Simpelo, Andreas Eberle,
9671Andrew Hundt, Arnaud Lenglet, @b0noI, Balachander Ramachandran, Ben Barsdell,
9672Ben Guidarelli, Benjamin Mularczyk, Burness Duan, @c0g, Changming Sun, @chanis,
9673Corey Wharton, Dan J, Daniel Trebbien, Darren Garvey, David Brailovsky, David
9674Jones, Di Zeng, @DjangoPeng, Dr. Kashif Rasul, @drag0, Fabrizio (Misto) Milo,
9675FabríCio Ceschin, @fp, @Ghedeon, @guschmue, Gökçen Eraslan, Haosdent Huang,
9676Haroen Viaene, Harold Cooper, Henrik Holst, @hoangmit, Ivan Ukhov, Javier
9677Dehesa, Jingtian Peng, Jithin Odattu, Joan Pastor, Johan Mathe, Johannes Mayer,
9678Jongwook Choi, Justus Schwabedal, Kai Wolf, Kamil Hryniewicz, Kamran Amini,
9679Karen Brems, Karl Lattimer, @kborer, Ken Shirriff, Kevin Rose, Larissa Laich,
9680Laurent Mazare, Leonard Lee, Liang-Chi Hsieh, Liangliang He, Luke Iwanski, Marek
9681Kolodziej, Moustafa Alzantot, @MrQianjinsi, @nagachika, Neil Han, Nick Meehan,
9682Niels Ole Salscheider, Nikhil Mishra, @nschuc, Ondrej Skopek, OndřEj Filip,
9683@OscarDPan, Pablo Moyano, Przemyslaw Tredak, @qitaishui, @Quarazy, @raix852,
9684Philipp Helo, Sam Abrahams, @SriramRamesh, Till Hoffmann, Tushar Soni, @tvn,
9685@tyfkda, Uwe Schmidt, Victor Villas, Vit Stepanovs, Vladislav Gubarev,
9686@wujingyue, Xuesong Yang, Yi Liu, Yilei Yang, @youyou3, Yuan (Terry) Tang,
9687Yuming Wang, Zafar Takhirov, @zhongyuk, Ziming Dong, @guotong1988
9688
9689We are also grateful to all who filed issues or helped resolve them, asked and
9690answered questions, and were part of inspiring discussions.
9691
9692# Release 0.11.0
9693
9694## Major Features and Improvements
9695
9696*   CUDA 8 support.
9697*   cuDNN 5 support.
9698*   HDFS Support.
9699*   Adds Fused LSTM support via cuDNN 5 in `tensorflow/contrib/cudnn_rnn`.
9700*   Improved support for NumPy style basic slicing including non-1 strides,
9701    ellipses, newaxis, and negative indices. For example complicated expressions
9702    like `foo[1, 2:4, tf.newaxis, ..., :-3:-1, :]` are now supported. In
9703    addition we have preliminary (non-broadcasting) support for sliced
9704    assignment to variables. In particular one can write
9705    `var[1:3].assign([1,11,111])`.
9706*   Deprecated `tf.op_scope` and `tf.variable_op_scope` in favor of a unified
9707    `tf.name_scope` and `tf.variable_scope`. The new argument order of
9708    `tf.variable_scope` is incompatible with previous versions.
9709*   Introducing `core/util/tensor_bundle` module: a module to efficiently
9710    serialize/deserialize tensors to disk. Will be used in TF's new checkpoint
9711    format.
9712*   Added tf.svd for computing the singular value decomposition (SVD) of dense
9713    matrices or batches of matrices (CPU only).
9714*   Added gradients for eigenvalues and eigenvectors computed using
9715    `self_adjoint_eig` or `self_adjoint_eigvals`.
9716*   Eliminated `batch_*` methods for most linear algebra and FFT ops and
9717    promoted the non-batch version of the ops to handle batches of matrices.
9718*   Tracing/timeline support for distributed runtime (no GPU profiler yet).
9719*   C API gives access to inferred shapes with `TF_GraphGetTensorNumDims` and
9720    `TF_GraphGetTensorShape`.
9721*   Shape functions for core ops have moved to C++ via
9722    `REGISTER_OP(...).SetShapeFn(...)`. Python shape inference RegisterShape
9723    calls use the C++ shape functions with `common_shapes.call_cpp_shape_fn`. A
9724    future release will remove `RegisterShape` from python.
9725
9726## Bug Fixes and Other Changes
9727
9728*   Documentation now includes operator overloads on Tensor and Variable.
9729*   `tensorflow.__git_version__` now allows users to identify the version of the
9730    code that TensorFlow was compiled with. We also have
9731    `tensorflow.__git_compiler__` which identifies the compiler used to compile
9732    TensorFlow's core.
9733*   Improved multi-threaded performance of `batch_matmul`.
9734*   LSTMCell, BasicLSTMCell, and MultiRNNCell constructors now default to
9735    `state_is_tuple=True`. For a quick fix while transitioning to the new
9736    default, simply pass the argument `state_is_tuple=False`.
9737*   DeviceFactory's AddDevices and CreateDevices functions now return a Status
9738    instead of void.
9739*   Int32 elements of list(type) arguments are no longer placed in host memory
9740    by default. If necessary, a list(type) argument to a kernel can be placed in
9741    host memory using a HostMemory annotation.
9742*   `uniform_unit_scaling_initializer()` no longer takes a `full_shape` arg,
9743    instead relying on the partition info passed to the initializer function
9744    when it's called.
9745*   The NodeDef protocol message is now defined in its own file `node_def.proto`
9746    `instead of graph.proto`.
9747*   `ops.NoGradient` was renamed `ops.NotDifferentiable`. `ops.NoGradient` will
9748    be removed soon.
9749*   `dot.h` / DotGraph was removed (it was an early analysis tool prior to
9750    TensorBoard, no longer that useful). It remains in history should someone
9751    find the code useful.
9752*   re2 / regexp.h was removed from being a public interface of TF. Should users
9753    need regular expressions, they should depend on the RE2 library directly
9754    rather than via TensorFlow.
9755
9756## Thanks to our Contributors
9757
9758This release contains contributions from many people at Google, as well as:
9759
9760Abid K, @afshinrahimi, @AidanGG, Ajay Rao, Aki Sukegawa, Alex Rothberg,
9761Alexander Rosenberg Johansen, Andrew Gibiansky, Andrew Thomas, @Appleholic,
9762Bastiaan Quast, Ben Dilday, Bofu Chen, Brandon Amos, Bryon Gloden, Cissp®,
9763@chanis, Chenyang Liu, Corey Wharton, Daeyun Shin, Daniel Julius Lasiman, Daniel
9764Waterworth, Danijar Hafner, Darren Garvey, Denis Gorbachev, @DjangoPeng,
9765Egor-Krivov, Elia Palme, Eric Platon, Fabrizio Milo, Gaetan Semet, Georg
9766Nebehay, Gu Wang, Gustav Larsson, @haosdent, Harold Cooper, Hw-Zz, @ichuang,
9767Igor Babuschkin, Igor Macedo Quintanilha, Ilya Edrenkin, @ironhead, Jakub
9768Kolodziejczyk, Jennifer Guo, Jihun Choi, Jonas Rauber, Josh Bleecher Snyder,
9769@jpangburn, Jules Gagnon-Marchand, Karen Brems, @kborer, Kirill Bobyrev, Laurent
9770Mazare, Longqi Yang, Malith Yapa, Maniteja Nandana, Martin Englund, Matthias
9771Winkelmann, @mecab, Mu-Ik Jeon, Nand Dalal, Niels Ole Salscheider, Nikhil
9772Mishra, Park Jiin, Pieter De Rijk, @raix852, Ritwik Gupta, Sahil Sharma,
9773Sangheum Hwang, @SergejsRk, Shinichiro Hamaji, Simon Denel, @Steve,
9774@suiyuan2009, Tiago Jorge, Tijmen Tieleman, @tvn, @tyfkda, Wang Yang, Wei-Ting
9775Kuo, Wenjian Huang, Yan Chen, @YenChenLin, Yuan (Terry) Tang, Yuncheng Li,
9776Yunfeng Wang, Zack Polizzi, @zhongzyd, Ziming Dong, @perhapszzy
9777
9778We are also grateful to all who filed issues or helped resolve them, asked and
9779answered questions, and were part of inspiring discussions.
9780
9781# Release 0.10.0
9782
9783## Major Features and Improvements
9784
9785*   Added support for C++ shape inference
9786*   Added graph-construction C API
9787*   Major revision to the graph-construction C++ API
9788*   Support makefile build for iOS
9789*   Added Mac GPU support
9790*   Full version of TF-Slim available as `tf.contrib.slim`
9791*   Added k-Means clustering and WALS matrix factorization
9792
9793## Bug Fixes and Other Changes
9794
9795*   Allow gradient computation for scalar values.
9796*   Performance improvements for gRPC
9797*   Improved support for fp16
9798*   New high-level ops in tf.contrib. {layers,metrics}
9799*   New features for TensorBoard, such as shape display, exponential smoothing
9800*   Faster and more stable Google Cloud Storage (GCS) filesystem support
9801*   Support for zlib compression and decompression for TFRecordReader and
9802    TFRecordWriter
9803*   Support for reading (animated) GIFs
9804*   Improved support for SparseTensor
9805*   Added support for more probability distributions (Dirichlet, Beta,
9806    Bernoulli, etc.)
9807*   Added Python interfaces to reset resource containers.
9808*   Many bugfixes and performance improvements
9809*   Many documentation fixes
9810
9811## Thanks to our Contributors
9812
9813This release contains contributions from many people at Google, as well as:
9814
9815Alex Rothberg, Andrew Royer, Austin Marshall, @BlackCoal, Bob Adolf, Brian
9816Diesel, Charles-Emmanuel Dias, @chemelnucfin, Chris Lesniewski, Daeyun Shin,
9817Daniel Rodriguez, Danijar Hafner, Darcy Liu, Kristinn R. Thórisson, Daniel
9818Castro, Dmitry Savintsev, Kashif Rasul, Dylan Paiton, Emmanuel T. Odeke, Ernest
9819Grzybowski, Gavin Sherry, Gideon Dresdner, Gregory King, Harold Cooper,
9820@heinzbeinz, Henry Saputra, Huarong Huo, Huazuo Gao, Igor Babuschkin, Igor
9821Macedo Quintanilha, Ivan Ukhov, James Fysh, Jan Wilken Dörrie, Jihun Choi,
9822Johnny Lim, Jonathan Raiman, Justin Francis, @lilac, Li Yi, Marc Khoury, Marco
9823Marchesi, Max Melnick, Micael Carvalho, @mikowals, Mostafa Gazar, Nico Galoppo,
9824Nishant Agrawal, Petr Janda, Yuncheng Li, @raix852, Robert Rose,
9825@Robin-des-Bois, Rohit Girdhar, Sam Abrahams, satok16, Sergey Kishchenko, Sharkd
9826Tu, @shotat, Siddharth Agrawal, Simon Denel, @sono-bfio, SunYeop Lee, Thijs
9827Vogels, @tobegit3hub, @Undo1, Wang Yang, Wenjian Huang, Yaroslav Bulatov, Yuan
9828Tang, Yunfeng Wang, Ziming Dong
9829
9830We are also grateful to all who filed issues or helped resolve them, asked and
9831answered questions, and were part of inspiring discussions.
9832
9833# Release 0.9.0
9834
9835## Major Features and Improvements
9836
9837*   Python 3.5 support and binaries
9838*   Added iOS support
9839*   Added support for processing on GPUs on MacOS
9840*   Added makefile for better cross-platform build support (C API only)
9841*   fp16 support and improved complex128 support for many ops
9842*   Higher level functionality in contrib. {layers,losses,metrics,learn}
9843*   More features to Tensorboard
9844*   Improved support for string embedding and sparse features
9845*   The RNN api is finally "official" (see, e.g., `tf.nn.dynamic_rnn`,
9846    `tf.nn.rnn`, and the classes in `tf.nn.rnn_cell`).
9847*   TensorBoard now has an Audio Dashboard, with associated audio summaries.
9848
9849## Bug Fixes and Other Changes
9850
9851*   Turned on CuDNN Autotune.
9852*   Added support for using third-party Python optimization algorithms
9853    (contrib.opt).
9854*   Google Cloud Storage filesystem support.
9855*   HDF5 support
9856*   Add support for 3d convolutions and pooling.
9857*   Update gRPC release to 0.14.
9858*   Eigen version upgrade.
9859*   Switch to eigen thread pool
9860*   `tf.nn.moments()` now accepts a `shift` argument. Shifting by a good
9861    estimate of the mean improves numerical stability. Also changes the behavior
9862    of the `shift` argument to `tf.nn.sufficient_statistics()`.
9863*   Performance improvements
9864*   Many bugfixes
9865*   Many documentation fixes
9866*   TensorBoard fixes: graphs with only one data point, Nan values, reload
9867    button and auto-reload, tooltips in scalar charts, run filtering, stable
9868    colors
9869*   Tensorboard graph visualizer now supports run metadata. Clicking on nodes
9870    while viewing a stats for a particular run will show runtime statistics,
9871    such as memory or compute usage. Unused nodes will be faded out.
9872
9873## Thanks to our Contributors
9874
9875This release contains contributions from many people at Google, as well as:
9876
9877Aaron Schumacher, Aidan Dang, Akihiko ITOH, Aki Sukegawa, Arbit Chen, Aziz Alto,
9878Danijar Hafner, Erik Erwitt, Fabrizio Milo, Felix Maximilian Möller, Henry
9879Saputra, Sung Kim, Igor Babuschkin, Jan Zikes, Jeremy Barnes, Jesper Steen
9880Møller, Johannes Mayer, Justin Harris, Kashif Rasul, Kevin Robinson, Loo Rong
9881Jie, Lucas Moura, Łukasz Bieniasz-Krzywiec, Mario Cho, Maxim Grechkin, Michael
9882Heilman, Mostafa Rahmani, Mourad Mourafiq, @ninotoshi, Orion Reblitz-Richardson,
9883Yuncheng Li, @raoqiyu, Robert DiPietro, Sam Abrahams, Sebastian Raschka,
9884Siddharth Agrawal, @snakecharmer1024, Stephen Roller, Sung Kim, SunYeop Lee,
9885Thijs Vogels, Till Hoffmann, Victor Melo, Ville Kallioniemi, Waleed Abdulla,
9886Wenjian Huang, Yaroslav Bulatov, Yeison Rodriguez, Yuan Tang, Yuxin Wu,
9887@zhongzyd, Ziming Dong, Zohar Jackson
9888
9889We are also grateful to all who filed issues or helped resolve them, asked and
9890answered questions, and were part of inspiring discussions.
9891
9892# Release 0.8.0
9893
9894## Major Features and Improvements
9895
9896*   Added a distributed runtime using GRPC
9897*   Move skflow to `contrib/learn`
9898*   Better linear optimizer in `contrib/linear_optimizer`
9899*   Random forest implementation in `contrib/tensor_forest`
9900*   CTC loss and decoders in `contrib/ctc`
9901*   Basic support for `half` data type
9902*   Better support for loading user ops (see examples in `contrib/`)
9903*   Allow use of (non-blocking) Eigen threadpool with
9904    `TENSORFLOW_USE_EIGEN_THREADPOOL` define
9905*   Add an extension mechanism for adding network file system support
9906*   TensorBoard displays metadata stats (running time, memory usage and device
9907    used) and tensor shapes
9908
9909## Bug Fixes and Other Changes
9910
9911*   Utility for inspecting checkpoints
9912*   Basic tracing and timeline support
9913*   Allow building against cuDNN 5 (not incl. RNN/LSTM support)
9914*   Added instructions and binaries for ProtoBuf library with fast serialization
9915    and without 64MB limit
9916*   Added special functions
9917*   `bool`-strictness: Tensors have to be explicitly compared to `None`
9918*   Shape strictness: all fed values must have a shape that is compatible with
9919    the tensor they are replacing
9920*   Exposed `tf.while_loop` (deprecated `control_flow_ops.While`)
9921*   run() now takes RunOptions and RunMetadata, which enable timing stats
9922*   Fixed lots of potential overflow problems in op kernels
9923*   Various performance improvements, especially for RNNs and convolutions
9924*   Many bugfixes
9925*   Nightly builds, tutorial tests, many test improvements
9926*   New examples: transfer learning and deepdream ipython notebook
9927*   Added tutorials, many documentation fixes.
9928
9929## Thanks to our Contributors
9930
9931This release contains contributions from many people at Google, as well as:
9932
9933Abhinav Upadhyay, Aggelos Avgerinos, Alan Wu, Alexander G. de G. Matthews,
9934Aleksandr Yahnev, @amchercashin, Andy Kitchen, Aurelien Geron, Awni Hannun,
9935@BanditCat, Bas Veeling, Cameron Chen, @cg31, Cheng-Lung Sung, Christopher
9936Bonnett, Dan Becker, Dan Van Boxel, Daniel Golden, Danijar Hafner, Danny
9937Goodman, Dave Decker, David Dao, David Kretch, Dongjoon Hyun, Dustin Dorroh,
9938@e-lin, Eurico Doirado, Erik Erwitt, Fabrizio Milo, @gaohuazuo, Iblis Lin, Igor
9939Babuschkin, Isaac Hodes, Isaac Turner, Iván Vallés, J Yegerlehner, Jack Zhang,
9940James Wexler, Jan Zikes, Jay Young, Jeff Hodges, @jmtatsch, Johnny Lim, Jonas
9941Meinertz Hansen, Kanit Wongsuphasawat, Kashif Rasul, Ken Shirriff, Kenneth
9942Mitchner, Kenta Yonekura, Konrad Magnusson, Konstantin Lopuhin, @lahwran,
9943@lekaha, @liyongsea, Lucas Adams, @makseq, Mandeep Singh, @manipopopo, Mark
9944Amery, Memo Akten, Michael Heilman, Michael Peteuil, Nathan Daly, Nicolas
9945Fauchereau, @ninotoshi, Olav Nymoen, @panmari, @papelita1234, Pedro Lopes,
9946Pranav Sailesh Mani, RJ Ryan, Rob Culliton, Robert DiPietro, @ronrest, Sam
9947Abrahams, Sarath Shekkizhar, Scott Graham, Sebastian Raschka, Sung Kim, Surya
9948Bhupatiraju, Syed Ahmed, Till Hoffmann, @timsl, @urimend, @vesnica, Vlad Frolov,
9949Vlad Zagorodniy, Wei-Ting Kuo, Wenjian Huang, William Dmitri Breaden Madden,
9950Wladimir Schmidt, Yuan Tang, Yuwen Yan, Yuxin Wu, Yuya Kusakabe, @zhongzyd,
9951@znah.
9952
9953We are also grateful to all who filed issues or helped resolve them, asked and
9954answered questions, and were part of inspiring discussions.
9955
9956# Release 0.7.1
9957
9958## Bug Fixes and Other Changes
9959
9960*   Added gfile.Open and gfile.Copy, used by input_data.py.
9961*   Fixed Saver bug when MakeDirs tried to create empty directory.
9962*   GPU Pip wheels are built with cuda 7.5 and cudnn-v4, making them required
9963    for the binary releases. Lower versions of cuda/cudnn can be supported by
9964    installing from sources and setting the options during ./configure
9965*   Fix dataset encoding example for Python3 (@danijar)
9966*   Fix PIP installation by not packaging protobuf as part of wheel, require
9967    protobuf 3.0.0b2.
9968*   Fix Mac pip installation of numpy by requiring pip >= 1.10.1.
9969*   Improvements and fixes to Docker image.
9970
9971# Release 0.7.0
9972
9973## Major Features and Improvements
9974
9975*   Allow using any installed Cuda >= 7.0 and cuDNN >= R2, and add support for
9976    cuDNN R4
9977*   Added a `contrib/` directory for unsupported or experimental features,
9978    including higher level `layers` module
9979*   Added an easy way to add and dynamically load user-defined ops
9980*   Built out a good suite of tests, things should break less!
9981*   Added `MetaGraphDef` which makes it easier to save graphs with metadata
9982*   Added assignments for "Deep Learning with TensorFlow" udacity course
9983
9984## Bug Fixes and Other Changes
9985
9986*   Added a versioning framework for `GraphDef`s to ensure compatibility
9987*   Enforced Python 3 compatibility
9988*   Internal changes now show up as sensibly separated commits
9989*   Open-sourced the doc generator
9990*   Un-fork Eigen
9991*   Simplified the `BUILD` files and cleaned up C++ headers
9992*   TensorFlow can now be used as a submodule in another bazel build
9993*   New ops (e.g., `*fft`, `*_matrix_solve`)
9994*   Support for more data types in many ops
9995*   Performance improvements
9996*   Various bugfixes
9997*   Documentation fixes and improvements
9998
9999## Breaking Changes to the API
10000
10001*   `AdjustContrast` kernel deprecated, new kernel `AdjustContrastv2` takes and
10002    outputs float only. `adjust_contrast` now takes all data types.
10003*   `adjust_brightness`'s `delta` argument is now always assumed to be in
10004    `[0,1]` (as is the norm for images in floating point formats), independent
10005    of the data type of the input image.
10006*   The image processing ops do not take `min` and `max` inputs any more,
10007    casting safety is handled by `saturate_cast`, which makes sure over- and
10008    underflows are handled before casting to data types with smaller ranges.
10009*   For C++ API users: `IsLegacyScalar` and `IsLegacyVector` are now gone from
10010    `TensorShapeUtils` since TensorFlow is scalar strict within Google (for
10011    example, the shape argument to `tf.reshape` can't be a scalar anymore). The
10012    open source release was already scalar strict, so outside Google `IsScalar`
10013    and `IsVector` are exact replacements.
10014*   The following files are being removed from `tensorflow/core/public/`:
10015    *   `env.h` -> `../platform/env.h`
10016    *   `status.h` -> `../lib/core/status.h`
10017    *   `tensor.h` -> `../framework/tensor.h`
10018    *   `tensor_shape.h` -> `../framework/tensor_shape.h`
10019    *   `partial_tensor_shape.h` -> `../framework/partial_tensor_shape.h`
10020    *   `tensorflow_server.h` deleted
10021*   For C++ API users: `TensorShape::ShortDebugString` has been renamed to
10022    `DebugString`, and the previous `DebugString` behavior is gone (it was
10023    needlessly verbose and produced a confusing empty string for scalars).
10024*   `GraphOptions.skip_common_subexpression_elimination` has been removed. All
10025    graph optimizer options are now specified via
10026    `GraphOptions.OptimizerOptions`.
10027*   `ASSERT_OK` / `EXPECT_OK` macros conflicted with external projects, so they
10028    were renamed `TF_ASSERT_OK`, `TF_EXPECT_OK`. The existing macros are
10029    currently maintained for short-term compatibility but will be removed.
10030*   The non-public `nn.rnn` and the various `nn.seq2seq` methods now return just
10031    the final state instead of the list of all states.
10032*   `tf.scatter_update` now no longer guarantees that lexicographically largest
10033    index be used for update when duplicate entries exist.
10034*   `tf.image.random_crop(image, [height, width])` is now `tf.random_crop(image,
10035    [height, width, depth])`, and `tf.random_crop` works for any rank (not just
10036    3-D images). The C++ `RandomCrop` op has been replaced with pure Python.
10037*   Renamed `tf.test.GetTempDir` and `tf.test.IsBuiltWithCuda` to
10038    `tf.test.get_temp_dir` and `tf.test.is_built_with_cuda` for PEP-8
10039    compatibility.
10040*   `parse_example`'s interface has changed, the old interface is accessible in
10041    `legacy_parse_example` (same for related functions).
10042*   New `Variable`s are not added to the same collection several times even if a
10043    list with duplicates is passed to the constructor.
10044*   The Python API will now properly set the `list` member of `AttrValue` in
10045    constructed `GraphDef` messages for empty lists. The serialization of some
10046    graphs will change, but the change is both forwards and backwards
10047    compatible. It will break tests that compare a generated `GraphDef` to a
10048    golden serialized `GraphDef` (which is discouraged).
10049
10050## Thanks to our Contributors
10051
10052This release contains contributions from many people at Google, as well as:
10053
10054Akiomi Kamakura, Alex Vig, Alexander Rosenberg Johansen, Andre Cruz, Arun Ahuja,
10055Bart Coppens, Bernardo Pires, Carl Vondrick, Cesar Salgado, Chen Yu, Christian
10056Jauvin, Damien Aymeric, Dan Vanderkam, Denny Britz, Dongjoon Hyun, Eren Güven,
10057Erik Erwitt, Fabrizio Milo, G. Hussain Chinoy, Jim Fleming, Joao Felipe Santos,
10058Jonas Meinertz Hansen, Joshi Rekha, Julian Viereck, Keiji Ariyama, Kenton Lee,
10059Krishna Sankar, Kristina Chodorow, Linchao Zhu, Lukas Krecan, Mark Borgerding,
10060Mark Daoust, Moussa Taifi, Nathan Howell, Naveen Sundar Govindarajulu, Nick
10061Sweeting, Niklas Riekenbrauck, Olivier Grisel, Patrick Christ, Povilas
10062Liubauskas, Rainer Wasserfuhr, Romain Thouvenin, Sagan Bolliger, Sam Abrahams,
10063Taehoon Kim, Timothy J Laurent, Vlad Zavidovych, Yangqing Jia, Yi-Lin Juang,
10064Yuxin Wu, Zachary Lipton, Zero Chen, Alan Wu, @brchiu, @emmjaykay, @jalammar,
10065@Mandar-Shinde, @nsipplswezey, @ninotoshi, @panmari, @prolearner and
10066@rizzomichaelg.
10067
10068We are also grateful to all who filed issues or helped resolve them, asked and
10069answered questions, and were part of inspiring discussions.
10070
10071# Release 0.6.0
10072
10073## Major Features and Improvements
10074
10075*   Python 3.3+ support via changes to python codebase and ability to specify
10076    python version via ./configure.
10077
10078*   Some improvements to GPU performance and memory usage:
10079    [convnet benchmarks](https://github.com/soumith/convnet-benchmarks/issues/66)
10080    roughly equivalent with native cudnn v2 performance. Improvements mostly due
10081    to moving to 32-bit indices, faster shuffling kernels. More improvements to
10082    come in later releases.
10083
10084## Bug Fixes
10085
10086*   Lots of fixes to documentation and tutorials, many contributed by the
10087    public.
10088
10089*   271 closed issues on github issues.
10090
10091## Backwards-Incompatible Changes
10092
10093*   `tf.nn.fixed_unigram_candidate_sampler` changed its default 'distortion'
10094    attribute from 0.0 to 1.0. This was a bug in the original release that is
10095    now fixed.
10096
10097*   added DeterministicRandomTestTool to migration_utils.py. This is useful when
10098    you are migrating from TF 1.x to TF2 and need to make sure your computation
10099    is still happening correctly along the way. See the
10100    [validating correctness migration guide](https://www.tensorflow.org/guide/migrate/validate_correctness)
10101    for more info.
10102
10103# Release 0.5.0
10104
10105Initial release of TensorFlow.
10106