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