NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3785 most downloaded on PyPI
TensorFlow is an open source machine learning framework for everyone.
Last release 12 days ago
22 Sep 2026
Release timing varies
gaps range from 8 days to 7 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
97 releases · first in 2019
This releases introduces several vulnerability fixes:
This releases introduces several vulnerability fixes:
saved_model_cli (CVE-2022-29216)TensorSummaryV2 to crash (CVE-2022-29193)QuantizeAndDequantizeV4Grad (CVE-2022-29192)DeleteSessionTensor (CVE-2022-29194)GetSessionTensor (CVE-2022-29191)StagePeek (CVE-2022-29195)UnsortedSegmentJoin (CVE-2022-29197)LoadAndRemapMatrix (CVE-2022-29199)SparseTensorToCSRSparseMatrix (CVE-2022-29198)LSTMBlockCell (CVE-2022-29200)Conv3DBackpropFilterV2 (CVE-2022-29196)CHECK failure in depthwise ops via overflows (CVE-2021-41197)SparseTensorDenseAdd (CVE-2022-29206)QuantizedConv2D (CVE-2022-29201)SpaceToBatchND (CVE-2022-29203)EditDistance (CVE-2022-29208)Conv3DBackpropFilterV2 (CVE-2022-29204)tf.ragged.constant due to lack of validation (CVE-2022-29202)tf.histogram_fixed_width is called with NaN values (CVE-2022-29211)CHECK-failure based denial of service (CVE-2022-29209)curl to 7.83.1 to handle (CVE-2022-22576, (CVE-2022-27774, (CVE-2022-27775, (CVE-2022-27776, (CVE-2022-27778, (CVE-2022-27779, (CVE-2022-27780, (CVE-2022-27781, (CVE-2022-27782 and (CVE-2022-30115zlib to 1.2.12 after 1.2.11 was pulled due to security issueOne column per quarter.
Fixes a floating point division by 0 when executing convolution operators (CVE-2022-21725)
tf.lite:
tf.raw_ops.Bucketize op on CPU.tf.where op for data types tf.int32/tf.uint32/tf.int8/tf.uint8/tf.int64.tf.random.normal op for output data type tf.float32 on CPU.tf.random.uniform op for output data type tf.float32 on CPU.tf.random.categorical op for output data type tf.int64 on CPU.tensorflow.experimental.tensorrt:
conversion_params is now deprecated inside TrtGraphConverterV2 in favor of direct arguments: max_workspace_size_bytes, precision_mode, minimum_segment_size, maximum_cached_engines, use_calibration and allow_build_at_runtime.save_gpu_specific_engines to the .save() function inside TrtGraphConverterV2. When False, the .save() function won't save any TRT engines that have been built. When True (default), the original behavior is preserved.TrtGraphConverterV2 provides a new API called .summary() which outputs a summary of the inference converted by TF-TRT. It namely shows each TRTEngineOp with their input(s)' and output(s)' shape and dtype. A detailed version of the summary is available which prints additionally all the TensorFlow OPs included in each of the TRTEngineOps.tf.tpu.experimental.embedding:
tf.tpu.experimental.embedding.FeatureConfig now takes an additional argument output_shape which can specify the shape of the output activation for the feature.tf.tpu.experimental.embedding.TPUEmbedding now has the same behavior as tf.tpu.experimental.embedding.serving_embedding_lookup which can take arbitrary rank of dense and sparse tensor. For ragged tensor, though the input tensor remains to be rank 2, the activations now can be rank 2 or above by specifying the output shape in the feature config or via the build method.Add tf.config.experimental.enable_op_determinism, which makes TensorFlow ops run deterministically at the cost of performance. Replaces the TF_DETERMINISTIC_OPS environmental variable, which is now deprecated. The "Bug Fixes and Other Changes" section lists more determinism-related changes.
(Since TF 2.7) Add PluggableDevice support to TensorFlow Profiler.
tf.data:
parallel_batch now becomes default if not disabled by users, which will parallelize copying of batch elements.TensorSliceDataset to identify and handle inputs that are files. This enables creating hermetic SavedModels when using datasets created from files.
parallel_batch now becomes default if not disabled by users, which will parallelize copying of batch elements.TensorSliceDataset to identify and handle inputs that are files. This enables creating hermetic SavedModels when using datasets created from files.tf.lite:
Interpreter::SetNumThreads, in favor of InterpreterBuilder::SetNumThreads.tf.keras:
tf.compat.v1.keras.utils.get_or_create_layer to aid migration to TF2 by enabling tracking of nested keras models created in TF1-style, when used with the tf.compat.v1.keras.utils.track_tf1_style_variables decorator.tf.keras.layers.experimental.preprocessing.HashedCrossing layer which applies the hashing trick to the concatenation of crossed scalar inputs. This provides a stateless way to try adding feature crosses of integer or string data to a model.keras.layers.experimental.preprocessing.CategoryCrossing. Users should migrate to the HashedCrossing layer or use tf.sparse.cross/tf.ragged.cross directly.standardize and split modes to TextVectorization:
standardize="lower" will lowercase inputs.standardize="string_punctuation" will remove all puncuation.split="character" will split on every unicode character.output_mode argument to the Discretization and Hashing layers with the same semantics as other preprocessing layers. All categorical preprocessing layers now support output_mode.tf.keras.mixed_precision.Policy, unless constructed with output_mode="int" in which case output will be tf.int64. The output type of any preprocessing layer can be controlled individually by passing a dtype argument to the layer.tf.random.Generator for keras initializers and all RNG code.tf.random.Generator in keras backend, which will be the new backend for all the RNG in Keras. We plan to switch on the new code path by default in tf 2.8, and the behavior change will likely to cause some breakage on user side (eg if the test is checking against some golden nubmer). These 3 APIs will allow user to disable and switch back to legacy behavior if they prefer. In future (eg TF 2.10), we expect to totally remove the legacy code path (stateful random Ops), and these 3 APIs will be removed as well.tf.keras.callbacks.experimental.BackupAndRestore is now available as tf.keras.callbacks.BackupAndRestore. The experimental endpoint is deprecated and will be removed in a future release.tf.keras.experimental.SidecarEvaluator is now available as tf.keras.utils.SidecarEvaluator. The experimental endpoint is deprecated and will be removed in a future release.Model.train_step() is now customizable via overriding Model.compute_metrics().Model.train_step() is now customizable via overriding Model.compute_loss().jit_compile added to Model.compile() on an opt-in basis to compile the model's training step with XLA. Note that jit_compile=True may not necessarily work for all models.Deterministic Op Functionality:
tf.function(jit_compile=True)'s that use Scatter.tf.data.Datasettf.convert_to_tensor when fed with (sparse) tf.IndexedSlices (because it uses tf.math.unsorted_segment_sum)tf.gather backprop (because tf.convert_to_tensor reduces tf.gather's (sparse) tf.IndexedSlices gradients into its dense params input)tf.math.segment_meantf.math.segment_prodtf.math.segment_sumtf.math.unsorted_segment_meantf.math.unsorted_segment_prodtf.math.unsorted_segment_sumtf.math.unsorted_segment_sqrttf.nn.ctc_loss (resolved, possibly in prior release, and confirmed with tests)tf.nn.sparse_softmax_crossentropy_with_logitstf.scatter_nd and other related scatter functions, such as tf.tensor_scatter_nd_update, on CPU (with significant performance penalty).tf.config.experimental.enable_op_determinism has been called), an attempt to use the specified paths through the following ops on a GPU will cause tf.errors.UnimplementedError (with an understandable message), unless otherwise specified, to be thrown.
FakeQuantWithMinMaxVarsGradient and FakeQuantWithMinMaxVarsPerChannelGradienttf.compat.v1.get_seed if the global random seed has not yet been set (via tf.random.set_seed). Throws RuntimeError from Python or InvalidArgument from C++tf.compat.v1.nn.fused_batch_norm backprop to offset when is_training=Falsetf.image.adjust_contrast forwardtf.image.resize with method=ResizeMethod.NEAREST backproptf.linalg.svdtf.math.bincounttf.nn.depthwise_conv2d backprop to filter when not using cuDNN convolutiontf.nn.dilation2d gradienttf.nn.max_pool_with_argmax gradienttf.raw_ops.DebugNumericSummary and tf.raw_ops.DebugNumericSummaryV2tf.timestamp. Throws FailedPreconditiontf.Variable.scatter_add (and other scatter methods, both on ref and resource variables)tf.random module when the global random seed has not yet been set (via tf.random.set_seed). Throws RuntimeError from Python or InvalidArgument from C++TensorFlow-oneDNN no longer supports explicit use of oneDNN blocked tensor format, e.g., setting the environment variable TF_ENABLE_MKL_NATIVE_FORMAT will not have any effect.
TensorFlow has been validated on Windows Subsystem for Linux 2 (aka WSL 2) for both GPUs and CPUs.
Due to security issues (see section below), all boosted trees code has been deprecated. Users should switch to TensorFlow Decision Forests. TF's boosted trees code will be eliminated before the branch cut for TF 2.9 and will no longer be present since that release.
ReverseSequence (CVE-2022-21728)Dequantize (CVE-2022-21726)Dequantize (CVE-2022-21727)FractionalAvgPoolGrad (CVE-2022-21730)UnravelIndex (CVE-2022-21729)ConcatV2 (CVE-2022-21731)ThreadPoolHandle (CVE-2022-21732)StringNGrams (CVE-2022-21733)AddManySparseToTensorsMap (CVE-2022-23568)CHECK-failures in MapStage (CVE-2022-21734)FractionalMaxPool (CVE-2022-21735)CHECK-fails when building invalid/overflowing tensor shapes (CVE-2022-23569)SparseTensorSliceDataset (CVE-2022-21736)QuantizedMaxPool (CVE-2022-21739)SparseCountSparseOutput (CVE-2022-21738)SparseCountSparseOutput (CVE-2022-21740)BiasAndClamp in TFLite (CVE-2022-23557)tf.sparse.split to crash when axis is a tuple (CVE-2021-41206)CHECK-fail when decoding resource handles from proto (CVE-2022-23564)CHECK-fail with repeated AttrDef (CVE-2022-23565)CHECK-fail when decoding invalid tensors from proto (CVE-2022-23571)SpecializeType (CVE-2022-23574)AssignOp (CVE-2022-23573)OpLevelCostEstimator::CalculateTensorSize (CVE-2022-23575)OpLevelCostEstimator::CalculateOutputSize (CVE-2022-23576)GetInitOp (CVE-2022-23577)CHECK-failures during Grappler's IsSimplifiableReshape (CVE-2022-23581)CHECK-failures during Grappler's SafeToRemoveIdentity (CVE-2022-23579)CHECK-failures in TensorByteSize (CVE-2022-23582)CHECK-failures in binary ops due to type confusion (CVE-2022-23583)DecodePng kernel (CVE-2022-23584)CHECK-fails in function.cc (CVE-2022-23586)CHECK-fails due to attempting to build a reference tensor (CVE-2022-23588)IsConstant (CVE-2022-23589)CHECK failure in constant folding (CVE-2021-41197)GraphDef (CVE-2022-23591)RunForwardTypeInference (CVE-2022-23592)StatusOr (CVE-2022-23590)simplifyBroadcast (MLIR) (CVE-2022-23593)BuildXlaCompilationCache (XLA) (CVE-2022-23595)icu to 69.1 to handle CVE-2020-10531This release contains contributions from many people at Google, as well as:
8bitmp3, Adam Lanicek, ag.ramesh, alesapin, Andrew Goodbody, annasuheyla, Ariel Elkin, Arnab Dutta, Ben Barsdell, bhack, cfRod, Chengji Yao, Christopher Bate, dan, Dan F-M, David Korczynski, DEKHTIARJonathan, dengzhiyuan, Deven Desai, Duncan Riach, Eli Osherovich, Ewout Ter Hoeven, ez2take, Faijul Amin, fo40225, Frederic Bastien, gadagashwini, Gauri1 Deshpande, Georgiy Manuilov, Guilherme De Lázari, Guozhong Zhuang, H1Gdev, homuler, Hongxu Jia, Jacky_Yin, jayfurmanek, jgehw, Jhalak Patel, Jinzhe Zeng, Johan Gunnarsson, Jonathan Dekhtiar, Kaixi Hou, Kanvi Khanna, Kevin Cheng, Koan-Sin Tan, Kruglov-Dmitry, Kun Lu, Lemo, Lequn Chen, long.chen, Louis Sugy, Mahmoud Abuzaina, Mao, Marius Brehler, Mark Harfouche, Martin Patz, Maxiwell S. Garcia, Meenakshi Venkataraman, Michael Melesse, Mrinal Tyagi, Måns Nilsson, Nathan John Sircombe, Nathan Luehr, Nilesh Agarwalla, Oktay Ozturk, Patrice Vignola, Pawel-Polyai, Rama Ketineni, Ramesh Sampath, Reza Rahimi, Rob Suderman, Robert Kalmar, Rohit Santhanam, Sachin Muradi, Saduf2019, Samuel Marks, Shi,Guangyong, Sidong-Wei, Srinivasan Narayanamoorthy, Srishti Srivastava, Steven I Reeves, stevenireeves, Supernovae, Tamas Bela Feher, Tao Xu, Thibaut Goetghebuer-Planchon, Thomas Schmeyer, tilakrayal, Valery Mironov, Victor Guo, Vignesh Kothapalli, Vishnuvardhan Janapati, wamuir, Wang,Quintin, William Muir, William Raveane, Yash Goel, Yimei Sun, Yong Tang, Yuduo Wu
This releases introduces several vulnerability fixes:
Note: This is the last release in the 2.7.x series
This releases introduces several vulnerability fixes:
CHECK failure in tf.reshape caused by overflows (CVE-2022-35934)CHECK failure in SobolSample caused by missing validation (CVE-2022-35935)Gather_nd op in TF Lite (CVE-2022-35937)CHECK failure in TensorListReserve caused by missing validation (CVE-2022-35960)Scatter_nd op in TF Lite (CVE-2022-35939)RaggedRangeOp (CVE-2022-35940)CHECK failure in AvgPoolOp (CVE-2022-35941)CHECK failures in UnbatchGradOp (CVE-2022-35952)CHECK failures in AvgPool3DGrad (CVE-2022-35959)CHECK failures in FractionalAvgPoolGrad (CVE-2022-35963)BlockLSTMGradV2 (CVE-2022-35964)LowerBound and UpperBound (CVE-2022-35965)QuantizedAvgPool (CVE-2022-35966)QuantizedAdd (CVE-2022-35967)CHECK fail in AvgPoolGrad (CVE-2022-35968)CHECK fail in Conv2DBackpropInput (CVE-2022-35969)QuantizedInstanceNorm (CVE-2022-35970)CHECK fail in FakeQuantWithMinMaxVars (CVE-2022-35971)Requantize (CVE-2022-36017)QuantizedBiasAdd (CVE-2022-35972)CHECK fail in FakeQuantWithMinMaxVarsPerChannel (CVE-2022-36019)QuantizedMatMul (CVE-2022-35973)QuantizeDownAndShrinkRange (CVE-2022-35974)QuantizedRelu and QuantizedRelu6 (CVE-2022-35979)CHECK fail in FractionalMaxPoolGrad (CVE-2022-35981)CHECK fail in RaggedTensorToVariant (CVE-2022-36018)CHECK fail in QuantizeAndDequantizeV3 (CVE-2022-36026)SparseBincount (CVE-2022-35982)CHECK fail in Save and SaveSlices (CVE-2022-35983)CHECK fail in ParameterizedTruncatedNormal (CVE-2022-35984)CHECK fail in LRNGrad (CVE-2022-35985)RaggedBincount (CVE-2022-35986)CHECK fail in DenseBincount (CVE-2022-35987)CHECK fail in tf.linalg.matrix_rank (CVE-2022-35988)CHECK fail in MaxPool (CVE-2022-35989)CHECK fail in Conv2DBackpropInput (CVE-2022-35999)CHECK fail in EmptyTensorList (CVE-2022-35998)CHECK fail in tf.sparse.cross (CVE-2022-35997)Conv2D (CVE-2022-35996)CHECK fail in AudioSummaryV2 (CVE-2022-35995)CHECK fail in CollectiveGather (CVE-2022-35994)CHECK fail in SetSize (CVE-2022-35993)CHECK fail in TensorListFromTensor (CVE-2022-35992)CHECK fail in TensorListScatter and TensorListScatterV2 (CVE-2022-35991)CHECK fail in FakeQuantWithMinMaxVarsPerChannelGradient (CVE-2022-35990)CHECK fail in FakeQuantWithMinMaxVarsGradient (CVE-2022-36005)CHECK fail in tf.random.gamma (CVE-2022-36004)CHECK fail in RandomPoissonV2 (CVE-2022-36003)CHECK fail in Unbatch (CVE-2022-36002)CHECK fail in DrawBoundingBoxes (CVE-2022-36001)CHECK fail in Eig (CVE-2022-36000)mlir::tfg::GraphDefImporter::ConvertNodeDef (CVE-2022-36013)mlir::tfg::TFOp::nameAttr (CVE-2022-36014)CHECK-fail in tensorflow::full_type::SubstituteFromAttrs (CVE-2022-36016)Gather_nd op in TF Lite Micro (CVE-2022-35938)Add an upper bound for protobuf in setup.py since protobuf after version 3.20 is currently incompatible with TensorFlow. See https://github.com/tensor
Add 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.
This releases introduces several vulnerability fixes:
This releases introduces several vulnerability fixes:
saved_model_cli (CVE-2022-29216)TensorSummaryV2 to crash (CVE-2022-29193)QuantizeAndDequantizeV4Grad (CVE-2022-29192)DeleteSessionTensor (CVE-2022-29194)GetSessionTensor (CVE-2022-29191)StagePeek (CVE-2022-29195)UnsortedSegmentJoin (CVE-2022-29197)LoadAndRemapMatrix (CVE-2022-29199)SparseTensorToCSRSparseMatrix (CVE-2022-29198)LSTMBlockCell (CVE-2022-29200)Conv3DBackpropFilterV2 (CVE-2022-29196)CHECK failure in depthwise ops via overflows (CVE-2021-41197)SparseTensorDenseAdd (CVE-2022-29206)QuantizedConv2D (CVE-2022-29201)SpaceToBatchND (CVE-2022-29203)EditDistance (CVE-2022-29208)Conv3DBackpropFilterV2 (CVE-2022-29204)tf.ragged.constant due to lack of validation (CVE-2022-29202)tf.histogram_fixed_width is called with NaN values (CVE-2022-29211)CHECK-failure based denial of service (CVE-2022-29209)curl to 7.83.1 to handle (CVE-2022-22576, (CVE-2022-27774, (CVE-2022-27775, (CVE-2022-27776, (CVE-2022-27778, (CVE-2022-27779, (CVE-2022-27780, (CVE-2022-27781, (CVE-2022-27782 and (CVE-2022-30115zlib to 1.2.12 after 1.2.11 was pulled due to security issueThis releases introduces several vulnerability fixes:
This releases introduces several vulnerability fixes:
ReverseSequence (CVE-2022-21728)Dequantize (CVE-2022-21726)Dequantize (CVE-2022-21727)FractionalAvgPoolGrad (CVE-2022-21730)UnravelIndex (CVE-2022-21729)ConcatV2 (CVE-2022-21731)ThreadPoolHandle (CVE-2022-21732)StringNGrams (CVE-2022-21733)AddManySparseToTensorsMap (CVE-2022-23568)CHECK-failures in MapStage (CVE-2022-21734)FractionalMaxPool (CVE-2022-21735)CHECK-fails when building invalid/overflowing tensor shapes (CVE-2022-23569)SparseTensorSliceDataset (CVE-2022-21736)QuantizedMaxPool (CVE-2022-21739)SparseCountSparseOutput (CVE-2022-21738)SparseCountSparseOutput (CVE-2022-21740)BiasAndClamp in TFLite (CVE-2022-23557)tf.sparse.split to crash when axis is a tuple (CVE-2021-41206)CHECK-fail when decoding resource handles from proto (CVE-2022-23564)CHECK-fail with repeated AttrDef (CVE-2022-23565)CHECK-fail when decoding invalid tensors from proto (CVE-2022-23571)SpecializeType (CVE-2022-23574)AssignOp (CVE-2022-23573)OpLevelCostEstimator::CalculateTensorSize (CVE-2022-23575)OpLevelCostEstimator::CalculateOutputSize (CVE-2022-23576)GetInitOp (CVE-2022-23577)CHECK-failures during Grappler's IsSimplifiableReshape (CVE-2022-23581)CHECK-failures during Grappler's SafeToRemoveIdentity (CVE-2022-23579)CHECK-failures in TensorByteSize (CVE-2022-23582)CHECK-failures in binary ops due to type confusion (CVE-2022-23583)DecodePng kernel (CVE-2022-23584)CHECK-fails in function.cc (CVE-2022-23586)CHECK-fails due to attempting to build a reference tensor (CVE-2022-23588)IsConstant (CVE-2022-23589)CHECK failure in constant folding (CVE-2021-41197)GraphDef (CVE-2022-23591)StatusOr (CVE-2022-23590)BuildXlaCompilationCache (XLA) (CVE-2022-23595)icu to 69.1 to handle CVE-2020-10531Fixes a code injection issue in saved_model_cli (CVE-2021-41228)
tf.keras:
Model.fit(), Model.predict(), and Model.evaluate() will no longer uprank input data of shape (batch_size,) to become (batch_size, 1). This enables Model subclasses to process scalar data in their train_step()/test_step()/predict_step() methods.train_step()/test_step()/predict_step() methods, e.g. if x.shape.rank == 1: x = tf.expand_dims(x, axis=-1). Functional models as well as Sequential models built with an explicit input shape are not affected.Model.to_yaml() and keras.models.model_from_yaml have been replaced to raise a RuntimeError as they can be abused to cause arbitrary code execution. It is recommended to use JSON serialization instead of YAML, or, a better alternative, serialize to H5.LinearModel and WideDeepModel are moved to the tf.compat.v1.keras.models. namespace (tf.compat.v1.keras.models.LinearModel and tf.compat.v1.keras.models.WideDeepModel), and their experimental endpoints (tf.keras.experimental.models.LinearModel and tf.keras.experimental.models.WideDeepModel) are being deprecated.tf.keras.initializers classes. For any class constructed with a fixed seed, it will no longer generate same value when invoked multiple times. Instead, it will return different value, but a determinisitic sequence. This change will make the initialize behavior align between v1 and v2.tf.lite:
SignatureDef table in schema to maximize the parity with TF SavedModel's Signature concept.tflite::OpResolver::GetDelegates. The list returned by TfLite's BuiltinOpResolver::GetDelegates is now always empty. Instead, recommend using new method tflite::OpResolver::GetDelegateCreators in order to achieve lazy initialization on TfLite delegate instances.TF Core:
tf.Graph.get_name_scope() now always returns a string, as documented. Previously, when called within name_scope("") or name_scope(None) contexts, it returned None; now it returns the empty string.tensorflow/core/ir/ contains a new MLIR-based Graph dialect that is isomorphic to GraphDef and will be used to replace GraphDef-based (e.g., Grappler) optimizations.attrs() function in shape inference. All attributes should be queried by name now (rather than range returned) to enable changing the underlying storage there.tf.quantize_and_dequantize_v4 (accidentally introduced in TensorFlow 2.4): Use tf.quantization.quantize_and_dequantize_v2 instead.tf.batch_mat_mul_v3 (accidentally introduced in TensorFlow 2.6): Use tf.linalg.matmul instead.tf.sparse_segment_sum_grad (accidentally introduced in TensorFlow 2.6): Use tf.raw_ops.SparseSegmentSumGrad instead. Directly calling this op is typically not necessary, as it is automatically used when computing the gradient of tf.sparse.segment_sum.Modular File System Migration:
tensorflow-io python package should be installed for S3 and HDFS support with tensorflow.Improvements to the TensorFlow debugging experience:
Previously, TensorFlow error stack traces involved many internal frames, which could be challenging to read through, while not being actionable for end users. As of TF 2.7, TensorFlow filters internal frames in most errors that it raises, to keep stack traces short, readable, and focused on what's actionable for end users (their own code).
This behavior can be disabled by calling tf.debugging.disable_traceback_filtering(), and can be re-enabled via tf.debugging.enable_traceback_filtering(). If you are debugging a TensorFlow-internal issue (e.g. to prepare a TensorFlow PR), make sure to disable traceback filtering. You can check whether this feature is currently enabled by calling tf.debugging.is_traceback_filtering_enabled().
Note that this feature is only available with Python 3.7 or higher.
Improve the informativeness of error messages raised by Keras Layer.__call__(), by adding the full list of argument values passed to the layer in every exception.
Introduce the tf.compat.v1.keras.utils.track_tf1_style_variables decorator, which enables using large classes of tf1-style variable_scope, get_variable, and compat.v1.layer-based components from within TF2 models running with TF2 behavior enabled.
tf.data:
tf.data service now supports auto-sharding. Users specify the sharding policy with tf.data.experimental.service.ShardingPolicy enum. It can be one of OFF (equivalent to today's "parallel_epochs" mode), DYNAMIC (equivalent to today's "distributed_epoch" mode), or one of the static sharding policies: FILE, DATA, FILE_OR_DATA, or HINT (corresponding to values of tf.data.experimental.AutoShardPolicy).
Static sharding (auto-sharding) requires the number of tf.data service workers be fixed. Users need to specify the worker addresses in tensorflow.data.experimental.DispatcherConfig.
tf.data.experimental.service.register_dataset now accepts optional compression argument.
Keras:
tf.keras.layers.Conv now includes a public convolution_op method. This method can be used to simplify the implementation of Conv subclasses. There are two primary ways to use this new method. The first is to use the method directly in your own call method: class StandardizedConv2D(tf.keras.layers.Conv2D):
def call(self, inputs):
mean, var = tf.nn.moments(self.kernel, axes=[0, 1, 2], keepdims=True)
return self.convolution_op(inputs, (self.kernel - mean) / tf.sqrt(var + 1e-10))
Alternatively, you can override convolution_op: class StandardizedConv2D(tf.keras.Layer):
def convolution_op(self, inputs, kernel):
mean, var = tf.nn.moments(kernel, axes=[0, 1, 2], keepdims=True)
# Author code uses std + 1e-5
return super().convolution_op(inputs, (kernel - mean) / tf.sqrt(var + 1e-10))
merge_state() method to tf.keras.metrics.Metric for use in distributed computations.sparse and ragged options to tf.keras.layers.TextVectorization to allow for SparseTensor and RaggedTensor outputs from the layer.distribute.experimental.rpc package:
distribute.experimental.rpc package introduces APIs to create a GRPC based server to register tf.function methods and a GRPC client to invoke remote registered methods. RPC APIs are intended for multi-client setups i.e. server and clients are started in separate binaries independently.
Example usage to create server:
server = tf.distribute.experimental.rpc.Server.create("grpc",
"127.0.0.1:1234")
@tf.function(input_signature=[
tf.TensorSpec([], tf.int32),
tf.TensorSpec([], dtypes.int32)
])
def _remote_multiply(a, b):
return tf.math.multiply(a, b)
server.register("multiply", _remote_multiply)
Example usage to create client:
client = tf.distribute.experimental.rpc.Client.create("grpc", address)
a = tf.constant(2, dtype=tf.int32)
b = tf.constant(3, dtype=tf.int32)
result = client.multiply(a, b)
tf.lite:
experimental_from_jax to support conversion from Jax models to TensorFlow Lite.tf.lite.QuantizationDebuggerExtension Types
tf.experimental.ExtensionType as its base, and use type annotations to specify the type for each field. E.g.:class MaskedTensor(tf.experimental.ExtensionType):
values: tf.Tensor
mask: tf.Tensor
The tf.ExtensionType base class works similarly to typing.NamedTuple and @dataclasses.dataclass from the standard Python library.tf.add or tf.concat) when they are applied to ExtensionType values.BatchableExtensionType API can be used to define extension types that support APIs that make use of batching, such as tf.data.Dataset and tf.map_fn.alg to tf.random.stateless_* functions to explicitly select the RNG algorithm.tf.nn.experimental.stateless_dropout, a stateless version of tf.nn.dropout.tf.random.Generator now can be created inside the scope of tf.distribute.experimental.ParameterServerStrategy and tf.distribute.experimental.CentralStorageStrategy.tf.experimental.disable_functional_ops_lowering which disables functional control flow op lowering optimization. This is useful when executing within a portable runtime where control flow op kernels may not be loaded due to selective registration.experimental_is_anonymous to tf.lookup.StaticHashTable.__init__ to create the table in anonymous mode. In this mode, the table resource can only be accessed via resource handles (not resource names) and will be deleted automatically when all resource handles pointing to it are gone.tf.data:
tf.data.experimental.at API which provides random access for input pipelines that consist of transformations that support random access. The initial set of transformations that support random access includes: tf.data.Dataset.from_tensor_slices,tf.data.Dataset.shuffle, tf.data.Dataset.batch, tf.data.Dataset.shard, tf.data.Dataset.map, and tf.data.Dataset.range.tf.data.Options.experimental_deterministic API to tf.data.Options.deterministic and deprecate the experimental endpoint.tf.data.Options.experimental_optimization.autotune* to a newly created tf.data.Options.autotune.* and remove support for tf.data.Options.experimental_optimization.autotune_buffers.tf.data.experimental.sample_from_datasets API to tf.data.Dataset.sample_from_datasets and deprecate the experimental endpoint.TF_GPU_ALLOCATOR=cuda_malloc_async that use cudaMallocAsync from CUDA 11.2. This could become the default in the future.tf.saved_model.SaveOptions to disable this.--input_examples inputs are now restricted to
python literals to avoid code injection.jit_compile=True are now deterministic).tf.saved_model.save:
TF_DETERMINISTIC_OPS to "true" or "1"):
tf.math.segment_sumtf.math.segment_prodtf.math.segment_meantf.math.unsorted_segment_sumtf.math.unsorted_segment_prodtf.math.unsorted_segment_sqrttf.math.unsorted_segment_meantf.gather backproptf.convert_to_tensor when fed with (sparse) tf.IndexedSlicestf.nn.sparse_softmax_crossentropy_with_logitstf.nn.ctc_loss (resolved, possibly in prior release, and confirmed with tests)tf.data.Datasettf.scatter_nd and other related scatter functions, such as tf.tensor_scatter_nd_updateTF_DETERMINISTIC_OPS is set to "true" or "1"), an attempt to use the specified paths through the following ops on a GPU will cause tf.errors.UnimplementedError (with an understandable message), unless otherwise specified, to be thrown.
tf.compat.v1.nn.fused_batch_norm backprop to offset when is_training=Falsetf.image.adjust_contrast forwardtf.nn.depthwise_conv2d backprop to filter when not using cuDNN convolutiontf.image.resize with method=ResizeMethod.NEAREST backproptf.math.bincount - TODO: confirm exception addedtf.raw_ops.DebugNumericSummary and tf.raw_ops.DebugNumericSummaryV2tf.Variable.scatter_add (and other scatter methods, both on ref and resource variables)tf.linalg.svdtf.nn.dilation2d gradienttf.nn.max_pool_with_argmax gradienttf.timestamp. Throws FailedPreconditiontf.random module when the global random seed has not yet been set (via tf.random.set_seed). Throws RuntimeError from Python or InvalidArgument from C++tf.compat.v1.get_seed if the global random seed has not yet been set (via tf.random.set_seed). Throws RuntimeError from Python or InvalidArgument from C++saved_model_cli (CVE-2021-41228)FusedBatchNorm kernels (CVE-2021-41223)ImmutableConst (CVE-2021-41227)SparseBinCount (CVE-2021-41226)SparseFillEmptyRows (CVE-2021-41224)SplitV (CVE-2021-41222)Cudnn* ops (CVE-2021-41221)Exit node is not preceded by Enter op (CVE-2021-41217)tf.raw_ops.AllToAll (CVE-2021-41218)CollectiveReduceV2 (CVE-2021-41220)nullptr reference binding in sparse matrix multiplication (CVE-2021-41219)Transpose (CVE-2021-41216)tf.function objects (CVE-2021-41213)DeserializeSparse (CVE-2021-41215)nullptr in tf.ragged.cross (CVE-2021-41214)tf.ragged.cross (CVE-2021-41212)QuantizeV2 (CVE-2021-41211)tf.raw_ops.QuantizeAndDequantizeV* ops (CVE-2021-41205)ParallelConcat (CVE-2021-41207)tf.raw_ops.SparseCountSparseOutput (CVE-2021-41210)EinsumHelper::ParseEquation (CVE-2021-41201)tf.range (CVE-2021-41202)tf.image.resize when size is large (CVE-2021-41199)tf.tile when tiling tensor is large (CVE-2021-41198)tf.summary.create_file_writer (CVE-2021-41200)CHECK-fail in ops with large tensor shapes (CVE-2021-41197)max_pool3d when size argument is 0 or negative (CVE-2021-41196)tf.math.segment_* operations (CVE-2021-41195)curl to 7.78.0 to handle
CVE-2021-22922,
CVE-2021-22923,
CVE-2021-22924,
CVE-2021-22925,
and
CVE-2021-22926.This release contains contributions from many people at Google, as well as:
8bitmp3, Abhilash Majumder, abhilash1910, AdeshChoudhar, Adrian Garcia Badaracco, Adrian Ratiu, ag.ramesh, Aleksandr Nikolaev, Alexander Bosch, Alexander Grund, Annie Tallund, Anush Elangovan, Artem Sokolovskii, azazhu, Balint Cristian, Bas Aarts, Ben Barsdell, bhack, cfRod, Cheney-Wang, Cheng Ren, Christopher Bate, collin, Danila Bespalov, David Datascientist, Deven Desai, Duncan Riach, Ehsan Kia, Ellie, Fan Du, fo40225, Frederic Bastien, fsx950223, Gauri1 Deshpande, geetachavan1, Guillaume Klein, guozhong.zhuang, helen, Håkon Sandsmark, japm48, jgehw, Jinzhe Zeng, Jonathan Dekhtiar, Kai Zhu, Kaixi Hou, Kanvi Khanna, Koan-Sin Tan, Koki Ibukuro, Kulin Seth, KumaTea, Kun-Lu, Lemo, lipracer, liuyuanqiang, Mahmoud Abuzaina, Marius Brehler, Maxiwell S. Garcia, mdfaijul, metarutaiga, Michal Szutenberg, nammbash, Neil Girdhar, Nishidha Panpaliya, Nyadla-Sys, Patrice Vignola, Peter Kasting, Philipp Hack, PINTO0309, Prateek Gupta, puneeshkhanna, Rahul Butani, Rajeshwar Reddy T, Reza Rahimi, RinozaJiffry, rmothukuru, Rohit Santhanam, Saduf2019, Samuel Marks, sclarkson, Sergii Khomenko, Sheng, Yang, Sidong-Wei, slowy07, Srinivasan Narayanamoorthy, Srishti Srivastava, stanley, Stella Alice Schlotter, Steven I Reeves, stevenireeves, svobora, Takayoshi Koizumi, Tamas Bela Feher, Thibaut Goetghebuer-Planchon, Trent Lo, Twice, Varghese, Jojimon, Vishnuvardhan Janapati, Wang Yanzhang, Wang,Quintin, William Muir, William Raveane, Yasir Modak, Yasuhiro Matsumoto, Yi Li, Yong Tang, zhaozheng09, Zhoulong Jiang, zzpmiracle
Add an upper bound for protobuf in setup.py since protobuf after version 3.20 is currently incompatible with TensorFlow. See https://github.com/tensor
Add 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.
This is the final release in the 2.6.x series.
This releases introduces several vulnerability fixes:
This releases introduces several vulnerability fixes:
saved_model_cli (CVE-2022-29216)TensorSummaryV2 to crash (CVE-2022-29193)QuantizeAndDequantizeV4Grad (CVE-2022-29192)DeleteSessionTensor (CVE-2022-29194)GetSessionTensor (CVE-2022-29191)StagePeek (CVE-2022-29195)UnsortedSegmentJoin (CVE-2022-29197)LoadAndRemapMatrix (CVE-2022-29199)SparseTensorToCSRSparseMatrix (CVE-2022-29198)LSTMBlockCell (CVE-2022-29200)Conv3DBackpropFilterV2 (CVE-2022-29196)CHECK failure in depthwise ops via overflows (CVE-2021-41197)SparseTensorDenseAdd (CVE-2022-29206)QuantizedConv2D (CVE-2022-29201)SpaceToBatchND (CVE-2022-29203)EditDistance (CVE-2022-29208)Conv3DBackpropFilterV2 (CVE-2022-29204)tf.ragged.constant due to lack of validation (CVE-2022-29202)tf.histogram_fixed_width is called with NaN values (CVE-2022-29211)CHECK-failure based denial of service (CVE-2022-29209)curl to 7.83.1 to handle (CVE-2022-22576, (CVE-2022-27774, (CVE-2022-27775, (CVE-2022-27776, (CVE-2022-27778, (CVE-2022-27779, (CVE-2022-27780, (CVE-2022-27781, (CVE-2022-27782 and (CVE-2022-30115zlib to 1.2.12 after 1.2.11 was pulled due to security issueThis releases introduces several vulnerability fixes:
This releases introduces several vulnerability fixes:
ReverseSequence (CVE-2022-21728)Dequantize (CVE-2022-21726)Dequantize (CVE-2022-21727)FractionalAvgPoolGrad (CVE-2022-21730)UnravelIndex (CVE-2022-21729)ConcatV2 (CVE-2022-21731)ThreadPoolHandle (CVE-2022-21732)StringNGrams (CVE-2022-21733)AddManySparseToTensorsMap (CVE-2022-23568)CHECK-failures in MapStage (CVE-2022-21734)FractionalMaxPool (CVE-2022-21735)CHECK-fails when building invalid/overflowing tensor shapes (CVE-2022-23569)SparseTensorSliceDataset (CVE-2022-21736)QuantizedMaxPool (CVE-2022-21739)SparseCountSparseOutput (CVE-2022-21738)SparseCountSparseOutput (CVE-2022-21740)BiasAndClamp in TFLite (CVE-2022-23557)tf.sparse.split to crash when axis is a tuple (CVE-2021-41206)CHECK-fail when decoding resource handles from proto (CVE-2022-23564)CHECK-fail with repeated AttrDef (CVE-2022-23565)CHECK-fail when decoding invalid tensors from proto (CVE-2022-23571)SpecializeType (CVE-2022-23574)AssignOp (CVE-2022-23573)OpLevelCostEstimator::CalculateTensorSize (CVE-2022-23575)OpLevelCostEstimator::CalculateOutputSize (CVE-2022-23576)GetInitOp (CVE-2022-23577)CHECK-failures during Grappler's IsSimplifiableReshape (CVE-2022-23581)CHECK-failures during Grappler's SafeToRemoveIdentity (CVE-2022-23579)CHECK-failures in TensorByteSize (CVE-2022-23582)CHECK-failures in binary ops due to type confusion (CVE-2022-23583)DecodePng kernel (CVE-2022-23584)CHECK-fails in function.cc (CVE-2022-23586)CHECK-fails due to attempting to build a reference tensor (CVE-2022-23588)IsConstant (CVE-2022-23589)CHECK failure in constant folding (CVE-2021-41197)GraphDef (CVE-2022-23591)BuildXlaCompilationCache (XLA) (CVE-2022-23595)icu to 69.1 to handle CVE-2020-10531This release just fixes an issue where keras, tensorflow_estimator and tensorboard were missing proper upper bounds and resulted in broken installs af
This release just fixes an issue where keras, tensorflow_estimator and tensorboard were missing proper upper bounds and resulted in broken installs after Keras 2.7 release for all packages in TensorFlow ecosystem
This release introduces several vulnerability fixes:
This release introduces several vulnerability fixes:
saved_model_cli (CVE-2021-41228)FusedBatchNorm kernels (CVE-2021-41223)ImmutableConst (CVE-2021-41227)SparseBinCount (CVE-2021-41226)SparseFillEmptyRows (CVE-2021-41224)SplitV (CVE-2021-41222)Cudnn* ops (CVE-2021-41221)Exit node is not preceded by Enter op (CVE-2021-41217)tf.raw_ops.AllToAll (CVE-2021-41218)CollectiveReduceV2 (CVE-2021-41220)nullptr reference binding in sparse matrix multiplication (CVE-2021-41219)Transpose (CVE-2021-41216)tf.function objects (CVE-2021-41213)DeserializeSparse (CVE-2021-41215)nullptr in tf.ragged.cross (CVE-2021-41214)tf.ragged.cross (CVE-2021-41212)QuantizeV2 (CVE-2021-41211)tf.raw_ops.QuantizeAndDequantizeV* ops (CVE-2021-41205)ParallelConcat (CVE-2021-41207)tf.raw_ops.SparseCountSparseOutput (CVE-2021-41210)EinsumHelper::ParseEquation (CVE-2021-41201)tf.range (CVE-2021-41202)tf.image.resize when size is large (CVE-2021-41199)tf.tile when tiling tensor is large (CVE-2021-41198)tf.summary.create_file_writer (CVE-2021-41200)CHECK-fail in ops with large tensor shapes (CVE-2021-41197)max_pool3d when size argument is 0 or negative (CVE-2021-41196)tf.math.segment_* operations (CVE-2021-41195)curl to 7.78.0 to handle CVE-2021-22922, CVE-2021-22923, CVE-2021-22924, CVE-2021-22925, and CVE-2021-22926.Fixes a heap out of bounds access in sparse reduction operations (CVE-2021-37635)
tf.train.experimental.enable_mixed_precision_graph_rewrite is removed, as the API only works in graph mode and is not customizable. The function is still accessible under tf.compat.v1.mixed_precision.enable_mixed_precision_graph_rewrite, but it is recommended to use the Keras mixed precision API instead.
tf.lite:
experimental.nn.dynamic_rnn, experimental.nn.TfLiteRNNCell and experimental.nn.TfLiteLSTMCell since they're no longersupported. It's recommended to just use keras lstm instead.tf.keras:
keras), and its code has been moved to the GitHub repositorykeras-team/keras. The API endpoints for tf.keras stay unchanged, but are now backed by the keras PIP package. The existing code in tensorflow/python/keras is a staled copy and will be removed in future release (2.7). Please remove any imports to tensorflow.python.keras and replace them with public tf.keras API instead.Model.to_yaml() and keras.models.model_from_yaml have been replaced to raise a RuntimeError as they can be abused to cause arbitrary code execution. It is recommended to use JSON serialization instead of YAML, or, a better alternative, serialize to H5.tf.while_loop, which caused it to execute sequentially, even when parallel_iterations>1, has now been fixed. However, the increased parallelism may result in increased memory use. Users who experience unwanted regressions should reset their while_loop's parallel_iterations value to 1, which is consistent with prior behavior.tf.keras:
keras), and its code has been moved to the GitHub repository keras-team/keras.
The API endpoints for tf.keras stay unchanged, but are now backed by the keras PIP package. All Keras-related PRs and issues should now be directed to the GitHub repository keras-team/keras.tf.keras.utils.experimental.DatasetCreator now takes an optional tf.distribute.InputOptions for specific options when used with distribution.tf.keras.experimental.SidecarEvaluator is now available for a program intended to be run on an evaluator task, which is commonly used to supplement a training cluster running with tf.distribute.experimental.ParameterServerStrategy (see `https://www.tensorflow.org/tutorials/distribute/parameter_server_training). It can also be used with single-worker training or other strategies. See docstring for more info.tf.keras.layers.preprocessing.experimental to tf.keras.layers.StringLookup and IntegerLookup default for mask_token changed to None. This matches the default masking behavior of Hashing and Embedding layers. To keep existing behavior, pass mask_token="" during layer creation."binary" output mode to "multi_hot" for CategoryEncoding, StringLookup, IntegerLookup, and TextVectorization. Multi-hot encoding will no longer automatically uprank rank 1 inputs, so these layers can now multi-hot encode unbatched multi-dimensional samples."one_hot" for CategoryEncoding, StringLookup, IntegerLookup, which will encode each element in an input batch individually, and automatically append a new output dimension if necessary. Use this mode on rank 1 inputs for the old "binary" behavior of one-hot encoding a batch of scalars.Normalization will no longer automatically uprank rank 1 inputs, allowing normalization of unbatched multi-dimensional samples.tf.lite:
experimental_enable_resource_variables on tf.lite.TFLiteConverter to True.
Note: mutable variables is only available using from_saved_model in this release, support for other methods is coming soon.tf.saved_model:
tf.saved_model.SaveOption(experimental_custom_gradients=True) to enable this feature. The documentation in Advanced autodiff has been updated.TF Core:
tf.config.experimental.reset_memory_stats to reset the tracked peak memory returned by tf.config.experimental.get_memory_info.tf.data:
target_workers param to data_service_ops.from_dataset_id and data_service_ops.distribute. Users can specify "AUTO", "ANY", or "LOCAL" (case insensitive). If "AUTO", tf.data service runtime decides which workers to read from. If "ANY", TF workers read from any tf.data service workers. If "LOCAL", TF workers will only read from local in-processs tf.data service workers. "AUTO" works well for most cases, while users can specify other targets. For example, "LOCAL" would help avoid RPCs and data copy if every TF worker colocates with a tf.data service worker. Currently, "AUTO" reads from any tf.data service workers to preserve existing behavior. The default value is "AUTO".tf.lookup.experimental.MutableHashTable, which provides a generic mutable hash table implementation.
tf.lookup.experimental.DenseHashTable this offers lower overall memory usage, and a cleaner API. It does not require specifying a delete_key and empty_key that cannot be inserted into the table.perturb_singular to tf.linalg.tridiagonal_solve that allows solving linear systems with a numerically singular tridiagonal matrix, e.g. for use in inverse iteration.tf.linalg.eigh_tridiagonal that computes the eigenvalues of a Hermitian tridiagonal matrix.tf.constant now places its output on the current default device.tf.saved_model.experimental.TrackableResource, which allows the creation of custom wrapper objects for resource tensors.tf.saved_model.LoadOptions]
(https://www.tensorflow.org/api_docs/python/tf/saved_model/LoadOptions) for details.SparseSegmentSumGrad to match the other sparse segment gradient ops and avoid an extra gather operation that was in the previous gradient implementation.internal_fragmentation_fraction, which controls when the BFC Allocator needs to split an oversized chunk to satisfy an allocation request.tf.get_current_name_scope() which returns the current full name scope string that will be prepended to op names.tf.data:
tf.data.experimental.bucket_by_sequence_length API to tf.data.Dataset.bucket_by_sequence_length and deprecating the experimental endpoint.tf.data.experimental.get_single_element API to tf.data.Dataset.get_single_element and deprecating the experimental endpoint.tf.data.experimental.group_by_window API to tf.data.Dataset.group_by_window and deprecating the experimental endpoint.tf.data.experimental.RandomDataset API to tf.data.Dataset.random and deprecating the experimental endpoint.tf.data.experimental.scan API to tf.data.Dataset.scan and deprecating the experimental endpoint.tf.data.experimental.snapshot API to tf.data.Dataset.shapshot and deprecating the experimental endpoint.tf.data.experimental.take_while API to tf.data.Dataset.take_while and deprecating the experimental endpoint.tf.data.experimental.ThreadingOptions API to tf.data.ThreadingOptions and deprecating the experimental endpoint.tf.data.experimental.unique API to tf.data.Dataset.unique and deprecating the experimental endpoint.stop_on_empty_dataset parameter to sample_from_datasets and choose_from_datasets. Setting stop_on_empty_dataset=True will stop sampling if it encounters an empty dataset. This preserves the sampling ratio throughout training. The prior behavior was to continue sampling, skipping over exhausted datasets, until all datasets are exhausted. By default, the original behavior (stop_on_empty_dataset=False) is preserved.tf.data.Options.experimental_statstf.data.experimental.StatsAggregatortf.data.experimental.StatsOptions.*tf.data.experimental.bytes_produced_statstf.data.experimental.latency_statstf.data.experimental.MapVectorizationOptions.*tf.data.experimental.OptimizationOptions.filter_with_random_uniform_fusiontf.data.experimental.OptimizationOptions.hoist_random_uniformtf.data.experimental.OptimizationOptions.map_vectorization * tf.data.experimental.OptimizationOptions.reorder_data_discarding_opstf.keras:
__getitem__ slicing in Keras Functional APIs when the inputs are RaggedTensor objects.keepdims argument to all GlobalPooling layers.include_preprocessing argument to MobileNetV3 architectures to control the inclusion of Rescaling layer in the model.force) to make_(train|test|predict)_funtion methods to skip the cached function and generate a new one. This is useful to regenerate in a single call the compiled training function when any .trainable attribute of any model's layer has changed.save_spec property which contains the TensorSpec specs for calling the model. This spec is automatically saved when the model is called for the first time.tf.linalg:
CompositeTensor as a base class to LinearOperator.tf.lite:
framework_stable BUILD target, which links in only the non-experimental TF Lite APIs.Interpreter methods:
modifyGraphWithDelegate - Use Interpreter.Options.addDelegatesetNumThreads - Use Interpreter.Options.setNumThreadstf.summary:
tf.summary.should_record_summaries() so it correctly reflects when summaries will be written, even when tf.summary.record_if() is not n effect, by returning True tensor if default writer is present.TF_DETERMINISTIC_OPS to "true" or "1"):
tf.nn.softmax_cross_entropy_with_logits. See PR 49178.tf.image.crop_and_resize. See PR 48905.tf.errors.UnimplementedError (with an understandable message) to be thrown.
SparseDenseCwiseDiv (CVE-2021-37636)CompressElement (CVE-2021-37637)RaggedTensorToTensor (CVE-2021-37638)ResourceScatterDiv (CVE-2021-37642)RaggedGather (CVE-2021-37641)std::abort raised from TensorListReserve (CVE-2021-37644)MatrixDiagPartOp (CVE-2021-37643)StringNGrams caused by integer conversion (CVE-2021-37646)SparseTensorSliceDataset (CVE-2021-37647)SaveV2 inputs (CVE-2021-37648)UncompressElement (CVE-2021-37649){Experimental,}DatasetToTFRecord (CVE-2021-37650)FractionalAvgPoolGrad (CVE-2021-37651)ResourceGather (CVE-2021-37653)CHECK fail in ResourceGather (CVE-2021-37654)ResourceScatterUpdate (CVE-2021-37655)RaggedTensorToSparse (CVE-2021-37656)MatrixDiagV* ops (CVE-2021-37657)MatrixSetDiagV* ops (CVE-2021-37658)QuantizeV2 (CVE-2021-37663)RaggedTensorToVariant (CVE-2021-37666)tf.raw_ops.UnravelIndex (CVE-2021-37668)UpperBound and LowerBound (CVE-2021-37670)SdcaOptimizerV2 (CVE-2021-37672)CHECK-fail in MapStage (CVE-2021-37673)MaxPoolGrad (CVE-2021-37674)Dequantize (CVE-2021-37677)tf.map_fn with RaggedTensors (CVE-2021-37679)Gather* implementations (CVE-2021-37687)curl to 7.77.0 to handle CVE-2021-22876, CVE-2021-22897, CVE-2021-22898, and CVE-2021-22901.This release contains contributions from many people at Google, as well as:
Aadhitya A, Abhilash Mahendrakar, Abhishek Varma, Abin Shahab, Adam Hillier, Aditya Kane, AdityaKane2001, ag.ramesh, Amogh Joshi, Armen Poghosov, armkevincheng, Avrosh K, Ayan Moitra, azazhu, Banikumar Maiti, Bas Aarts, bhack, Bhanu Prakash Bandaru Venkata, Billy Cao, Bohumir Zamecnik, Bradley Reece, CyanXu, Daniel Situnayake, David Pal, Ddavis-2015, DEKHTIARJonathan, Deven Desai, Duncan Riach, Edward, Eli Osherovich, Eugene Kuznetsov, europeanplaice, evelynmitchell, Evgeniy Polyakov, Felix Vollmer, Florentin Hennecker, François Chollet, Frederic Bastien, Fredrik Knutsson, Gabriele Macchi, Gaurav Shukla, Gauri1 Deshpande, geetachavan1, Georgiy Manuilov, H, Hengwen Tong, Henri Woodcock, Hiran Sarkar, Ilya Arzhannikov, Janghoo Lee, jdematos, Jens Meder, Jerry Shih, jgehw, Jim Fisher, Jingbei Li, Jiri Podivin, Joachim Gehweiler, Johannes Lade, Jonas I. Liechti, Jonas Liechti, Jonas Ohlsson, Jonathan Dekhtiar, Julian Gross, Kaixi Hou, Kevin Cheng, Koan-Sin Tan, Kulin Seth, linzewen, Liubov Batanina, luisleee, Lukas Geiger, Mahmoud Abuzaina, mathgaming, Matt Conley, Max H. Gerlach, mdfaijul, Mh Kwon, Michael Martis, Michal Szutenberg, Måns Nilsson, nammbash, Neil Girdhar, Nicholas Vadivelu, Nick Kreeger, Nirjas Jakilim, okyanusoz, Patrice Vignola, Patrik Laurell, Pedro Marques, Philipp Hack, Phillip Cloud, Piergiacomo De Marchi, Prashant Kumar, puneeshkhanna, pvarouktsis, QQ喵, Rajeshwar Reddy T, Rama Ketineni, Reza Rahimi, Robert Kalmar, rsun, Ryan Kuester, Saduf2019, Sean Morgan, Sean Moriarity, Shaochen Shi, Sheng, Yang, Shu Wang, Shuai Zhang, Soojeong, Stanley-Nod, Steven I Reeves, stevenireeves, Suraj Sudhir, Sven Mayer, Tamas Bela Feher, tashuang.zk, tcervi, Teng Lu, Thales Elero Cervi, Thibaut Goetghebuer-Planchon, Thomas Walther, Till Brychcy, Trent Lo, Uday Bondhugula, vishakha.agrawal, Vishnuvardhan Janapati, wamuir, Wenwen Ouyang, wenwu, Williard Joshua Jose, xiaohong1031, Xiaoming (Jason) Cui, Xinan Jiang, Yasir Modak, Yi Li, Yong Tang, zilinzhu, 박상준, 이장
This releases introduces several vulnerability fixes:
Note: This is the last release in the 2.5 series.
This releases introduces several vulnerability fixes:
ReverseSequence (CVE-2022-21728)Dequantize (CVE-2022-21726)Dequantize (CVE-2022-21727)FractionalAvgPoolGrad (CVE-2022-21730)UnravelIndex (CVE-2022-21729)ConcatV2 (CVE-2022-21731)ThreadPoolHandle (CVE-2022-21732)StringNGrams (CVE-2022-21733)AddManySparseToTensorsMap (CVE-2022-23568)CHECK-failures in MapStage (CVE-2022-21734)FractionalMaxPool (CVE-2022-21735)CHECK-fails when building invalid/overflowing tensor shapes (CVE-2022-23569)SparseTensorSliceDataset (CVE-2022-21736)QuantizedMaxPool (CVE-2022-21739)SparseCountSparseOutput (CVE-2022-21738)SparseCountSparseOutput (CVE-2022-21740)BiasAndClamp in TFLite (CVE-2022-23557)tf.sparse.split to crash when axis is a tuple (CVE-2021-41206)CHECK-fail when decoding resource handles from proto (CVE-2022-23564)CHECK-fail with repeated AttrDef (CVE-2022-23565)CHECK-fail when decoding invalid tensors from proto (CVE-2022-23571)AssignOp (CVE-2022-23573)OpLevelCostEstimator::CalculateTensorSize (CVE-2022-23575)OpLevelCostEstimator::CalculateOutputSize (CVE-2022-23576)GetInitOp (CVE-2022-23577)CHECK-failures during Grappler's IsSimplifiableReshape (CVE-2022-23581)CHECK-failures during Grappler's SafeToRemoveIdentity (CVE-2022-23579)CHECK-failures in TensorByteSize (CVE-2022-23582)CHECK-failures in binary ops due to type confusion (CVE-2022-23583)DecodePng kernel (CVE-2022-23584)CHECK-fails in function.cc (CVE-2022-23586)CHECK-fails due to attempting to build a reference tensor (CVE-2022-23588)IsConstant (CVE-2022-23589)CHECK failure in constant folding (CVE-2021-41197)GraphDef (CVE-2022-23591)icu to 69.1 to handle CVE-2020-10531This release introduces several vulnerability fixes:
This release introduces several vulnerability fixes:
saved_model_cli (CVE-2021-41228)FusedBatchNorm kernels (CVE-2021-41223)ImmutableConst (CVE-2021-41227)SparseBinCount (CVE-2021-41226)SparseFillEmptyRows (CVE-2021-41224)SplitV (CVE-2021-41222)Cudnn* ops (CVE-2021-41221)Exit node is not preceded by Enter op (CVE-2021-41217)tf.raw_ops.AllToAll (CVE-2021-41218)nullptr reference binding in sparse matrix multiplication (CVE-2021-41219)Transpose (CVE-2021-41216)tf.function objects (CVE-2021-41213)DeserializeSparse (CVE-2021-41215)nullptr in tf.ragged.cross (CVE-2021-41214)tf.ragged.cross (CVE-2021-41212)tf.raw_ops.QuantizeAndDequantizeV* ops (CVE-2021-41205)ParallelConcat (CVE-2021-41207)tf.raw_ops.SparseCountSparseOutput (CVE-2021-41210)EinsumHelper::ParseEquation (CVE-2021-41201)tf.range (CVE-2021-41202)tf.image.resize when size is large (CVE-2021-41199)tf.tile when tiling tensor is large (CVE-2021-41198)tf.summary.create_file_writer (CVE-2021-41200)CHECK-fail in ops with large tensor shapes (CVE-2021-41197)max_pool3d when size argument is 0 or negative (CVE-2021-41196)tf.math.segment_* operations (CVE-2021-41195)curl to 7.78.0 to handle CVE-2021-22922, CVE-2021-22923, CVE-2021-22924, CVE-2021-22925, and CVE-2021-22926.This release introduces several vulnerability fixes:
This release introduces several vulnerability fixes:
SparseDenseCwiseDiv (CVE-2021-37636)CompressElement (CVE-2021-37637)RaggedTensorToTensor (CVE-2021-37638)ResourceScatterDiv (CVE-2021-37642)RaggedGather (CVE-2021-37641)std::abort raised from TensorListReserve (CVE-2021-37644)MatrixDiagPartOp (CVE-2021-37643)StringNGrams caused by integer conversion (CVE-2021-37646)SparseTensorSliceDataset (CVE-2021-37647)SaveV2 inputs (CVE-2021-37648)UncompressElement (CVE-2021-37649){Experimental,}DatasetToTFRecord (CVE-2021-37650)FractionalAvgPoolGrad (CVE-2021-37651)ResourceGather (CVE-2021-37653)CHECK fail in ResourceGather (CVE-2021-37654)ResourceScatterUpdate (CVE-2021-37655)RaggedTensorToSparse (CVE-2021-37656)MatrixDiagV* ops (CVE-2021-37657)MatrixSetDiagV* ops (CVE-2021-37658)QuantizeV2 (CVE-2021-37663)RaggedTensorToVariant (CVE-2021-37666)tf.raw_ops.UnravelIndex (CVE-2021-37668)UpperBound and LowerBound (CVE-2021-37670)SdcaOptimizerV2 (CVE-2021-37672)CHECK-fail in MapStage (CVE-2021-37673)MaxPoolGrad (CVE-2021-37674)Dequantize (CVE-2021-37677)tf.map_fn with RaggedTensors (CVE-2021-37679)Gather* implementations (CVE-2021-37687)curl to 7.77.0 to handle CVE-2021-22876, CVE-2021-22897, CVE-2021-22898, and CVE-2021-22901.Fixes a heap buffer overflow in RaggedBinCount (CVE-2021-29512)
tf.data:
tf.data service now supports strict round-robin reads, which is useful for synchronous training workloads where example sizes vary. With strict round robin reads, users can guarantee that consumers get similar-sized examples in the same step.compression=None to tf.data.experimental.service.distribute(...).tf.data.Dataset.batch() now supports num_parallel_calls and deterministic arguments. num_parallel_calls is used to indicate that multiple input batches should be computed in parallel. With num_parallel_calls set, deterministic is used to indicate that outputs can be obtained in the non-deterministic order.tf.data.Dataset.options() are no longer mutable.map. The debug mode can be enabled through tf.data.experimental.enable_debug_mode().tf.lite
experimental_new_quantizer in tf.lite.TFLiteConverter to False to disable this changetf.keras
tf.keras.metrics.AUC now support logit predictions.Model.fit, tf.keras.utils.experimental.DatasetCreator, which takes a callable, dataset_fn. DatasetCreator is intended to work across all tf.distribute strategies, and is the only input type supported for Parameter Server strategy.tf.distribute
tf.distribute.experimental.ParameterServerStrategy now supports training with Keras Model.fit when used with DatasetCreator.tf.random.Generator under tf.distribute.Strategy scopes is now allowed (except for tf.distribute.experimental.CentralStorageStrategy and tf.distribute.experimental.ParameterServerStrategy). Different replicas will get different random-number streams.profile_data_directory to EmbeddingConfigSpec in _tpu_estimator_embedding.py. This allows embedding lookup statistics gathered at runtime to be used in embedding layer partitioning decisions.TF_ENABLE_ONEDNN_OPTS=1.TF_CPP_MIN_VLOG_LEVEL environment variable has been renamed to to TF_CPP_MAX_VLOG_LEVEL which correctly describes its effect.tf.keras:
StringLookup added output_mode, sparse, and pad_to_max_tokens arguments with same semantics as TextVectorization.IntegerLookup added output_mode, sparse, and pad_to_max_tokens arguments with same semantics as TextVectorization. Renamed max_values, oov_value and mask_value to max_tokens, oov_token and mask_token to align with StringLookup and TextVectorization.TextVectorization default for pad_to_max_tokens switched to False.CategoryEncoding no longer supports adapt, IntegerLookup now supports equivalent functionality. max_tokens argument renamed to num_tokens.Discretization added num_bins argument for learning bins boundaries through calling adapt on a dataset. Renamed bins argument to bin_boundaries for specifying bins without adapt.model.load_weights now accepts paths to saved models.tf.TypeSpecs.tf.keras.optimizers.schedules.CosineDecay andtf.keras.optimizers.schedules.CosineDecayRestarts.tf.data:
tf.data.experimental.ExternalStatePolicy, which can be used to control how external state should be handled during dataset serialization or iterator checkpointing.tf.data.experimental.save to store the type specification of the dataset elements. This avoids the need for explicitly specifying the element_spec argument of tf.data.experimental.load when loading the previously saved dataset..element_spec property to tf.data.DatasetSpec to access the inner spec. This can be used to extract the structure of nested
datasets.tf.data.experimental.AutoShardingPolicy.HINT which can be used to provide hints to tf.distribute-based auto-sharding as to where in the input pipeline to insert sharding transformations.tf.function and GraphDef boundaries.XLA compilation:
tf.function(experimental_compile=True) has become a stable API, renamed tf.function(jit_compile=True).strategy.run can now be annoted with jit_compile=True.tf.distribute:
experimental_prefetch_to_device in tf.distribute.InputOptions to experimental_fetch_to_device to better reflect the purpose.tf.lite:
tflite::Subgraph:
tensors() method and the non-const overload of the nodes_and_registration() method, both of which were previously documented as temporary and to be removed.
tensors() can be replaced by calling the existing methods tensors_size() and tensor(int).nodes_and_registration can be replaced by calling the existing methods nodes_size() and context(), and then calling the GetNodeAndRegistration method in the TfLiteContext returned by context().Interpreter::UseNNAPI(bool) C++ API.
NnApiDelegate() and related delegate configuration methods directly.TFLiteConverter.from_saved_model.RFFT2D as builtin op. (RFFT2D also supports RFFTD.) Currently only supports float32 input.SLICE op.ReshapeV2.TFLiteConverter.from_saved_model.experimental_preserve_all_tensors to aid in debugging conversion.tf.compat.v1.lite.experimental.get_potentially_supported_ops. Use tf.lite.TFLiteConverter directly to check whether a model is convertible.converter.target_spec._experimental_custom_op_registerers. used in Python Interpreter API.TF Core:
tf.cond, tf.while_loop, and compositions like tf.foldl) computed with tf.GradientTape inside a tf.function.gradient_checker_v2.compute_gradients to be exactly representable as a binary floating point numbers. This avoids poluting gradient approximations needlessly, which is some cases leads to false negatives in op gradient tests.tf.config.experimental.get_memory_info, returning a dict with the current and peak memory usage. Deprecated tf.config.experimental.get_memory_usage in favor of this new function.tf.config.experimental.enable_tensor_float_32_execution to control Tensor-Float-32 evaluation in RNNs.tf.summary:
tf.summary.graph allows manual write of TensorFlow graph (tf.Graph or tf.compat.v1.GraphDef) as a summary. This is not a replacement for the trace-based API.Set /d2ReducedOptimizeHugeFunctions by default for Windows builds. This provides a big compile-time speedup, and effectively raises the minimum supported MSVC version to 16.4 (current: 16.8).
TensorRT
session_config parameter for the TF1-TRT converter TrtGraphConverter. Previously, we issued a warning when the value of the parameter is not None.TrtGraphConverterV2 takes an object of class TrtConversionParams as a parameter. Removed three deprecated fields from this class: rewriter_config_template, is_dynamic_op, and max_batch_size. Previously, we issued a warning when the value of rewriter_config_template is not None. We issued an error when the value of is_dynamic_op is not True. We didn't use the value for max_batch_size for building TensorRT engines. Add parameters use_dynamic_shape to enable dynamic shape support. The default is to disable dynamic shape support. Add dynamic_shape_profile_strategy for selecting a dynamic shape profile strategy. The default is profile strategy is Range.TF XLA
MLIR_BRIDGE_ROLLOUT_SAFE_MODE_ENABLED to tf.config.experimental.mlir_bridge_rollout to enable a "safe" mode. This runs the MLIR bridge only when an analysis of the graph only when an analysis of the graph determines that it is safe to run.MLIR_BRIDGE_ROLLOUT_SAFE_MODE_FALLBACK_ENABLED' to tf.config.experimental.mlir_bridge_rollout` to enable a fallback for the MLIR bridge in a "safe" mode. This runs the MLIR bridge in a FallbackEnabled mode when an analysis of the graph determines that the graph does not have unsupported features.Deterministic Op Functionality:
TF_DETERMINISTIC_OPS is set to "true" or "1" (when op-determinism is expected), an attempt to run the following ops on a GPU will throw tf.errors.UnimplementedError (with an understandable message) when data is a floating-point type, including complex types (if supported): tf.math.segment_prod, tf.math.segment_sum, tf.math.unsorted_segment_mean, tf.math.unsorted_segment_sqrt_n, tf.math.unsorted_segment_prod, tf.math.unsorted_segment_sum, and therefore also tf.convert_to_tensor when value is of type tf.IndexedSlices (such as in the back prop though tf.gather into a dense embedding). See issue 39751 which this change addresses, but does not solve. This exception-throwing behavior can be disabled by setting the environment variable TF_DISABLE_SEGMENT_REDUCTION_OP_DETERMINISM_EXCEPTIONS to "true" or
"1". For more information about these changes, see the description in pull request 47772.tf.sparse.sparse_dense_matmul introduced truly random noise in the forward path for data of type tf.float32 but not for data of type tf.float64 (for which there was no GPU implementation). In this current release, GPU support for other floating-point types (tf.float16, tf.float64, tf.complex64, and tf.complex128) has been added for this op. If you were relying on the determinism of the tf.float64 CPU implementation being automatically selected because of the absence of the tf.float64 GPU implementation, you with either need to force the op to run on the CPU or use a different data type.Security
RaggedBinCount (CVE-2021-29512)RaggedBinCount (CVE-2021-29514)MatrixDiag* ops (CVE-2021-29515)Conv3D (CVE-2021-29517)CHECK-fail in SparseCross caused by type confusion (CVE-2021-29519)SparseCountSparseOutput (CVE-2021-29521)Conv3DBackprop* (CVE-2021-29520)Conv3DBackprop* (CVE-2021-29522)CHECK-fail in AddManySparseToTensorsMap (CVE-2021-29523)Conv2DBackpropFilter (CVE-2021-29524)Conv2DBackpropInput (CVE-2021-29525)Conv2D (CVE-2021-29526)QuantizedConv2D (CVE-2021-29527)QuantizedMul (CVE-2021-29528)SparseMatrixSparseCholesky (CVE-2021-29530)CHECK-fail in tf.raw_ops.EncodePng (CVE-2021-29531)RaggedCross (CVE-2021-29532)CHECK-fail in DrawBoundingBoxes (CVE-2021-29533)QuantizedMul (CVE-2021-29535)CHECK-fail in SparseConcat (CVE-2021-29534)QuantizedResizeBilinear (CVE-2021-29537)QuantizedReshape (CVE-2021-29536)Conv2DBackpropFilter (CVE-2021-29538)Conv2DBackpropFilter (CVE-2021-29540)StringNGrams (CVE-2021-29542)StringNGrams (CVE-2021-29541)CHECK-fail in QuantizeAndDequantizeV4Grad (CVE-2021-29544)CHECK-fail in CTCGreedyDecoder (CVE-2021-29543)SparseTensorToCSRSparseMatrix (CVE-2021-29545)QuantizedBiasAdd (CVE-2021-29546)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29547)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29548)QuantizedAdd (CVE-2021-29549)FractionalAvgPool (CVE-2021-29550)MatrixTriangularSolve (CVE-2021-29551)QuantizeAndDequantizeV3 (CVE-2021-29553)CHECK-failure in UnsortedSegmentJoin (CVE-2021-29552)DenseCountSparseOutput (CVE-2021-29554)FusedBatchNorm (CVE-2021-29555)SparseMatMul (CVE-2021-29557)Reverse (CVE-2021-29556)SparseSplit (CVE-2021-29558)RaggedTensorToTensor (CVE-2021-29560)CHECK-fail in LoadAndRemapMatrix (CVE-2021-29561)CHECK-fail in tf.raw_ops.IRFFT (CVE-2021-29562)CHECK-fail in tf.raw_ops.RFFT (CVE-2021-29563)EditDistance (CVE-2021-29564)SparseFillEmptyRows (CVE-2021-29565)Dilation2DBackpropInput (CVE-2021-29566)ParameterizedTruncatedNormal (CVE-2021-29568)SparseDenseCwiseMul (CVE-2021-29567)MaxPoolGradWithArgmax (CVE-2021-29570)RequantizationRange (CVE-2021-29569)DrawBoundingBoxesV2 (CVE-2021-29571)SdcaOptimizer (CVE-2021-29572)tf.raw_ops.ReverseSequence (CVE-2021-29575)MaxPoolGradWithArgmax (CVE-2021-29573)MaxPool3DGradGrad (CVE-2021-29574)MaxPool3DGradGrad (CVE-2021-29576)AvgPool3DGrad (CVE-2021-29577)CHECK-fail in FractionalMaxPoolGrad (CVE-2021-29580)FractionalAvgPoolGrad (CVE-2021-29578)MaxPoolGrad (CVE-2021-29579)CTCBeamSearchDecoder (CVE-2021-29581)tf.raw_ops.Dequantize (CVE-2021-29582)CHECK-fail due to integer overflow (CVE-2021-29584)FusedBatchNorm (CVE-2021-29583)SpaceToDepth (CVE-2021-29587)GatherNd (CVE-2021-29589)TransposeConv (CVE-2021-29588)Minimum or Maximum (CVE-2021-29590)Reshape operator (CVE-2021-29592)DepthToSpace (CVE-2021-29595)EmbeddingLookup (CVE-2021-29596)BatchToSpaceNd (CVE-2021-29593)SpaceToBatchNd (CVE-2021-29597)SVDF (CVE-2021-29598)Split (CVE-2021-29599)OneHot (CVE-2021-29600)DepthwiseConv (CVE-2021-29602)RaggedTensorToTensor (CVE-2021-29608)SparseAdd (CVE-2021-29609)SparseSparseMinimum (CVE-2021-29607)SparseReshape (CVE-2021-29611)QuantizeAndDequantizeV2 (CVE-2021-29610)BandedTriangularSolve (CVE-2021-29612)tf.raw_ops.CTCLoss (CVE-2021-29613)tf.io.decode_raw (CVE-2021-29614)ParseAttrValue with nested tensors (CVE-2021-29615)TrySimplify (CVE-2021-29616)tf.transpose with complex inputs (CVE-2021-29618)tf.strings.substr due to CHECK-fail (CVE-2021-29617)tf.raw_ops.SparseCountSparseOutput (CVE-2021-29619)tf.raw_ops.ImmutableConst (CVE-2021-29539)curl to 7.76.0 to handle CVE-2020-8169, CVE-2020-8177, CVE-2020-8231, CVE-2020-8284, CVE-2020-8285 and CVE-2020-8286.Other
show_debug_info to mlir.convert_graph_def and mlir.convert_function.--config=mkl_aarch64 build.This release contains contributions from many people at Google, as well as:
8bitmp3, Aaron S. Mondal, Abhilash Mahendrakar, Abhinav Upadhyay, Abhishek Kulkarni, Abolfazl Shahbazi, Adam Hillier, Aditya Kane, Ag Ramesh, ahmedsabie, Albert Villanova Del Moral, Aleksey Vitebskiy, Alex Hoffman, Alexander Bayandin, Alfie Edwards, Aman Kishore, Amogh Joshi, andreABbauer, Andrew Goodbody, Andrzej Pomirski, Artemiy Ryabinkov, Ashish Jha, ather, Ayan Moitra, Bairen Yi, Bart Ribbers, Bas Aarts, Behzad Abghari, Ben Arnao, Ben Barsdell, Benjamin Klimczak, bhack, Brendan Collins, Can Wang, Cheng Ren, Chris Leary, Chris Olivier, Clemens Giuliani, Cloud Han, Corey Cole, Cui, Yifeng, Cuong V. Nguyen, Daniel Moore, Dawid Wojciechowski, Ddavis-2015, Dean Wyatte, Denisa Roberts, dependabot[bot], Dmitry Volodin, Dominic Jack, Duncan Riach, dushuai, Elena Zhelezina, Eli Osherovich, Erik Smistad, ewsn1593, Felix Fent, fo40225, François Chollet, Frederic Bastien, Freedom" Koan-Sin Tan, fsx950223, ganand1, gbaned, Georgiy Manuilov, gerbauz, Guillaume Klein, Guozhong Zhuang, Harry Slatyer, Harsh188, henri, Henri Woodcock, Hiran Sarkar, Hollow Man, Håkon Sandsmark, I Wayan Dharmana, icysapphire, Ikko Ashimine, Jab Hofmeier, Jack Hessel, Jacob Valdez, Jakub Jatczak, James Bernardi, Jared Smolens, Jason Zaman, jedlimlx, Jenny Plunkett, Jens Elofsson, Jerry Shih, jgehw, Jia Fu Low, Jim Fisher, jpodivin, Julien Stephan, Jungsub Lim, Junha Park, Junhyuk So, justkw, Kaixi Hou, kashyapraval, Kasra Bigdeli, Kazuaki Ishizaki, Keith Mok, Kevin Cheng, kopytjuk, Kristian Hartikainen, ksood12345, Kulin Seth, kushanam, latyas, Lequn Chen, Leslie-Fang, Long M. Lưu, Lukas Geiger, machineko, Mahmoud Abuzaina, Manish, Mao Yunfei, Maozhou, Ge, Marcin Juszkiewicz, Marcin Owsiany, Marconi Jiang, Marcos Pereira, Maria Romanenko Vexlard, Maria Vexlard, Marius Brehler, marload, Martin Kubovčík, Matej, Mateusz Holenko, Maxiwell S. Garcia, Mazhar, mazharul, mbhuiyan, mdfaijul, Michael Gielda, Michael Kuchnik, Michal Szutenberg, Mikhail Stepanov, Milan Straka, Mitchel Humpherys, Mohamed Moselhy, Mohamed Nour Abouelseoud, Måns Bermell, Måns Nilsson, Nathan Luehr, Nico Jahn, Niroop Ammbashankar, Oceania2018, Omri Steiner, Orivej Desh, Oskar Flordal, oujiafan, Patrik Laurell, Paul B. Isaac'S, Paul Klinger, Pawel Piskorski, Pedro Marques, Phat Tran, Piotr Zierhoffer, piyushdatta, Pnikam-Cad, Prashant Kumar, Prateek Gupta, PratsBhatt, Pravin Karandikar, qqq.jq, QQ喵, Quintin, Rama Ketineni, ravikyram, Rehan Guha, rhdong, rmothukuru, Roger Cheng, Rohit Santhanam, rposts, Rsanthanam-Amd, rsun, Rsun-Bdti, Ryan Kuester, ryanking13, Saduf2019, Sami Kama, Samuel Marks, Scott Tseng, Sean Moriarity, Sergey Popov, Sergii Khomenko, Sheng, Yang, shwetaoj, Sidong-Wei, Simon Maurer, Simrit Kaur, Srini511, Srinivasan Narayanamoorthy, Stephan, Stephen Matthews, Sungmann Cho, Sunoru, Suraj Sudhir, Suraj Upadhyay, Taebum Kim, Takayoshi Koizumi, Tamas Bela Feher, Teng Lu, Thibaut Goetghebuer-Planchon, Tomwildenhain-Microsoft, Tony, Traun Leyden, Trent Lo, TVLIgnacy, Tzu-Wei Sung, vaibhav, Vignesh Kothapalli, Vikram Dattu, viktprog, Vinayaka Bandishti, Vincent Abriou, Vishakha Agrawal, Vivek Panyam, Vladimir Silyaev, Võ Văn Nghĩa, wamuir, Wang, Yanzhang, wangsiyu, Waqar Hameed, wxinix, Xiao Yang, xiaohong1031, Xiaoming (Jason) Cui, Xinan Jiang, Yair Ehrenwald, Yajush Vyas, Yasir Modak, Yimei Sun, Yong Tang, Yosshi999, youshenmebutuo, yqtianust, Yuan Tang, yuanbopeng, Yuriy Chernyshov, Yuta Fukasawa, Zachary Deane-Mayer, Zeno Gantner, Zhoulong Jiang, zhuyie, zilinzhu, 彭震东
This release introduces several vulnerability fixes:
NOTE: This is the last release in the 2.4.x line
This release introduces several vulnerability fixes:
saved_model_cli (CVE-2021-41228)FusedBatchNorm kernels (CVE-2021-41223)ImmutableConst (CVE-2021-41227)SparseBinCount (CVE-2021-41226)SparseFillEmptyRows (CVE-2021-41224)SplitV (CVE-2021-41222)Cudnn* ops (CVE-2021-41221)Exit node is not preceded by Enter op (CVE-2021-41217)tf.raw_ops.AllToAll (CVE-2021-41218)nullptr reference binding in sparse matrix multiplication (CVE-2021-41219)Transpose (CVE-2021-41216)tf.function objects (CVE-2021-41213)DeserializeSparse (CVE-2021-41215)nullptr in tf.ragged.cross (CVE-2021-41214)tf.ragged.cross (CVE-2021-41212)tf.raw_ops.QuantizeAndDequantizeV* ops (CVE-2021-41205)ParallelConcat (CVE-2021-41207)tf.raw_ops.SparseCountSparseOutput (CVE-2021-41210)EinsumHelper::ParseEquation (CVE-2021-41201)tf.range (CVE-2021-41202)tf.image.resize when size is large (CVE-2021-41199)tf.tile when tiling tensor is large (CVE-2021-41198)tf.summary.create_file_writer (CVE-2021-41200)CHECK-fail in ops with large tensor shapes (CVE-2021-41197)max_pool3d when size argument is 0 or negative (CVE-2021-41196)tf.math.segment_* operations (CVE-2021-41195)curl to 7.78.0 to handle CVE-2021-22922, CVE-2021-22923, CVE-2021-22924, CVE-2021-22925, and CVE-2021-22926.This release introduces several vulnerability fixes:
This release introduces several vulnerability fixes:
SparseDenseCwiseDiv (CVE-2021-37636)CompressElement (CVE-2021-37637)RaggedTensorToTensor (CVE-2021-37638)ResourceScatterDiv (CVE-2021-37642)RaggedGather (CVE-2021-37641)std::abort raised from TensorListReserve (CVE-2021-37644)MatrixDiagPartOp (CVE-2021-37643)StringNGrams caused by integer conversion (CVE-2021-37646)SparseTensorSliceDataset (CVE-2021-37647)SaveV2 inputs (CVE-2021-37648)UncompressElement (CVE-2021-37649){Experimental,}DatasetToTFRecord (CVE-2021-37650)FractionalAvgPoolGrad (CVE-2021-37651)ResourceGather (CVE-2021-37653)CHECK fail in ResourceGather (CVE-2021-37654)ResourceScatterUpdate (CVE-2021-37655)RaggedTensorToSparse (CVE-2021-37656)MatrixDiagV* ops (CVE-2021-37657)MatrixSetDiagV* ops (CVE-2021-37658)QuantizeV2 (CVE-2021-37663)RaggedTensorToVariant (CVE-2021-37666)tf.raw_ops.UnravelIndex (CVE-2021-37668)UpperBound and LowerBound (CVE-2021-37670)SdcaOptimizerV2 (CVE-2021-37672)CHECK-fail in MapStage (CVE-2021-37673)MaxPoolGrad (CVE-2021-37674)Dequantize (CVE-2021-37677)tf.map_fn with RaggedTensors (CVE-2021-37679)Gather* implementations (CVE-2021-37687)curl to 7.77.0 to handle CVE-2021-22876, CVE-2021-22897, CVE-2021-22898, and CVE-2021-22901.This release introduces several vulnerability fixes:
This release introduces several vulnerability fixes:
RaggedBinCount (CVE-2021-29512)RaggedBinCount (CVE-2021-29514)MatrixDiag* ops (CVE-2021-29515)Conv3D (CVE-2021-29517)CHECK-fail in SparseCross caused by type confusion (CVE-2021-29519)SparseCountSparseOutput (CVE-2021-29521)Conv3DBackprop* (CVE-2021-29520)Conv3DBackprop* (CVE-2021-29522)CHECK-fail in AddManySparseToTensorsMap (CVE-2021-29523)Conv2DBackpropFilter (CVE-2021-29524)Conv2DBackpropInput (CVE-2021-29525)Conv2D (CVE-2021-29526)QuantizedConv2D (CVE-2021-29527)QuantizedMul (CVE-2021-29528)SparseMatrixSparseCholesky (CVE-2021-29530)CHECK-fail in tf.raw_ops.EncodePng (CVE-2021-29531)RaggedCross (CVE-2021-29532)CHECK-fail in DrawBoundingBoxes (CVE-2021-29533)QuantizedMul (CVE-2021-29535)CHECK-fail in SparseConcat (CVE-2021-29534)QuantizedResizeBilinear (CVE-2021-29537)QuantizedReshape (CVE-2021-29536)Conv2DBackpropFilter (CVE-2021-29538)Conv2DBackpropFilter (CVE-2021-29540)StringNGrams (CVE-2021-29542)StringNGrams (CVE-2021-29541)CHECK-fail in QuantizeAndDequantizeV4Grad (CVE-2021-29544)CHECK-fail in CTCGreedyDecoder (CVE-2021-29543)SparseTensorToCSRSparseMatrix (CVE-2021-29545)QuantizedBiasAdd (CVE-2021-29546)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29547)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29548)QuantizedAdd (CVE-2021-29549)FractionalAvgPool (CVE-2021-29550)MatrixTriangularSolve (CVE-2021-29551)QuantizeAndDequantizeV3 (CVE-2021-29553)CHECK-failure in UnsortedSegmentJoin (CVE-2021-29552)DenseCountSparseOutput (CVE-2021-29554)FusedBatchNorm (CVE-2021-29555)SparseMatMul (CVE-2021-29557)Reverse (CVE-2021-29556)SparseSplit (CVE-2021-29558)RaggedTensorToTensor (CVE-2021-29560)CHECK-fail in LoadAndRemapMatrix (CVE-2021-29561)CHECK-fail in tf.raw_ops.IRFFT (CVE-2021-29562)CHECK-fail in tf.raw_ops.RFFT (CVE-2021-29563)EditDistance (CVE-2021-29564)SparseFillEmptyRows (CVE-2021-29565)Dilation2DBackpropInput (CVE-2021-29566)ParameterizedTruncatedNormal (CVE-2021-29568)SparseDenseCwiseMul (CVE-2021-29567)MaxPoolGradWithArgmax (CVE-2021-29570)RequantizationRange (CVE-2021-29569)DrawBoundingBoxesV2 (CVE-2021-29571)SdcaOptimizer (CVE-2021-29572)tf.raw_ops.ReverseSequence (CVE-2021-29575)MaxPoolGradWithArgmax (CVE-2021-29573)MaxPool3DGradGrad (CVE-2021-29574)MaxPool3DGradGrad (CVE-2021-29576)AvgPool3DGrad (CVE-2021-29577)CHECK-fail in FractionalMaxPoolGrad (CVE-2021-29580)FractionalAvgPoolGrad (CVE-2021-29578)MaxPoolGrad (CVE-2021-29579)CTCBeamSearchDecoder (CVE-2021-29581)tf.raw_ops.Dequantize (CVE-2021-29582)CHECK-fail due to integer overflow (CVE-2021-29584)FusedBatchNorm (CVE-2021-29583)SpaceToDepth (CVE-2021-29587)GatherNd (CVE-2021-29589)TransposeConv (CVE-2021-29588)Minimum or Maximum (CVE-2021-29590)Reshape operator (CVE-2021-29592)DepthToSpace (CVE-2021-29595)EmbeddingLookup (CVE-2021-29596)BatchToSpaceNd (CVE-2021-29593)SpaceToBatchNd (CVE-2021-29597)SVDF (CVE-2021-29598)Split (CVE-2021-29599)OneHot (CVE-2021-29600)DepthwiseConv (CVE-2021-29602)RaggedTensorToTensor (CVE-2021-29608)SparseAdd (CVE-2021-29609)SparseSparseMinimum (CVE-2021-29607)SparseReshape (CVE-2021-29611)QuantizeAndDequantizeV2 (CVE-2021-29610)BandedTriangularSolve (CVE-2021-29612)tf.raw_ops.CTCLoss (CVE-2021-29613)tf.io.decode_raw (CVE-2021-29614)ParseAttrValue with nested tensors (CVE-2021-29615)TrySimplify (CVE-2021-29616)tf.transpose with complex inputs (CVE-2021-29618)tf.strings.substr due to CHECK-fail (CVE-2021-29617)tf.raw_ops.SparseCountSparseOutput (CVE-2021-29619)tf.raw_ops.ImmutableConst (CVE-2021-29539)curl to 7.76.0 to handle CVE-2020-8169, CVE-2020-8177, CVE-2020-8231, CVE-2020-8284, CVE-2020-8285 and CVE-2020-8286.This release removes the AVX2 requirement from TF 2.4.0.
This release removes the AVX2 requirement from TF 2.4.0.
Fixes an undefined behavior causing a segfault in tf.raw_ops.Switch, (CVE-2020-15190)
tf.distribute introduces experimental support for asynchronous training of models via the tf.distribute.experimental.ParameterServerStrategy API. Please see the tutorial to learn more.
MultiWorkerMirroredStrategy is now a stable API and is no longer considered experimental. Some of the major improvements involve handling peer failure and many bug fixes. Please check out the detailed tutorial on Multi-worker training with Keras.
Introduces experimental support for a new module named tf.experimental.numpy which is a NumPy-compatible API for writing TF programs. See the detailed guide to learn more. Additional details below.
Adds Support for TensorFloat-32 on Ampere based GPUs. TensorFloat-32, or TF32 for short, is a math mode for NVIDIA Ampere based GPUs and is enabled by default.
A major refactoring of the internals of the Keras Functional API has been completed, that should improve the reliability, stability, and performance of constructing Functional models.
Keras mixed precision API tf.keras.mixed_precision is no longer experimental and allows the use of 16-bit floating point formats during training, improving performance by up to 3x on GPUs and 60% on TPUs. Please see below for additional details.
TensorFlow Profiler now supports profiling MultiWorkerMirroredStrategy and tracing multiple workers using the sampling mode API.
TFLite Profiler for Android is available. See the detailed guide to learn more.
TensorFlow pip packages are now built with CUDA11 and cuDNN 8.0.2.
TF Core:
tf.config.experimental.enable_tensor_float_32_execution(False).tensorflow::tstring/TF_TStrings.TF_StringDecode, TF_StringEncode, and TF_StringEncodedSize are no longer relevant and have been removed; see core/platform/ctstring.h for string access/modification in C.tensorflow.python, tensorflow.core and tensorflow.compiler modules are now hidden. These modules are not part of TensorFlow public API.tf.raw_ops.Max and tf.raw_ops.Min no longer accept inputs of type tf.complex64 or tf.complex128, because the behavior of these ops is not well defined for complex types.TF_XLA_FLAGS=--tf_xla_enable_xla_devices if you really need them, but this flag will eventually be removed in subsequent releases.tf.keras:
steps_per_execution argument in model.compile() is no longer experimental; if you were passing experimental_steps_per_execution, rename it to steps_per_execution in your code. This argument controls the number of batches to run during each tf.function call when calling model.fit(). Running multiple batches inside a single tf.function call can greatly improve performance on TPUs or small models with a large Python overhead.isinstance(x, tf.Tensor) instead of tf.is_tensor when checking Keras symbolic inputs/outputs should switch to using tf.is_tensor.tensor.ref(), etc.) may break.get_concrete_function to trace Keras symbolic inputs directly should switch to building matching tf.TensorSpecs directly and tracing the TensorSpec objects.tf.map_fn/tf.cond/tf.while_loop/control flow as op layers and happens to work before TF 2.4. These will explicitly be unsupported now. Converting these ops to Functional API op layers was unreliable before TF 2.4, and prone to erroring incomprehensibly or being silently buggy.tf.rank used to return a static or symbolic value depending on if the input had a fully static shape or not. Now these ops always return symbolic values.GradientTape on the actual Tensors passed to the already-constructed model instead.tf.keras.Model layer by layer and assumes layers only ever have one positional argument. This assumption doesn't hold true before TF 2.4 either, but is more likely to cause issues now.keras.backend.get_graph() before building a functional model is no longer needed.Input objects in a Functional model, and the shape of the data passed to that model. You can fix this mismatch by either calling the model with correctly-shaped data, or by relaxing Input shape assumptions (note that you can pass shapes with None entries for axes
that are meant to be dynamic). You can also disable the input checking entirely by setting model.input_spec = None.tf.keras.mixed_precision.experimental. Note that it is now recommended to use the non-experimental tf.keras.mixed_precision API.AutoCastVariable.dtype now refers to the actual variable dtype, not the dtype it will be casted to.tf.keras.layers.Embedding now outputs a float16 or bfloat16 tensor instead of a float32 tensor.tf.keras.mixed_precision.experimental.LossScaleOptimizer.loss_scale is now a tensor, not a LossScale object. This means to get a loss scale of a LossScaleOptimizer as a tensor, you must now call opt.loss_scaleinstead of opt.loss_scale().should_cast_variables has been removed from tf.keras.mixed_precision.experimental.Policytf.mixed_precision.experimental.DynamicLossScale to tf.keras.mixed_precision.experimental.LossScaleOptimizer, the DynamicLossScale's multiplier must be 2.tf.mixed_precision.experimental.DynamicLossScale to tf.keras.mixed_precision.experimental.LossScaleOptimizer, the weights of
the DynanmicLossScale are copied into the LossScaleOptimizer instead of being reused. This means modifying the weights of the DynamicLossScale will no longer affect the weights of the LossScaleOptimizer, and vice versa.tf.keras.mixed_precision.experimental.set_policyLayer.call, AutoCastVariables will no longer be casted within MirroredStrategy.run or ReplicaContext.merge_call. This is because a thread local variable is used to determine whether AutoCastVariables are casted, and those two functions run with a different thread. Note this only applies if one of these two functions is called within Layer.call; if one of those two functions calls Layer.call, AutoCastVariables will still be casted.tf.data:
tf.data.experimental.service.DispatchServer now takes a config tuple instead of individual arguments. Usages should be updated to tf.data.experimental.service.DispatchServer(dispatcher_config).tf.data.experimental.service.WorkerServer now takes a config tuple instead of individual arguments. Usages should be updated to tf.data.experimental.service.WorkerServer(worker_config).tf.distribute:
tf.distribute.Strategy.experimental_make_numpy_dataset. Please use tf.data.Dataset.from_tensor_slices instead.experimental_hints in tf.distribute.StrategyExtended.reduce_to, tf.distribute.StrategyExtended.batch_reduce_to, tf.distribute.ReplicaContext.all_reduce to options.tf.distribute.experimental.CollectiveHints to tf.distribute.experimental.CommunicationOptions.tf.distribute.experimental.CollectiveCommunication to tf.distribute.experimental.CommunicationImplementation.tf.distribute.Strategy.experimental_distribute_datasets_from_function to distribute_datasets_from_function as it is no longer experimental.tf.distribute.Strategy.experimental_run_v2 method, which was deprecated in TF 2.2.tf.lite:
tf.quantization.quantize_and_dequantize_v2 has been introduced, which updates the gradient definition for quantization which is outside the range
to be 0. To simulate the V1 the behavior of tf.quantization.quantize_and_dequantize(...) use tf.grad_pass_through(tf.quantization.quantize_and_dequantize_v2)(...).Building TensorFlow:
--copt=/experimental:preprocessor --host_copt=/experimental:preprocessor (see .bazelrc for more details). Builds including TensorFlow may fail with unexpected syntax errors if these flags are absent. See also this thread on SIG Build.tf.keras.mixed_precision
RMSprop.apply_gradients or Nadam.apply_gradients outside a tf.function does not work and will raise the AttributeError "Tensor.op is meaningless when eager execution is enabled". See this issue for details and a workaround.tf.experimental.numpy, which
is a NumPy-compatible API for writing TF programs. This module provides class ndarray, which mimics the ndarray class in NumPy, and wraps an immutable tf.Tensor under the hood. A subset of NumPy functions (e.g. numpy.add) are provided. Their inter-operation with TF facilities is seamless in most cases.
See tensorflow/python/ops/numpy_ops/README.md
for details of what operations are supported and what are the differences from NumPy.tf.types.experimental.TensorLike is a new Union type that can be used as type annotation for variables representing a Tensor or a value
that can be converted to Tensor by tf.convert_to_tensor.tf.sparse.map_values to apply a function to the .values of SparseTensor arguments.Tensor (__and__, __or__, __xor__ and __invert__ now support non-bool arguments and apply
the corresponding bitwise ops. bool arguments continue to be supported and dispatch to logical ops. This brings them more in line with
Python and NumPy behavior.tf.SparseTensor.with_values. This returns a new SparseTensor with the same sparsity pattern, but with new provided values. It is
similar to the with_values function of RaggedTensor.StatelessCase op, and uses it if none of case branches has stateful ops.tf.config.experimental.get_memory_usage to return total memory usage of the device.RaggedTensorToVariant and RaggedTensorFromVariant.tf.debugging:
tf.debugging.assert_shapes() now works on SparseTensors (Fixes #36268).tf.config.experimental.enable_tensor_float_32_execution.tf.math:
tf.math.erfcinv, the inverse to tf.math.erfc.tf.nn:
tf.nn.max_pool2d now supports explicit padding.tf.image:
tf.image.stateless_random_* functions for each tf.image.random_* function. Added a new op stateless_sample_distorted_bounding_box which is a deterministic version of sample_distorted_bounding_box op. Given the same seed, these stateless functions/ops produce the same results independent of how many times the function is called, and independent of global seed settings.tf.image.resize backprop CUDA kernels for method=ResizeMethod.BILINEAR (the default method). Enable by setting the environment variable TF_DETERMINISTIC_OPS to "true" or "1".tf.print:
tf.print() with OrderedDict where if an OrderedDict didn't have the keys sorted, the keys and values were not being printed
in accordance with their correct mapping.tf.train.Checkpoint:
root argument in the initialization, which generates a checkpoint with a root object. This allows users to create a Checkpoint object that is compatible with Keras model.save_weights() and model.load_weights. The checkpoint is also compatible with the checkpoint saved in the variables/ folder in the SavedModel.save_path can be a path to a SavedModel. The function will automatically find the checkpoint in the SavedModel.tf.data:tf.data.experimental.service.register_dataset and tf.data.experimental.service.from_dataset_id APIs to enable one
process to register a dataset with the tf.data service, and another process to consume data from the dataset.work_dir when running your dispatcher server and set
dispatcher_fault_tolerance=True. The dispatcher will store its state to work_dir, so that on restart it can continue from its previous
state after restart.work_dir must be accessible from workers. If the worker fails to read from the
work_dir, it falls back to using RPC for dataset graph transfer.exclude_cols parameter to CsvDataset. This parameter is the complement of select_cols; at most one of these should be specified.take and shard to happen earlier in the dataset when it is safe to do so. The optimization can be disabled via the experimental_optimization.reorder_data_discarding_ops dataset option.tf.data.Options were previously immutable and can now be overridden.tf.data.Dataset.from_generator now supports Ragged and Sparse tensors with a new output_signature argument, which allows from_generator to
produce any type describable by a tf.TypeSpec.tf.data.experimental.AUTOTUNE is now available in the core API as tf.data.AUTOTUNE.tf.distribute:tf.distribute.experimental.ParameterServerStrategy:
tf.distribute.experimental.ParameterServerStrategy symbol with a new class that is for parameter server training in TF2. Usage of
the old symbol, usually with Estimator API, should be replaced with [tf.compat.v1.distribute.experimental.ParameterServerStrategy].tf.distribute.experimental.coordinator.* namespace, including the main API ClusterCoordinator for coordinating the training cluster, the related data structure RemoteValue and PerWorkerValue.MultiWorkerMirroredStrategy](https://www.tensorflow.org/api_docs/python/tf/distribute/MultiWorkerMirroredStrategy) is now a stable API and is no longer considered experimental. Some of the major improvements involve handling peer failure and many bug fixes. Please check out the detailed tutorial on
Multi-worer training with Keras.tf.distribute.Strategy.gather and tf.distribute.ReplicaContext.all_gather APIs to support gathering dense distributed values.tf.keras:tf.image.ssim_multiscaleOptimizer.minimize can now accept a loss Tensor and a GradientTape as an alternative to accepting a callable loss.beta hyperparameter to FTRL optimizer classes (Keras and others) to match FTRL paper.Optimizer.__init__ now accepts a gradient_aggregator to allow for customization of how gradients are aggregated across devices, as well as gradients_transformers to allow for custom gradient transformations (such as gradient clipping).Attention and AdditiveAttention layers, the call() method now accepts a return_attention_scores argument. When set to
True, the layer returns the attention scores as an additional output argument.tf.metrics.log_cosh and tf.metrics.logcosh API entrypoints with the same implementation as their tf.losses equivalent.Model.evaluate uses no cached data for evaluation, while Model.fit uses cached data when validation_data arg is provided for better performance.save_traces argument to model.save/ tf.keras.models.save_model which determines whether the SavedModel format stores the Keras model/layer call functions. The traced functions allow Keras to revive custom models and layers without the original class definition, but if this isn't required the tracing can be disabled with the added option.tf.keras.mixed_precision API is now non-experimental. The non-experimental API differs from the experimental API in several ways.
tf.keras.mixed_precision.Policy no longer takes in a tf.mixed_precision.experimental.LossScale in the constructor, and no longer has a LossScale associated with it. Instead, Model.compile will automatically wrap the optimizer with a LossScaleOptimizer using dynamic loss scaling if Policy.name is "mixed_float16".tf.keras.mixed_precision.LossScaleOptimizer's constructor takes in different arguments. In particular, it no longer takes in a LossScale, and there is no longer a LossScale associated with the LossScaleOptimizer. Instead, LossScaleOptimizer directly implements fixed or dynamic loss scaling. See the documentation of tf.keras.mixed_precision.experimental.LossScaleOptimizer for details on the differences between the experimental LossScaleOptimizer and the new non-experimental LossScaleOptimizer.tf.mixed_precision.experimental.LossScale and its subclasses are deprecated, as all of its functionality now exists within tf.keras.mixed_precision.LossScaleOptimizertf.lite:TFLiteConverter:
inference_input_type and inference_output_type for full integer quantized models. This allows users to modify the model input and output type to integer types (tf.int8, tf.uint8) instead of defaulting to float type (tf.float32).Interpreter.setUseNNAPI(boolean) Java API. Use Interpreter.Options.setUseNNAPI instead.Interpreter::UseNNAPI(bool) C++ API. Use NnApiDelegate() and related delegate configuration methods directly.Interpreter::SetAllowFp16PrecisionForFp32(bool) C++ API. Prefer controlling this via delegate options, e.g. tflite::StatefulNnApiDelegate::Options::allow_fp16' or TfLiteGpuDelegateOptionsV2::is_precision_loss_allowed`.DynamicBuffer::AddJoinedString() will now add a separator if the first string to be joined is empty.TensorRTsession_config parameter for the TF1 converter is used or the rewrite_config_template field in the TF2
converter parameter object is used.beta parameter of the FTRL optimizer for TPU embeddings. Users of other TensorFlow platforms can implement equivalent
behavior by adjusting the l2 parameter.tf.function(experimental_compile=True) instead.tf.function.experimental_get_compiler_ir which returns compiler IR (currently 'hlo' and 'optimized_hlo') for given input for given function.tf.raw_ops.Switch, (CVE-2020-15190)SparseFillEmptyRowsGrad
RaggedCountSparseOutput and SparseCountSparseOutput operations
tf.strings.as_string, (CVE-2020-15203)tf.raw_ops.StringNGrams, (CVE-2020-15205)SavedModel validation, (CVE-2020-15206)tf.quantization.quantize_and_dequantize, (CVE-2020-15265)tf.raw_ops.DataFormatVecPermute and tf.raw_ops.DataFormatDimMap which can cause uninitialized memory access, read outside bounds of arrays, data corruption and segmentation faults (CVE-2020-26267)tf.config.experimental.mlir_bridge_rollout which will help us rollout the new MLIR TPU bridge.tf.experimental.register_filesystem_plugin to load modular filesystem plugins from PythonThis release contains contributions from many people at Google as well as the following external contributors:
8bitmp3, aaa.jq, Abhineet Choudhary, Abolfazl Shahbazi, acxz, Adam Hillier, Adrian Garcia Badaracco, Ag Ramesh, ahmedsabie, Alan Anderson, Alexander Grund, Alexandre Lissy, Alexey Ivanov, Amedeo Cavallo, anencore94, Aniket Kumar Singh, Anthony Platanios, Ashwin Phadke, Balint Cristian, Basit Ayantunde, bbbboom, Ben Barsdell, Benjamin Chetioui, Benjamin Peterson, bhack, Bhanu Prakash Bandaru Venkata, Biagio Montaruli, Brent M. Spell, bubblebooy, bzhao, cfRod, Cheng Chen, Cheng(Kit) Chen, Chris Tessum, Christian, chuanqiw, codeadmin_peritiae, COTASPAR, CuiYifeng, danielknobe, danielyou0230, dannyfriar, daria, DarrenZhang01, Denisa Roberts, dependabot[bot], Deven Desai, Dmitry Volodin, Dmitry Zakharov, drebain, Duncan Riach, Eduard Feicho, Ehsan Toosi, Elena Zhelezina, emlaprise2358, Eugene Kuznetsov, Evaderan-Lab, Evgeniy Polyakov, Fausto Morales, Felix Johnny, fo40225, Frederic Bastien, Fredrik Knutsson, fsx950223, Gaurav Singh, Gauri1 Deshpande, George Grzegorz Pawelczak, gerbauz, Gianluca Baratti, Giorgio Arena, Gmc2, Guozhong Zhuang, Hannes Achleitner, Harirai, HarisWang, Harsh188, hedgehog91, Hemal Mamtora, Hideto Ueno, Hugh Ku, Ian Beauregard, Ilya Persky, jacco, Jakub Beránek, Jan Jongboom, Javier Montalt Tordera, Jens Elofsson, Jerry Shih, jerryyin, jgehw, Jinjing Zhou, jma, jmsmdy, Johan Nordström, John Poole, Jonah Kohn, Jonathan Dekhtiar, jpodivin, Jung Daun, Kai Katsumata, Kaixi Hou, Kamil Rakoczy, Kaustubh Maske Patil, Kazuaki Ishizaki, Kedar Sovani, Koan-Sin Tan, Koki Ibukuro, Krzysztof Laskowski, Kushagra Sharma, Kushan Ahmadian, Lakshay Tokas, Leicong Li, levinxo, Lukas Geiger, Maderator, Mahmoud Abuzaina, Mao Yunfei, Marius Brehler, markf, Martin Hwasser, Martin Kubovčík, Matt Conley, Matthias, mazharul, mdfaijul, Michael137, MichelBr, Mikhail Startsev, Milan Straka, Ml-0, Myung-Hyun Kim, Måns Nilsson, Nathan Luehr, ngc92, nikochiko, Niranjan Hasabnis, nyagato_00, Oceania2018, Oleg Guba, Ongun Kanat, OscarVanL, Patrik Laurell, Paul Tanger, Peter Sobot, Phil Pearl, PlusPlusUltra, Poedator, Prasad Nikam, Rahul-Kamat, Rajeshwar Reddy T, redwrasse, Rickard, Robert Szczepanski, Rohan Lekhwani, Sam Holt, Sami Kama, Samuel Holt, Sandeep Giri, sboshin, Sean Settle, settle, Sharada Shiddibhavi, Shawn Presser, ShengYang1, Shi,Guangyong, Shuxiang Gao, Sicong Li, Sidong-Wei, Srihari Humbarwadi, Srinivasan Narayanamoorthy, Steenu Johnson, Steven Clarkson, stjohnso98, Tamas Bela Feher, Tamas Nyiri, Tarandeep Singh, Teng Lu, Thibaut Goetghebuer-Planchon, Tim Bradley, Tomasz Strejczek, Tongzhou Wang, Torsten Rudolf, Trent Lo, Ty Mick, Tzu-Wei Sung, Varghese, Jojimon, Vignesh Kothapalli, Vishakha Agrawal, Vividha, Vladimir Menshakov, Vladimir Silyaev, VoVAllen, Võ Văn Nghĩa, wondertx, xiaohong1031, Xiaoming (Jason) Cui, Xinan Jiang, Yair Ehrenwald, Yasir Modak, Yasuhiro Matsumoto, Yimei Sun, Yiwen Li, Yixing, Yoav Ramon, Yong Tang, Yong Wu, yuanbopeng, Yunmo Koo, Zhangqiang, Zhou Peng, ZhuBaohe, zilinzhu, zmx
This release introduces several vulnerability fixes:
NOTE: This is the last release in the 2.3.x line
This release introduces several vulnerability fixes:
SparseDenseCwiseDiv (CVE-2021-37636)CompressElement (CVE-2021-37637)RaggedTensorToTensor (CVE-2021-37638)ResourceScatterDiv (CVE-2021-37642)RaggedGather (CVE-2021-37641)std::abort raised from TensorListReserve (CVE-2021-37644)MatrixDiagPartOp (CVE-2021-37643)StringNGrams caused by integer conversion (CVE-2021-37646)SparseTensorSliceDataset (CVE-2021-37647)SaveV2 inputs (CVE-2021-37648)UncompressElement (CVE-2021-37649){Experimental,}DatasetToTFRecord (CVE-2021-37650)FractionalAvgPoolGrad (CVE-2021-37651)ResourceGather (CVE-2021-37653)CHECK fail in ResourceGather (CVE-2021-37654)ResourceScatterUpdate (CVE-2021-37655)RaggedTensorToSparse (CVE-2021-37656)MatrixDiagV* ops (CVE-2021-37657)MatrixSetDiagV* ops (CVE-2021-37658)QuantizeV2 (CVE-2021-37663)RaggedTensorToVariant (CVE-2021-37666)tf.raw_ops.UnravelIndex (CVE-2021-37668)UpperBound and LowerBound (CVE-2021-37670)SdcaOptimizerV2 (CVE-2021-37672)CHECK-fail in MapStage (CVE-2021-37673)MaxPoolGrad (CVE-2021-37674)Dequantize (CVE-2021-37677)tf.map_fn with RaggedTensors (CVE-2021-37679)Gather* implementations (CVE-2021-37687)curl to 7.77.0 to handle CVE-2021-22876, CVE-2021-22897, CVE-2021-22898, and CVE-2021-22901.This release introduces several vulnerability fixes:
This release introduces several vulnerability fixes:
RaggedBinCount (CVE-2021-29512)RaggedBinCount (CVE-2021-29514)MatrixDiag* ops (CVE-2021-29515)Conv3D (CVE-2021-29517)CHECK-fail in SparseCross caused by type confusion (CVE-2021-29519)SparseCountSparseOutput (CVE-2021-29521)Conv3DBackprop* (CVE-2021-29520)Conv3DBackprop* (CVE-2021-29522)CHECK-fail in AddManySparseToTensorsMap (CVE-2021-29523)Conv2DBackpropFilter (CVE-2021-29524)Conv2DBackpropInput (CVE-2021-29525)Conv2D (CVE-2021-29526)QuantizedConv2D (CVE-2021-29527)QuantizedMul (CVE-2021-29528)SparseMatrixSparseCholesky (CVE-2021-29530)CHECK-fail in tf.raw_ops.EncodePng (CVE-2021-29531)RaggedCross (CVE-2021-29532)CHECK-fail in DrawBoundingBoxes (CVE-2021-29533)QuantizedMul (CVE-2021-29535)CHECK-fail in SparseConcat (CVE-2021-29534)QuantizedResizeBilinear (CVE-2021-29537)QuantizedReshape (CVE-2021-29536)Conv2DBackpropFilter (CVE-2021-29538)Conv2DBackpropFilter (CVE-2021-29540)StringNGrams (CVE-2021-29542)StringNGrams (CVE-2021-29541)CHECK-fail in QuantizeAndDequantizeV4Grad (CVE-2021-29544)CHECK-fail in CTCGreedyDecoder (CVE-2021-29543)SparseTensorToCSRSparseMatrix (CVE-2021-29545)QuantizedBiasAdd (CVE-2021-29546)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29547)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29548)QuantizedAdd (CVE-2021-29549)FractionalAvgPool (CVE-2021-29550)MatrixTriangularSolve (CVE-2021-29551)QuantizeAndDequantizeV3 (CVE-2021-29553)CHECK-failure in UnsortedSegmentJoin (CVE-2021-29552)DenseCountSparseOutput (CVE-2021-29554)FusedBatchNorm (CVE-2021-29555)SparseMatMul (CVE-2021-29557)Reverse (CVE-2021-29556)SparseSplit (CVE-2021-29558)RaggedTensorToTensor (CVE-2021-29560)CHECK-fail in LoadAndRemapMatrix (CVE-2021-29561)CHECK-fail in tf.raw_ops.IRFFT (CVE-2021-29562)CHECK-fail in tf.raw_ops.RFFT (CVE-2021-29563)EditDistance (CVE-2021-29564)SparseFillEmptyRows (CVE-2021-29565)Dilation2DBackpropInput (CVE-2021-29566)ParameterizedTruncatedNormal (CVE-2021-29568)SparseDenseCwiseMul (CVE-2021-29567)MaxPoolGradWithArgmax (CVE-2021-29570)RequantizationRange (CVE-2021-29569)DrawBoundingBoxesV2 (CVE-2021-29571)SdcaOptimizer (CVE-2021-29572)tf.raw_ops.ReverseSequence (CVE-2021-29575)MaxPoolGradWithArgmax (CVE-2021-29573)MaxPool3DGradGrad (CVE-2021-29574)MaxPool3DGradGrad (CVE-2021-29576)AvgPool3DGrad (CVE-2021-29577)CHECK-fail in FractionalMaxPoolGrad (CVE-2021-29580)FractionalAvgPoolGrad (CVE-2021-29578)MaxPoolGrad (CVE-2021-29579)CTCBeamSearchDecoder (CVE-2021-29581)tf.raw_ops.Dequantize (CVE-2021-29582)CHECK-fail due to integer overflow (CVE-2021-29584)FusedBatchNorm (CVE-2021-29583)SpaceToDepth (CVE-2021-29587)GatherNd (CVE-2021-29589)TransposeConv (CVE-2021-29588)Minimum or Maximum (CVE-2021-29590)Reshape operator (CVE-2021-29592)DepthToSpace (CVE-2021-29595)EmbeddingLookup (CVE-2021-29596)BatchToSpaceNd (CVE-2021-29593)SpaceToBatchNd (CVE-2021-29597)SVDF (CVE-2021-29598)Split (CVE-2021-29599)OneHot (CVE-2021-29600)DepthwiseConv (CVE-2021-29602)RaggedTensorToTensor (CVE-2021-29608)SparseAdd (CVE-2021-29609)SparseSparseMinimum (CVE-2021-29607)SparseReshape (CVE-2021-29611)QuantizeAndDequantizeV2 (CVE-2021-29610)BandedTriangularSolve (CVE-2021-29612)tf.raw_ops.CTCLoss (CVE-2021-29613)tf.io.decode_raw (CVE-2021-29614)ParseAttrValue with nested tensors (CVE-2021-29615)TrySimplify (CVE-2021-29616)tf.transpose with complex inputs (CVE-2021-29618)tf.strings.substr due to CHECK-fail (CVE-2021-29617)tf.raw_ops.SparseCountSparseOutput (CVE-2021-29619)tf.raw_ops.ImmutableConst (CVE-2021-29539)curl to 7.76.0 to handle CVE-2020-8169, CVE-2020-8177, CVE-2020-8231, CVE-2020-8284, CVE-2020-8285 and CVE-2020-8286.Fixes an access to unitialized memory in Eigen code (CVE-2020-26266)
tf.raw_ops.DataFormatVecPermute and tf.raw_ops.DataFormatDimMap (CVE-2020-26267)tf.raw_ops.ImmutableConst (CVE-2020-26268CHECK-fail in LSTM with zero-length input (CVE-2020-26270)SavedModel (CVE-2020-26271)libjpeg-turbo to 2.0.5 to handle CVE-2020-13790.junit to 4.13.1 to handle CVE-2020-15250.PCRE to 8.44 to handle CVE-2019-20838 and CVE-2020-14155.sqlite3 to 3.44.0 to keep in sync with master branch.Fixes an undefined behavior causing a segfault in tf.raw_ops.Switch (CVE-2020-15190)
tf.raw_ops.Switch (CVE-2020-15190)SparseFillEmptyRowsGrad (CVE-2020-15194, CVE-2020-15195)RaggedCountSparseOutput and SparseCountSparseOutput operations (CVE-2020-15196, CVE-2020-15197, CVE-2020-15198, CVE-2020-15199, CVE-2020-15200, CVE-2020-15201)tf.strings.as_string (CVE-2020-15203)tf.raw_ops.StringNGrams (CVE-2020-15205)SavedModel validation (CVE-2020-15206)sqlite3 to 3.33.00 to handle CVE-2020-15358.collections APIscipy dependency from setup.py since TensorFlow does not need it to install the pip packagetf.image.extract_glimpse has been updated to correctly process the case where centered=False and normalized=False. This is a breaking change as the ou…
tf.data adds two new mechanisms to solve input pipeline bottlenecks and save resources:
In addition checkout the detailed guide for analyzing input pipeline performance with TF Profiler.
tf.distribute.TPUStrategy is now a stable API and no longer considered experimental for TensorFlow. (earlier tf.distribute.experimental.TPUStrategy).
TF Profiler introduces two new tools: a memory profiler to visualize your model’s memory usage over time and a python tracer which allows you to trace python function calls in your model. Usability improvements include better diagnostic messages and profile options to customize the host and device trace verbosity level.
Introduces experimental support for Keras Preprocessing Layers API (tf.keras.layers.experimental.preprocessing.*) to handle data preprocessing operations, with support for composite tensor inputs. Please see below for additional details on these layers.
TFLite now properly supports dynamic shapes during conversion and inference. We’ve also added opt-in support on Android and iOS for XNNPACK, a highly optimized set of CPU kernels, as well as opt-in support for executing quantized models on the GPU.
Libtensorflow packages are available in GCS starting this release. We have also started to release a nightly version of these packages.
The experimental Python API tf.debugging.experimental.enable_dump_debug_info() now allows you to instrument a TensorFlow program and dump debugging information to a directory on the file system. The directory can be read and visualized by a new interactive dashboard in TensorBoard 2.3 called Debugger V2, which reveals the details of the TensorFlow program including graph structures, history of op executions at the Python (eager) and intra-graph levels, the runtime dtype, shape, and numerical composistion of tensors, as well as their code locations.
tf.data
tf.data.IteratorBase::RestoreInternal, IteratorBase::SaveInternal, and DatasetBase::CheckExternalState become pure-virtual and subclasses are now expected to provide an implementation.DatasetBase::IsStateful method is removed in favor of DatasetBase::CheckExternalState.DatasetBase::MakeIterator and MakeIteratorFromInputElement are removed.tensorflow::data::IteratorBase::SaveInternal and tensorflow::data::IteratorBase::SaveInput has been extended with SerializationContext argument to enable overriding the default policy for the handling external state during iterator checkpointing. This is not a backwards compatible change and all subclasses of IteratorBase need to be updated accordingly.tf.keras
BackupAndRestore callback for handling distributed training failures & restarts. Please take a look at this tutorial for details on how to use the callback.tf.image.extract_glimpse has been updated to correctly process the case
where centered=False and normalized=False. This is a breaking change as
the output is different from (incorrect) previous versions. Note this
breaking change only impacts tf.image.extract_glimpse and
tf.compat.v2.image.extract_glimpse API endpoints. The behavior of
tf.compat.v1.image.extract_glimpse does not change. The behavior of
exsiting C++ kernel ExtractGlimpse does not change either, so saved
models using tf.raw_ops.ExtractGlimpse will not be impacted.tf.lite
tf2_behavior to 1 to enable V2 for early loading cases.execute_fn_for_device function to dynamically choose the implementation based on underlying device placement.reduce_logsumexp benchmark with experiment compile.EagerTensors a meaningful __array__ implementation.tf.function/AutoGraph:
AutoGraph now includes into TensorFlow loops any variables that are closed over by local functions. Previously, such variables were sometimes incorrectly ignored.get_concrete_function method of tf.function objects can now be called with arguments consistent with the original arguments or type specs passed to get_concrete_function. This calling convention is now the preferred way to use concrete functions with nested values and composite tensors. Please check the guide for more details on concrete_ function.tf.function's experimental_relax_shapes to handle composite tensors appropriately.tf.function invocation, by removing redundant list converter.tf.function will retrace when called with a different variable instead of simply using the dtype & shape.tf.function.tf.math:
argmin/argmax contract to always return the smallest index for ties.tf.math.reduce_variance and tf.math.reduce_std return correct computation for complex types and no longer support integer types.tf.math.special.tf.divide now always returns a tensor to be consistent with documentation and other APIs.tf.image:
tf.image.non_max_suppression_padded with a new implementation that supports batched inputs, which is considerably faster on TPUs and GPUs. Boxes with area=0 will be ignored. Existing usage with single inputs should still work as before.tf.linalg
tf.linalg.banded_triangular_solve.tf.random:
tf.random.stateless_parameterized_truncated_normal.tf.ragged:
tf.ragged.cross and tf.ragged.cross_hashed operations.tf.RaggedTensor:
RaggedTensor.to_tensor() now preserves static shape.tf.strings.format() and tf.print() to support RaggedTensors.tf.saved_model:
@tf.function from SavedModel no longer ignores args after a RaggedTensor when selecting the concrete function to run.tf.saved_model.LoadOptions with experimental_io_device as arg with default value None to choose the I/O device for loading models and weights.tf.saved_model.SaveOptions with experimental_io_device as arg with default value None to choose the I/O device for saving models and weights.tf.while_loop/tf.cond/tf.switch_case.tf.vectorized_map to support vectorizing tf.while_loop and TensorList operations.tf.custom_gradient can now be applied to functions that accept nested structures of tensors as inputs (instead of just a list of tensors). Note that Python structures such as tuples and lists now won't be treated as tensors, so if you still want them to be treated that way, you need to wrap them with tf.convert_to_tensor.DeviceIndex op.tf.gather to support batch_dims and axis args.tf.map_fn to support RaggedTensors and SparseTensors.tf.group. It is not useful in eager mode.FTRL/FTRLV2 that can triggerred by multiply_linear_by_lr allowing a learning rate of zero.tf.data:tf.data.experimental.dense_to_ragged_batch works correctly with tuples.tf.data.experimental.dense_to_ragged_batch to output variable ragged rank.tf.data.experimental.cardinality is now a method on tf.data.Dataset.tf.data.Dataset now supports len(Dataset) when the cardinality is finite.tf.distribute:tf.distribute.DistributedDataset and tf.distribute.DistributedIterator to distribute input data when using tf.distribute to scale training on multiple devices.
get_next_as_optional method for tf.distribute.DistributedIterator class to return a tf.experimental.Optional instance that contains the next value for all replicas or none instead of raising an out of range error. Also see new guide on input distribution..assign in replica context to be more convenient, instead of having to use Strategy.extended.update which was the previous way of updating variables in this situation.tf.distribute.experimental.MultiWorkerMirroredStrategy adds support for partial batches. Workers running out of data now continue to participate in the training with empty inputs, instead of raising an error. Learn more about partial batches here.tf.distribute.experimental.MultiWorkerMirroredStrategy.strategy.reduce() inside tf.function may raise exceptions when the values to reduce are from loops or if-clauses.tf.distribute.MirroredStrategy cannot be used together with tf.distribute.experimental.MultiWorkerMirroredStrategy.tf.distribute.cluster_resolver.TPUClusterResolver.connect API to simplify TPU initialization.tf.keras:tf.keras.layers.experimental.preprocessing) to handle data preprocessing operations such as categorical feature encoding, text vectorization, data normalization, and data discretization (binning). The newly added layers provide a replacement for the legacy feature column API, and support composite tensor inputs.IntegerLookup & StringLookup: build an index of categorical feature valuesCategoryEncoding: turn integer-encoded categories into one-hot, multi-hot, or tf-idf encoded representationsCategoryCrossing: create new categorical features representing co-occurrences of previous categorical feature valuesHashing: the hashing trick, for large-vocabulary categorical featuresDiscretization: turn continuous numerical features into categorical features by binning their valuesCenterCrop, RescalingRandomCrop, RandomFlip, RandomTranslation, RandomRotation, RandomHeight, RandomWidth, RandomZoom, RandomContrastTextVectorization layer, which handles string tokenization, n-gram generation, and token encoding
TextVectorization layer now accounts for the mask_token as part of the vocabulary size when output_mode='int'. This means that, if you have a max_tokens value of 5000, your output will have 5000 unique values (not 5001 as before).TextVectorization.get_vocabulary() from byte to string. Users who previously were calling 'decode' on the output of this method should no longer need to do so.image_dataset_from_directory is a utility based on tf.data.Dataset, meant to replace the legacy ImageDataGenerator. It takes you from a structured directory of images to a labeled dataset, in one function call. Note that it doesn't perform image data augmentation (which is meant to be done using preprocessing layers).text_dataset_from_directory takes you from a structured directory of text files to a labeled dataset, in one function call.timeseries_dataset_from_array is a tf.data.Dataset-based replacement of the legacy TimeseriesGenerator. It takes you from an array of timeseries data to a dataset of shifting windows with their targets.experimental_steps_per_execution
arg to model.compile to indicate the number of batches to run per tf.function call. This can speed up Keras Models on TPUs up to 3x.tf.keras.layers.Lambda layers to support multi-argument lambdas, and keyword arguments when calling the layer.BatchNormalization layer's trainable property to act like standard python state when it's used inside tf.functions (frozen at tracing time), instead of acting like a pseudo-variable whose updates kind of sometimes get reflected in already-traced tf.function traces.Conv1DTranspose layer.SensitivitySpecificityBase derived metrics. See the updated API docstrings for tf.keras.metrics.SensitivityAtSpecificity and tf.keras.metrics.SpecificityAtSensitivty.tf.lite:inference_input_type and inference_output_type flags in TF 2.x TFLiteConverter (backward compatible with TF 1.x) to support integer (tf.int8, tf.uint8) input and output types in post training full integer quantized models.lite.OpsSet.EXPERIMENTAL_TFLITE_BUILTINS_ACTIVATIONS_INT16_WEIGHTS_INT8.Conv2D on x86.XNNPACK for optimized CPU performance.XNNPACK for optimized CPU performance.XNNPACK delegate automatically when the model has a fp32 operation.StatefulNnApiDelegate::Options::max_number_delegated_partitions to 3.NNAPI CPU and check NNAPI Errno.NNAPI with target accelerator specified with model containing Conv2d or FullyConnected or LSTM nodes with quantized weights.ANEURALNETWORKS_BAD_DATA execution failures with sum/max/min/reduce operations with scalar inputs.int8 support for most hexagon ops.conv in Hexagon delegate.BatchMatMul.half_pixel_centers with ResizeNearestNeighbor.BatchToSpaceND.BroadcastSub, Maximum, Minimum, Transpose and BroadcastDiv.kTfLiteActRelu1 to kTfLiteActReluN1To1.Buckettize, SparseCross and BoostedTreesBucketize to the flex whitelist.ByteBuffer inputs with graphs that have dynamic shapes.HardSwish.tf.sysconfig.get_build_info(). Returns a dict that describes the build environment of the currently installed TensorFlow package, e.g. the NVIDIA CUDA and NVIDIA CuDNN versions used when TensorFlow was built.XStatVisitor::RefValue().FTRL with multiply_linear_by_lr.gstpu.restartType in cloud tpu client.TFE_Py_Execute traceme.argmin and argmaxThis release contains contributions from many people at Google, as well as:
902449@58880@bigcat_chen@ASIC, Abdul Baseer Khan, Abhineet Choudhary, Abolfazl Shahbazi, Adam Hillier, ag.ramesh, Agoniii, Ajay P, Alex Hoffman, Alexander Bayandin, Alexander Grund, Alexandre Abadie, Alexey Rogachevskiy, amoitra, Andrew Stevens, Angus-Luo, Anshuman Tripathy, Anush Elangovan, Artem Mavrin, Ashutosh Hathidara, autoih, Ayushman Kumar, ayushmankumar7, Bairen Yi, Bas Aarts, Bastian Eichenberger, Ben Barsdell, bhack, Bharat Raghunathan, Biagio Montaruli, Bigcat-Himax, blueyi, Bryan Cutler, Byambaa, Carlos Hernandez-Vaquero, Chen Lei, Chris Knorowski, Christian Clauss, chuanqiw, CuiYifeng, Daniel Situnayake, Daria Zhuravleva, Dayananda-V, Deven Desai, Devi Sandeep Endluri, Dmitry Zakharov, Dominic Jack, Duncan Riach, Edgar Liberis, Ehsan Toosi, ekuznetsov139, Elena Zhelezina, Eugene Kuznetsov, Eugene Mikhantiev, Evgenii Zheltonozhskii, Fabio Di Domenico, Fausto Morales, Fei Sun, feihugis, Felix E. Klee, flyingcat, Frederic Bastien, Fredrik Knutsson, frreiss, fsx950223, ganler, Gaurav Singh, Georgios Pinitas, Gian Marco Iodice, Giorgio Arena, Giuseppe Rossini, Gregory Keith, Guozhong Zhuang, gurushantj, Hahn Anselm, Harald Husum, Harjyot Bagga, Hristo Vrigazov, Ilya Persky, Ir1d, Itamar Turner-Trauring, jacco, Jake Tae, Janosh Riebesell, Jason Zaman, jayanth, Jeff Daily, Jens Elofsson, Jinzhe Zeng, JLZ, Jonas Skog, Jonathan Dekhtiar, Josh Meyer, Joshua Chia, Judd, justkw, Kaixi Hou, Kam D Kasravi, Kamil Rakoczy, Karol Gugala, Kayou, Kazuaki Ishizaki, Keith Smiley, Khaled Besrour, Kilaru Yasaswi Sri Chandra Gandhi, Kim, Young Soo, Kristian Hartikainen, Kwabena W. Agyeman, Leslie-Fang, Leslie-Fang-Intel, Li, Guizi, Lukas Geiger, Lutz Roeder, M\U00E5Ns Nilsson, Mahmoud Abuzaina, Manish, Marcel Koester, Marcin Sielski, marload, Martin Jul, Matt Conley, mdfaijul, Meng, Peng, Meteorix, Michael Käufl, Michael137, Milan Straka, Mitchell Vitez, Ml-0, Mokke Meguru, Mshr-H, nammbash, Nathan Luehr, naumkin, Neeraj Bhadani, ngc92, Nick Morgan, nihui, Niranjan Hasabnis, Niranjan Yadla, Nishidha Panpaliya, Oceania2018, oclyke, Ouyang Jin, OverLordGoldDragon, Owen Lyke, Patrick Hemmer, Paul Andrey, Peng Sun, periannath, Phil Pearl, Prashant Dandriyal, Prashant Kumar, Rahul Huilgol, Rajan Singh, Rajeshwar Reddy T, rangjiaheng, Rishit Dagli, Rohan Reddy, rpalakkal, rposts, Ruan Kunliang, Rushabh Vasani, Ryohei Ikegami, Semun Lee, Seo-Inyoung, Sergey Mironov, Sharada Shiddibhavi, ShengYang1, Shraiysh Vaishay, Shunya Ueta, shwetaoj, Siyavash Najafzade, Srinivasan Narayanamoorthy, Stephan Uphoff, storypku, sunchenggen, sunway513, Sven-Hendrik Haase, Swapnil Parekh, Tamas Bela Feher, Teng Lu, tigertang, tomas, Tomohiro Ubukata, tongxuan.ltx, Tony Tonev, Tzu-Wei Huang, Téo Bouvard, Uday Bondhugula, Vaibhav Jade, Vijay Tadikamalla, Vikram Dattu, Vincent Abriou, Vishnuvardhan Janapati, Vo Van Nghia, VoVAllen, Will Battel, William D. Irons, wyzhao, Xiaoming (Jason) Cui, Xiaoquan Kong, Xinan Jiang, xutianming, Yair Ehrenwald, Yasir Modak, Yasuhiro Matsumoto, Yixing Fu, Yong Tang, Yuan Tang, zhaozheng09, Zilin Zhu, zilinzhu, 张志豪
This release introduces several vulnerability fixes:
Note that this is the last patch release for the TensorFlow 2.2.x series.
This release introduces several vulnerability fixes:
RaggedBinCount (CVE-2021-29512)RaggedBinCount (CVE-2021-29514)MatrixDiag* ops (CVE-2021-29515)Conv3D (CVE-2021-29517)CHECK-fail in SparseCross caused by type confusion (CVE-2021-29519)SparseCountSparseOutput (CVE-2021-29521)Conv3DBackprop* (CVE-2021-29520)Conv3DBackprop* (CVE-2021-29522)CHECK-fail in AddManySparseToTensorsMap (CVE-2021-29523)Conv2DBackpropFilter (CVE-2021-29524)Conv2DBackpropInput (CVE-2021-29525)Conv2D (CVE-2021-29526)QuantizedConv2D (CVE-2021-29527)QuantizedMul (CVE-2021-29528)SparseMatrixSparseCholesky (CVE-2021-29530)CHECK-fail in tf.raw_ops.EncodePng (CVE-2021-29531)RaggedCross (CVE-2021-29532)CHECK-fail in DrawBoundingBoxes (CVE-2021-29533)QuantizedMul (CVE-2021-29535)CHECK-fail in SparseConcat (CVE-2021-29534)QuantizedResizeBilinear (CVE-2021-29537)QuantizedReshape (CVE-2021-29536)Conv2DBackpropFilter (CVE-2021-29538)Conv2DBackpropFilter (CVE-2021-29540)StringNGrams (CVE-2021-29542)StringNGrams (CVE-2021-29541)CHECK-fail in QuantizeAndDequantizeV4Grad (CVE-2021-29544)CHECK-fail in CTCGreedyDecoder (CVE-2021-29543)SparseTensorToCSRSparseMatrix (CVE-2021-29545)QuantizedBiasAdd (CVE-2021-29546)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29547)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29548)QuantizedAdd (CVE-2021-29549)FractionalAvgPool (CVE-2021-29550)MatrixTriangularSolve (CVE-2021-29551)QuantizeAndDequantizeV3 (CVE-2021-29553)CHECK-failure in UnsortedSegmentJoin (CVE-2021-29552)DenseCountSparseOutput (CVE-2021-29554)FusedBatchNorm (CVE-2021-29555)SparseMatMul (CVE-2021-29557)Reverse (CVE-2021-29556)SparseSplit (CVE-2021-29558)RaggedTensorToTensor (CVE-2021-29560)CHECK-fail in LoadAndRemapMatrix (CVE-2021-29561)CHECK-fail in tf.raw_ops.IRFFT (CVE-2021-29562)CHECK-fail in tf.raw_ops.RFFT (CVE-2021-29563)EditDistance (CVE-2021-29564)SparseFillEmptyRows (CVE-2021-29565)Dilation2DBackpropInput (CVE-2021-29566)ParameterizedTruncatedNormal (CVE-2021-29568)SparseDenseCwiseMul (CVE-2021-29567)MaxPoolGradWithArgmax (CVE-2021-29570)RequantizationRange (CVE-2021-29569)DrawBoundingBoxesV2 (CVE-2021-29571)SdcaOptimizer (CVE-2021-29572)tf.raw_ops.ReverseSequence (CVE-2021-29575)MaxPoolGradWithArgmax (CVE-2021-29573)MaxPool3DGradGrad (CVE-2021-29574)MaxPool3DGradGrad (CVE-2021-29576)AvgPool3DGrad (CVE-2021-29577)CHECK-fail in FractionalMaxPoolGrad (CVE-2021-29580)FractionalAvgPoolGrad (CVE-2021-29578)MaxPoolGrad (CVE-2021-29579)CTCBeamSearchDecoder (CVE-2021-29581)tf.raw_ops.Dequantize (CVE-2021-29582)CHECK-fail due to integer overflow (CVE-2021-29584)FusedBatchNorm (CVE-2021-29583)SpaceToDepth (CVE-2021-29587)GatherNd (CVE-2021-29589)TransposeConv (CVE-2021-29588)Minimum or Maximum (CVE-2021-29590)Reshape operator (CVE-2021-29592)DepthToSpace (CVE-2021-29595)EmbeddingLookup (CVE-2021-29596)BatchToSpaceNd (CVE-2021-29593)SpaceToBatchNd (CVE-2021-29597)SVDF (CVE-2021-29598)Split (CVE-2021-29599)OneHot (CVE-2021-29600)DepthwiseConv (CVE-2021-29602)RaggedTensorToTensor (CVE-2021-29608)SparseAdd (CVE-2021-29609)SparseSparseMinimum (CVE-2021-29607)SparseReshape (CVE-2021-29611)QuantizeAndDequantizeV2 (CVE-2021-29610)BandedTriangularSolve (CVE-2021-29612)tf.raw_ops.CTCLoss (CVE-2021-29613)tf.io.decode_raw (CVE-2021-29614)ParseAttrValue with nested tensors (CVE-2021-29615)TrySimplify (CVE-2021-29616)tf.transpose with complex inputs (CVE-2021-29618)tf.strings.substr due to CHECK-fail (CVE-2021-29617)tf.raw_ops.SparseCountSparseOutput (CVE-2021-29619)tf.raw_ops.ImmutableConst (CVE-2021-29539)curl to 7.76.0 to handle CVE-2020-8169, CVE-2020-8177, CVE-2020-8231, CVE-2020-8284, CVE-2020-8285 and CVE-2020-8286.Fixes an access to unitialized memory in Eigen code (CVE-2020-26266)
tf.raw_ops.DataFormatVecPermute and tf.raw_ops.DataFormatDimMap (CVE-2020-26267)tf.raw_ops.ImmutableConst (CVE-2020-26268CHECK-fail in LSTM with zero-length input (CVE-2020-26270)SavedModel (CVE-2020-26271)SavedModels that import functionslibjpeg-turbo to 2.0.5 to handle CVE-2020-13790.junit to 4.13.1 to handle CVE-2020-15250.PCRE to 8.44 to handle CVE-2019-20838 and CVE-2020-14155.sqlite3 to 3.44.0 to keep in sync with master branch.Fixes an undefined behavior causing a segfault in tf.raw_ops.Switch (CVE-2020-15190)
tf.raw_ops.Switch (CVE-2020-15190)SparseFillEmptyRowsGrad (CVE-2020-15194, CVE-2020-15195)tf.strings.as_string (CVE-2020-15203)tf.raw_ops.StringNGrams (CVE-2020-15205)SavedModel validation (CVE-2020-15206)sqlite3 to 3.33.00 to handle CVE-2020-9327, CVE-2020-11655, CVE-2020-11656, CVE-2020-13434, CVE-2020-13435, CVE-2020-13630, CVE-2020-13631, CVE-2020-13871, and CVE-2020-15358.collections APIscipy dependency from setup.py since TensorFlow does not need it to install the pip packageExport C++ functions to Python using pybind11 as opposed to SWIG as a part of our deprecation of swig efforts.
TensorFlow 2.2 discontinues support for Python 2, previously announced as following Python 2's EOL on January 1, 2020.
Coinciding with this change, new releases of TensorFlow's Docker images provide Python 3 exclusively. Because all images now use Python 3, Docker tags containing -py3 will no longer be provided and existing -py3 tags like latest-py3 will not be updated.
Replaced the scalar type for string tensors from std::string to tensorflow::tstring which is now ABI stable.
A new Profiler for TF 2 for CPU/GPU/TPU. It offers both device and host performance analysis, including input pipeline and TF Ops. Optimization advisory is provided whenever possible. Please see this tutorial and guide for usage guidelines.
Export C++ functions to Python using pybind11 as opposed to SWIG as a part of our deprecation of swig efforts.
tf.distribute:
BatchNormalization by using the newly added tf.keras.layers.experimental.SyncBatchNormalization layer. This layer will sync BatchNormalization statistics every step across all replicas taking part in sync training.tf.distribute.experimental.MultiWorkerMirroredStrategy
NCCL to 2.5.7-1 for better performance and performance tuning. Please see nccl developer guide for more information on this.allreduce in float16. See this example usage.experimental_run_v2 method for distribution strategies and renamed the method run as it is no longer experimental.tf.keras:
Model.fit major improvements:
Model.fit by overriding Model.train_step.Model.fit handles for you (distribution strategies, callbacks, data formats, looping logic, etc)Model.train_step for an example of what this function should look like. Same applies for validation and inference via Model.test_step and Model.predict_step.Model._saved_model_inputs_spec attr now instead of
relying on Model.inputs and Model.input_names, which are no longer set for subclass Models.
This attr is set in eager, tf.function, and graph modes. This gets rid of the need for users to
manually call Model._set_inputs when using Custom Training Loops(CTLs).Model._standardize_user_data. Long-term, a solution where the
DataAdapter doesn't need to call the Model is probably preferable.fused_batch_norm. You should see significant performance improvements when using fused_batch_norm in Eager mode.tf.lite:
XLA
tf.function with “compile or throw exception” semantics on CPU and GPU.tf.keras:
tf.keras.applications the name of the "top" layer has been standardized to "predictions". This is only a problem if your code relies on the exact name of the layer.tf.py_function, tf.py_func and tf.numpy_function.XLA_CPU and XLA_GPU devices with this release.cc_experimental_shared_library.metrics, metrics_names will now be available only after training/evaluating the model on actual data for functional models. metrics will now include model loss and output losses.loss_functions property has been removed from the model. This was an undocumented property that was accidentally public and has now been removed.tf.data:
autotune_algorithm from experimental optimization options.tf.constant always creates CPU tensors irrespective of the current device context.TensorHandles maintain a list of mirrors for any copies to local or remote devices. This avoids any redundant copies due to op execution.tf.Tensor & tf.Variable, .experimental_ref() is no longer experimental and is available as simply .ref().pfor/vectorized_map: Added support for vectorizing 56 more ops. Vectorizing tf.cond is also supported now.tf.while_loop emits StatelessWhile op if cond and body functions are stateless. This allows multiple gradients while ops to run in parallel under distribution strategy.GradientTape in eager mode by auto-generating list of op inputs/outputs which are unused and hence not cached for gradient functions.back_prop=False in while_v2 but mark it as deprecated.None in data-dependent control flow.RaggedTensor.numpy().RaggedTensor.__getitem__ to preserve uniform dimensions & allow indexing into uniform dimensions.tf.expand_dims to always insert the new dimension as a non-ragged dimension.tf.embedding_lookup to use partition_strategy and max_norm when ids is ragged.batch_dims==rank(indices) in tf.gather.tf.print.tf.distribute:
embedding_column with variable-length input features for MultiWorkerMirroredStrategy.tf.keras:
experimental_aggregate_gradients argument to tf.keras.optimizer.Optimizer.apply_gradients. This allows custom gradient aggregation and processing aggregated gradients in custom training loop.pathlib.Path paths for loading models via Keras API.tf.function/AutoGraph:
ReplicaContext.merge_call, Strategy.extended.update and Strategy.extended.update_non_slot.tf.function. See the API docs for tf.autograph.experimental.set_loop_options for additonal info.tf.function input arguments to unlock more Grappler optimizations in TensorFlow 2.x.experimental_run_v2 in tf.function.RaggedTensors using a for loop inside tf.function.tf.lite:
tf.lite C inference API out of experimental into lite/c.NNAPI CPU / partial acceleration on Android 10NNAPI CPU Fallback is disabled.tf.math.reciprocal1 op by lowering to tf.div op.strided_slice.DEPTH_TO_SPACE to NNAPI causing op not to be accelerated.NNAPI DelegateNNAPI delegate failure when an operand for Maximum/Minimum operation is a scalar.NNAPI delegate failure when Axis input for reduce operation is a scalar.NNAPI.tf.random:
random_uniformrandom_seed documentation improvement.RandomBinomial broadcasts and appends the sample shape to the left rather than the right.tf.random.stateless_binomial, tf.random.stateless_gamma, tf.random.stateless_poissontf.random.stateless_uniform now supports unbounded sampling of int types.tf.linalg.LinearOperatorTridiag.LinearOperatorBlockLowerTriangulartf.math.sobol_sample op.tf.math.xlog1py.tf.math.special.{dawsn,expi,fresnel_cos,fresnel_sin,spence}.tf.signal.TpuClusterResolver to move shared logic to a separate pip package.saved_model_cli aot_compile_cpu allows you to compile saved models to XLA header+object files and include them in your C++ programs.Igamma, Igammac for XLA.TF_DETERMINISTIC_OPS is set to "true" or "1". This extends deterministic tf.nn.bias_add back-prop functionality (and therefore also deterministic back-prop of bias-addition in Keras layers) to include when XLA JIT complilation is enabled.TF_DETERMINSTIC_OPS or environment variable TF_CUDNN_DETERMINISTIC is set to "true" or "1", in which some layer configurations led to an exception with the message "No algorithm worked!"_send traceme to allow easier debugging.fastpathexecute.in-place.tensorflow/core:framework/*_pyclif rules to tensorflow/core/framework:*_pyclif.This release contains contributions from many people at Google, as well as:
372046933, 8bitmp3, aaronhma, Abin Shahab, Aditya Patwardhan, Agoniii, Ahti Kitsik, Alan Yee, Albin Joy, Alex Hoffman, Alexander Grund, Alexandre E. Eichenberger, Amit Kumar Jaiswal, amoitra, Andrew Anderson, Angus-Luo, Anthony Barbier, Anton Kachatkou, Anuj Rawat, archis, Arpan-Dhatt, Arvind Sundararajan, Ashutosh Hathidara, autoih, Bairen Yi, Balint Cristian, Bas Aarts, BashirSbaiti, Basit Ayantunde, Ben Barsdell, Benjamin Gaillard, boron, Brett Koonce, Bryan Cutler, Christian Goll, Christian Sachs, Clayne Robison, comet, Daniel Falbel, Daria Zhuravleva, darsh8200, David Truby, Dayananda-V, deepakm, Denis Khalikov, Devansh Singh, Dheeraj R Reddy, Diederik Van Liere, Diego Caballero, Dominic Jack, dothinking, Douman, Drake Gens, Duncan Riach, Ehsan Toosi, ekuznetsov139, Elena Zhelezina, elzino, Ending2015a, Eric Schweitz, Erik Zettel, Ethan Saadia, Eugene Kuznetsov, Evgeniy Zheltonozhskiy, Ewout Ter Hoeven, exfalso, FAIJUL, Fangjun Kuang, Fei Hu, Frank Laub, Frederic Bastien, Fredrik Knutsson, frreiss, Frédéric Rechtenstein, fsx950223, Gaurav Singh, gbaned, George Grzegorz Pawelczak, George Sterpu, Gian Marco Iodice, Giorgio Arena, Hans Gaiser, Hans Pabst, Haoyu Wu, Harry Slatyer, hsahovic, Hugo, Hugo Sjöberg, IrinaM21, jacco, Jake Tae, Jean-Denis Lesage, Jean-Michel Gorius, Jeff Daily, Jens Elofsson, Jerry Shih, jerryyin, Jin Mingjian, Jinjing Zhou, JKIsaacLee, jojimonv, Jonathan Dekhtiar, Jose Ignacio Gomez, Joseph-Rance, Judd, Julian Gross, Kaixi Hou, Kaustubh Maske Patil, Keunwoo Choi, Kevin Hanselman, Khor Chean Wei, Kilaru Yasaswi Sri Chandra Gandhi, Koan-Sin Tan, Koki Ibukuro, Kristian Holsheimer, kurileo, Lakshay Tokas, Lee Netherton, leike666666, Leslie-Fang-Intel, Li, Guizi, LIUJIAN435, Lukas Geiger, Lyo Nguyen, madisetti, Maher Jendoubi, Mahmoud Abuzaina, Manuel Freiberger, Marcel Koester, Marco Jacopo Ferrarotti, Markus Franke, marload, Mbah-Javis, mbhuiyan, Meng Zhang, Michael Liao, MichaelKonobeev, Michal Tarnowski, Milan Straka, minoring, Mohamed Nour Abouelseoud, MoussaMM, Mrinal Jain, mrTsjolder, Måns Nilsson, Namrata Bhave, Nicholas Gao, Niels Ole Salscheider, nikochiko, Niranjan Hasabnis, Nishidha Panpaliya, nmostafa, Noah Trenaman, nuka137, Officium, Owen L - Sfe, Pallavi G, Paul Andrey, Peng Sun, Peng Wu, Phil Pearl, PhilipMay, pingsutw, Pooya Davoodi, PragmaTwice, pshiko, Qwerty71, R Gomathi, Rahul Huilgol, Richard Xiao, Rick Wierenga, Roberto Rosmaninho, ruchit2801, Rushabh Vasani, Sami, Sana Damani, Sarvesh Dubey, Sasan Jafarnejad, Sergii Khomenko, Shane Smiskol, Shaochen Shi, sharkdtu, Shawn Presser, ShengYang1, Shreyash Patodia, Shyam Sundar Dhanabalan, Siju Samuel, Somyajit Chakraborty Sam, Srihari Humbarwadi, srinivasan.narayanamoorthy, Srishti Yadav, Steph-En-M, Stephan Uphoff, Stephen Mugisha, SumanSudhir, Taehun Kim, Tamas Bela Feher, TengLu, Tetragramm, Thierry Herrmann, Tian Jin, tigertang, Tom Carchrae, Tom Forbes, Trent Lo, Victor Peng, vijayphoenix, Vincent Abriou, Vishal Bhola, Vishnuvardhan Janapati, vladbataev, VoVAllen, Wallyss Lima, Wen-Heng (Jack) Chung, wenxizhu, William D. Irons, William Zhang, Xiaoming (Jason) Cui, Xiaoquan Kong, Xinan Jiang, Yasir Modak, Yasuhiro Matsumoto, Yaxun (Sam) Liu, Yong Tang, Ytyt-Yt, yuan, Yuan Mingshuai, Yuan Tang, Yuki Ueda, Yusup, zhangshijin, zhuwenxi
This release introduces several vulnerability fixes:
Note that this is the last patch release for the TensorFlow 2.1.x series.
This release introduces several vulnerability fixes:
RaggedBinCount (CVE-2021-29512)RaggedBinCount (CVE-2021-29514)MatrixDiag* ops (CVE-2021-29515)Conv3D (CVE-2021-29517)CHECK-fail in SparseCross caused by type confusion (CVE-2021-29519)SparseCountSparseOutput (CVE-2021-29521)Conv3DBackprop* (CVE-2021-29520)Conv3DBackprop* (CVE-2021-29522)CHECK-fail in AddManySparseToTensorsMap (CVE-2021-29523)Conv2DBackpropFilter (CVE-2021-29524)Conv2DBackpropInput (CVE-2021-29525)Conv2D (CVE-2021-29526)QuantizedConv2D (CVE-2021-29527)QuantizedMul (CVE-2021-29528)SparseMatrixSparseCholesky (CVE-2021-29530)CHECK-fail in tf.raw_ops.EncodePng (CVE-2021-29531)RaggedCross (CVE-2021-29532)CHECK-fail in DrawBoundingBoxes (CVE-2021-29533)QuantizedMul (CVE-2021-29535)CHECK-fail in SparseConcat (CVE-2021-29534)QuantizedResizeBilinear (CVE-2021-29537)QuantizedReshape (CVE-2021-29536)Conv2DBackpropFilter (CVE-2021-29538)Conv2DBackpropFilter (CVE-2021-29540)StringNGrams (CVE-2021-29542)StringNGrams (CVE-2021-29541)CHECK-fail in QuantizeAndDequantizeV4Grad (CVE-2021-29544)CHECK-fail in CTCGreedyDecoder (CVE-2021-29543)SparseTensorToCSRSparseMatrix (CVE-2021-29545)QuantizedBiasAdd (CVE-2021-29546)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29547)QuantizedBatchNormWithGlobalNormalization (CVE-2021-29548)QuantizedAdd (CVE-2021-29549)FractionalAvgPool (CVE-2021-29550)MatrixTriangularSolve (CVE-2021-29551)QuantizeAndDequantizeV3 (CVE-2021-29553)CHECK-failure in UnsortedSegmentJoin (CVE-2021-29552)DenseCountSparseOutput (CVE-2021-29554)FusedBatchNorm (CVE-2021-29555)SparseMatMul (CVE-2021-29557)Reverse (CVE-2021-29556)SparseSplit (CVE-2021-29558)RaggedTensorToTensor (CVE-2021-29560)CHECK-fail in LoadAndRemapMatrix (CVE-2021-29561)CHECK-fail in tf.raw_ops.IRFFT (CVE-2021-29562)CHECK-fail in tf.raw_ops.RFFT (CVE-2021-29563)EditDistance (CVE-2021-29564)SparseFillEmptyRows (CVE-2021-29565)Dilation2DBackpropInput (CVE-2021-29566)ParameterizedTruncatedNormal (CVE-2021-29568)SparseDenseCwiseMul (CVE-2021-29567)MaxPoolGradWithArgmax (CVE-2021-29570)RequantizationRange (CVE-2021-29569)DrawBoundingBoxesV2 (CVE-2021-29571)SdcaOptimizer (CVE-2021-29572)tf.raw_ops.ReverseSequence (CVE-2021-29575)MaxPoolGradWithArgmax (CVE-2021-29573)MaxPool3DGradGrad (CVE-2021-29574)MaxPool3DGradGrad (CVE-2021-29576)AvgPool3DGrad (CVE-2021-29577)CHECK-fail in FractionalMaxPoolGrad (CVE-2021-29580)FractionalAvgPoolGrad (CVE-2021-29578)MaxPoolGrad (CVE-2021-29579)CTCBeamSearchDecoder (CVE-2021-29581)tf.raw_ops.Dequantize (CVE-2021-29582)CHECK-fail due to integer overflow (CVE-2021-29584)FusedBatchNorm (CVE-2021-29583)SpaceToDepth (CVE-2021-29587)GatherNd (CVE-2021-29589)TransposeConv (CVE-2021-29588)Minimum or Maximum (CVE-2021-29590)Reshape operator (CVE-2021-29592)DepthToSpace (CVE-2021-29595)EmbeddingLookup (CVE-2021-29596)BatchToSpaceNd (CVE-2021-29593)SpaceToBatchNd (CVE-2021-29597)SVDF (CVE-2021-29598)Split (CVE-2021-29599)OneHot (CVE-2021-29600)DepthwiseConv (CVE-2021-29602)RaggedTensorToTensor (CVE-2021-29608)SparseAdd (CVE-2021-29609)SparseSparseMinimum (CVE-2021-29607)SparseReshape (CVE-2021-29611)QuantizeAndDequantizeV2 (CVE-2021-29610)BandedTriangularSolve (CVE-2021-29612)tf.raw_ops.CTCLoss (CVE-2021-29613)tf.io.decode_raw (CVE-2021-29614)ParseAttrValue with nested tensors (CVE-2021-29615)TrySimplify (CVE-2021-29616)tf.transpose with complex inputs (CVE-2021-29618)tf.strings.substr due to CHECK-fail (CVE-2021-29617)tf.raw_ops.SparseCountSparseOutput (CVE-2021-29619)tf.raw_ops.ImmutableConst (CVE-2021-29539)curl to 7.76.0 to handle CVE-2020-8169, CVE-2020-8177, CVE-2020-8231, CVE-2020-8284, CVE-2020-8285 and CVE-2020-8286.Fixes an access to unitialized memory in Eigen code (CVE-2020-26266)
tf.raw_ops.DataFormatVecPermute and tf.raw_ops.DataFormatDimMap (CVE-2020-26267)tf.raw_ops.ImmutableConst (CVE-2020-26268CHECK-fail in LSTM with zero-length input (CVE-2020-26270)SavedModel (CVE-2020-26271)libjpeg-turbo to 2.0.5 to handle CVE-2020-13790.junit to 4.13.1 to handle CVE-2020-15250.PCRE to 8.44 to handle CVE-2019-20838 and CVE-2020-14155.sqlite3 to 3.44.0 to keep in sync with master branch.Fixes an undefined behavior causing a segfault in tf.raw_ops.Switch (CVE-2020-15190)
tf.raw_ops.Switch (CVE-2020-15190)SparseFillEmptyRowsGrad (CVE-2020-15194, CVE-2020-15195)tf.strings.as_string (CVE-2020-15203)tf.raw_ops.StringNGrams (CVE-2020-15205)SavedModel validation (CVE-2020-15206)sqlite3 to 3.33.00 to handle CVE-2020-9327, CVE-2020-11655, CVE-2020-11656, CVE-2020-13434, CVE-2020-13435, CVE-2020-13630, CVE-2020-13631, CVE-2020-13871, and CVE-2020-15358.scipy dependency from setup.py since TensorFlow does not need it to install the pip packageUpdates sqlite3 to 3.31.01 to handle CVE-2019-19880, CVE-2019-19244 and CVE-2019-19645
sqlite3 to 3.31.01 to handle CVE-2019-19880, CVE-2019-19244 and CVE-2019-19645curl to 7.69.1 to handle CVE-2019-15601libjpeg-turbo to 2.0.4 to handle CVE-2018-19664, CVE-2018-20330 and CVE-2019-139602.4.5 to handle CVE-2019-10099, CVE-2018-17190 and CVE-2018-11770Note that Model.fit_generator, Model.evaluate_generator, and Model.predict_generator are deprecated endpoints. They are subsumed by Model.fit, Model.e…
TensorFlow 2.1 will be the last TF release supporting Python 2. Python 2 support officially ends an January 1, 2020. As announced earlier, TensorFlow will also stop supporting Python 2 starting January 1, 2020, and no more releases are expected in 2019.
tensorflow pip package now includes GPU support by default (same as tensorflow-gpu) for both Linux and Windows. This runs on machines with and without NVIDIA GPUs. tensorflow-gpu is still available, and CPU-only packages can be downloaded at tensorflow-cpu for users who are concerned about package size.tensorflow Pip packages are now built with Visual Studio 2019 version 16.4 in order to take advantage of the new /d2ReducedOptimizeHugeFunctions compiler flag. To use these new packages, you must install "Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019", available from Microsoft's website here.
EIGEN_STRONG_INLINE can take over 48 hours to compile without this flag. Refer to configure.py for more information about EIGEN_STRONG_INLINE and /d2ReducedOptimizeHugeFunctions.msvcp140.dll (old) or msvcp140_1.dll (new), are missing on your machine, import tensorflow will print a warning message.tensorflow pip package is built with CUDA 10.1 and cuDNN 7.6.tf.keras
TextVectorization layer, which takes as input raw strings and takes care of text standardization, tokenization, n-gram generation, and vocabulary indexing. See this end-to-end text classification example..compile .fit .evaluate and .predict are allowed to be outside of the DistributionStrategy scope, as long as the model was constructed inside of a scope..compile, .fit, .evaluate, and .predict is available for Cloud TPUs, Cloud TPU, for all types of Keras models (sequential, functional and subclassing models).tf.summary to be used more conveniently with Cloud TPUs..fit, .evaluate, .predict on TPU using numpy data, in addition to tf.data.Dataset.tf.data
tf.data datasets + DistributionStrategy for better performance. Note that the dataset also behaves slightly differently, in that the rebatched dataset cardinality will always be a multiple of the number of replicas.tf.data.Dataset now supports automatic data distribution and sharding in distributed environments, including on TPU pods.tf.data.Dataset can now be tuned with 1. tf.data.experimental.AutoShardPolicy(OFF, AUTO, FILE, DATA) 2. tf.data.experimental.ExternalStatePolicy(WARN, IGNORE, FAIL)tf.debugging
tf.debugging.enable_check_numerics() and tf.debugging.disable_check_numerics() to help debugging the root causes of issues involving infinities and NaNs.tf.distribute
strategy.experimental_distribute_dataset, strategy.experimental_distribute_datasets_from_function, strategy.experimental_run_v2, strategy.reduce.tf.distribute.experimental_set_strategy(), in addition to strategy.scope().TensorRT
tf.experimental.tensorrt.Converter.TF_DETERMINISTIC_OPS has been added. When set to "true" or "1", this environment variable makes tf.nn.bias_add operate deterministically (i.e. reproducibly), but currently only when XLA JIT compilation is not enabled. Setting TF_DETERMINISTIC_OPS to "true" or "1" also makes cuDNN convolution and max-pooling operate deterministically. This makes Keras Conv*D and MaxPool*D layers operate deterministically in both the forward and backward directions when running on a CUDA-enabled GPU.Operation.traceback_with_start_lines for which we know of no usages.id from tf.Tensor.__repr__() as id is not useful other than internal debugging.tf.assert_* methods now raise assertions at operation creation time if the input tensors' values are known at that time, not during the session.run(). This only changes behavior when the graph execution would have resulted in an error. When this happens, a noop is returned and the input tensors are marked non-feedable. In other words, if they are used as keys in feed_dict argument to session.run(), an error will be raised. Also, because some assert ops don't make it into the graph, the graph structure changes. A different graph can result in different per-op random seeds when they are not given explicitly (most often).tf.config.list_logical_devices, tf.config.list_physical_devices, tf.config.get_visible_devices, tf.config.set_visible_devices, tf.config.get_logical_device_configuration, tf.config.set_logical_device_configuration.tf.config.experimentalVirtualDeviceConfiguration has been renamed to tf.config.LogicalDeviceConfiguration.tf.config.experimental_list_devices has been removed, please use
tf.config.list_logical_devices.tf.data
tf.data.experimental.parallel_interleave with sloppy=True.tf.data.experimental.dense_to_ragged_batch().tf.data parsing ops to support RaggedTensors.tf.distribute
tf.distribute.Strategy was used.tf.estimator
tf.estimator.CheckpointSaverHook to not save the GraphDef.tf.keras
depthwise_conv2d in tf.keras.backend.trainable_weights, non_trainable_weights, and weights are explicitly deduplicated.model.load_weights now accepts skip_mismatch as an argument. This was available in external Keras, and has now been copied over to tf.keras.Model.fit_generator, Model.evaluate_generator, Model.predict_generator, Model.train_on_batch, Model.test_on_batch, and Model.predict_on_batch methods now respect the run_eagerly property, and will correctly run using tf.function by default. Note that Model.fit_generator, Model.evaluate_generator, and Model.predict_generator are deprecated endpoints. They are subsumed by Model.fit, Model.evaluate, and Model.predict which now support generators and Sequences.tf.lite
NMS ops in TFLite.narrow_range and axis to quantize_v2 and dequantize ops.FusedBatchNormV3 in converter.errno-like field to NNAPI delegate for detecting NNAPI errors for fallback behaviour.NNAPI Delegate to support detailed reason why an operation is not accelerated.tf.tpu.experimental.initialize_tpu_system.RaggedTensor.merge_dims().uniform_row_length row-partitioning tensor to RaggedTensor.shape arg to RaggedTensor.to_tensor; Improve speed of RaggedTensor.to_tensor.tf.io.parse_sequence_example and tf.io.parse_single_sequence_example now support ragged features.while_v2 with variables in custom gradient.tf.cond and tf.while_loop using LookupTable.vectorized_map failed on inputs with unknown static shape.None now behaves as expected.tf.function(f)(), tf.function(f).get_concrete_function and tf.function(f).get_initialization_function thread-safe.tf.identity to work with CompositeTensors (such as SparseTensor)dtypes and zero-sized inputs to Einsum Op and improved its performanceNCCL all-reduce inside functions executing eagerly.RFFT, RFFT2D, RFFT3D, IRFFT, IRFFT2D, and IRFFT3D.pfor converter for SelfAdjointEigV2.tf.math.ndtri and tf.math.erfinv.tf.config.experimental.enable_mlir_bridge to allow using MLIR compiler bridge in eager model.tf.autodiff.ForwardAccumulator for forward-mode autodiffLinearOperatorPermutation.tf.reduce_logsumexp.AUC metriczeros_like.None or types with an __index__ method.tf.random.uniform microbenchmark._protogen suffix for proto library targets instead of _cc_protogen suffix.swig to pybind11.tf.device & MirroredStrategy now supports passing in a tf.config.LogicalDevice.bazelversion file at the root of the project directory.This release contains contributions from many people at Google, as well as:
8bitmp3, Aaron Ma, AbdüLhamit Yilmaz, Abhai Kollara, aflc, Ag Ramesh, Albert Z. Guo, Alex Torres, amoitra, Andrii Prymostka, angeliand, Anshuman Tripathy, Anthony Barbier, Anton Kachatkou, Anubh-V, Anuja Jakhade, Artem Ryabov, autoih, Bairen Yi, Bas Aarts, Basit Ayantunde, Ben Barsdell, Bhavani Subramanian, Brett Koonce, candy.dc, Captain-Pool, caster, cathy, Chong Yan, Choong Yin Thong, Clayne Robison, Colle, Dan Ganea, David Norman, David Refaeli, dengziming, Diego Caballero, Divyanshu, djshen, Douman, Duncan Riach, EFanZh, Elena Zhelezina, Eric Schweitz, Evgenii Zheltonozhskii, Fei Hu, fo40225, Fred Reiss, Frederic Bastien, Fredrik Knutsson, fsx950223, fwcore, George Grzegorz Pawelczak, George Sterpu, Gian Marco Iodice, Giorgio Arena, giuros01, Gomathi Ramamurthy, Guozhong Zhuang, Haifeng Jin, Haoyu Wu, HarikrishnanBalagopal, HJYOO, Huang Chen-Yi, Ilham Firdausi Putra, Imran Salam, Jared Nielsen, Jason Zaman, Jasper Vicenti, Jeff Daily, Jeff Poznanovic, Jens Elofsson, Jerry Shih, jerryyin, Jesper Dramsch, jim.meyer, Jongwon Lee, Jun Wan, Junyuan Xie, Kaixi Hou, kamalkraj, Kan Chen, Karthik Muthuraman, Keiji Ariyama, Kevin Rose, Kevin Wang, Koan-Sin Tan, kstuedem, Kwabena W. Agyeman, Lakshay Tokas, latyas, Leslie-Fang-Intel, Li, Guizi, Luciano Resende, Lukas Folle, Lukas Geiger, Mahmoud Abuzaina, Manuel Freiberger, Mark Ryan, Martin Mlostek, Masaki Kozuki, Matthew Bentham, Matthew Denton, mbhuiyan, mdfaijul, Muhwan Kim, Nagy Mostafa, nammbash, Nathan Luehr, Nathan Wells, Niranjan Hasabnis, Oleksii Volkovskyi, Olivier Moindrot, olramde, Ouyang Jin, OverLordGoldDragon, Pallavi G, Paul Andrey, Paul Wais, pkanwar23, Pooya Davoodi, Prabindh Sundareson, Rajeshwar Reddy T, Ralovich, Kristof, Refraction-Ray, Richard Barnes, richardbrks, Robert Herbig, Romeo Kienzler, Ryan Mccormick, saishruthi, Saket Khandelwal, Sami Kama, Sana Damani, Satoshi Tanaka, Sergey Mironov, Sergii Khomenko, Shahid, Shawn Presser, ShengYang1, Siddhartha Bagaria, Simon Plovyt, skeydan, srinivasan.narayanamoorthy, Stephen Mugisha, sunway513, Takeshi Watanabe, Taylor Jakobson, TengLu, TheMindVirus, ThisIsIsaac, Tim Gates, Timothy Liu, Tomer Gafner, Trent Lo, Trevor Hickey, Trevor Morris, vcarpani, Wei Wang, Wen-Heng (Jack) Chung, wenshuai, Wenshuai-Xiaomi, wenxizhu, william, William D. Irons, Xinan Jiang, Yannic, Yasir Modak, Yasuhiro Matsumoto, Yong Tang, Yongfeng Gu, Youwei Song, Zaccharie Ramzi, Zhang, Zhenyu Guo, 王振华 (Zhenhua Wang), 韩董, 이중건 Isaac Lee
We do not expect to update the 1.x branch with features, although we will issue patch releases to fix vulnerabilities for at least one year.
This is the last 1.x release for TensorFlow. We do not expect to update the 1.x branch with features, although we will issue patch releases to fix vulnerabilities for at least one year.
tensorflow pip package will by default include GPU support (same as tensorflow-gpu now) for the platforms we currently have GPU support (Linux and Windows). It will work on machines with and without Nvidia GPUs. tensorflow-gpu will still be available, and CPU-only packages can be downloaded at tensorflow-cpu for users who are concerned about package size.compat.v2 module. It contains a copy of the 1.15 main module (without contrib) in the compat.v1 module. TensorFlow 1.15 is able to emulate 2.0 behavior using the enable_v2_behavior() function.
This enables writing forward compatible code: by explicitly importing either tensorflow.compat.v1 or tensorflow.compat.v2, you can ensure that your code works without modifications against an installation of 1.15 or 2.0.EagerTensor now supports numpy buffer interface for tensors.tf.enable_control_flow_v2() and tf.disable_control_flow_v2() for enabling/disabling v2 control flow.tf.enable_v2_behavior() and TF2_BEHAVIOR=1.tf.function-decorated functions. AutoGraph is also applied in functions used with tf.data, tf.distribute and tf.keras APIS.enable_tensor_equality(), which switches the behavior such that:
== and !=, yielding a Boolean Tensor with element-wise comparison results. This will be the default behavior in 2.0.float16 for acceleration on Volta and Turing Tensor Cores. This feature can be enabled by wrapping an optimizer class with tf.train.experimental.enable_mixed_precision_graph_rewrite().TF_CUDNN_DETERMINISTIC. Setting to "true" or "1" forces the selection of deterministic cuDNN convolution and max-pooling algorithms. When this is enabled, the algorithm selection procedure itself is also deterministic.TrtGraphConverter API for TensorRT conversion.Gather, Slice, Pack, Unpack, ArgMin, ArgMax,DepthSpaceShuffle).CombinedNonMaxSuppression in TensorRT conversion which
significantly accelerates object detection models.tensorflow_core containing all the code (in the future it will contain only the private implementation) and tensorflow which is a virtual pip package doing forwarding to tensorflow_core (and in the future will contain only the public API of tensorflow). We don't expect this to be breaking, unless you were importing directly from the implementation.constraint= and .constraint with ResourceVariable.tf.keras:
OMP_NUM_THREADS is no longer used by the default Keras config. To configure the number of threads, use tf.config.threading APIs.tf.keras.model.save_model and model.save now defaults to saving a TensorFlow SavedModel.keras.backend.resize_images (and consequently, keras.layers.Upsampling2D) behavior has changed, a bug in the resizing implementation was fixed.float32, and automatically cast their inputs to the layer's dtype. If you had a model that used float64, it will probably silently use float32 in TensorFlow2, and a warning will be issued that starts with Layer "layer-name" is casting an input tensor from dtype float64 to the layer's dtype of float32. To fix, either set the default dtype to float64 with tf.keras.backend.set_floatx('float64'), or pass dtype='float64' to each of the Layer constructors. See tf.keras.layers.Layer for more information.tf.assert_* methods now raise assertions at operation creation time (i.e. when this Python line executes) if the input tensors' values are known at that time, not during the session.run(). When this happens, a noop is returned and the input tensors are marked non-feedable. In other words, if they are used as keys in feed_dict argument to session.run(), an error will be raised. Also, because some assert ops don't make it into the graph, the graph structure changes. A different graph can result in different per-op random seeds when they are not given explicitly (most often).tf.estimator:
tf.keras.estimator.model_to_estimator now supports exporting to tf.train.Checkpoint format, which allows the saved checkpoints to be compatible with model.load_weights.DenseFeatures usability in TF2tf.data:
unbatch from experimental to core API.from_tensors and from_tensor_slices and batching and unbatching of nested datasets.tf.keras:
tf.keras.estimator.model_to_estimator now supports exporting to tf.train.Checkpoint format, which allows the saved checkpoints to be compatible with model.load_weights.tf.saved_model.save now saves the list of variables, trainable variables, regularization losses, and the call function.tf.keras.experimental.export_saved_model and tf.keras.experimental.function. Please use tf.keras.models.save_model(..., save_format='tf') and tf.keras.models.load_model instead.implementation=3 mode for tf.keras.layers.LocallyConnected2D and tf.keras.layers.LocallyConnected1D layers using tf.SparseTensor to store weights, allowing a dramatic speedup for large sparse models.experimental_run_tf_function flag by default. This flag enables single training/eval/predict execution path. With this 1. All input types are converted to Dataset. 2. When distribution strategy is not specified this goes through the no-op distribution strategy path. 3. Execution is wrapped in tf.function unless run_eagerly=True is set in compile.batch_size argument is used when input is dataset/generator/keras sequence.tf.lite
GATHER support to NN API delegate.QUANTIZE.QUANTIZED_16BIT_LSTM.cycle_length argument of tf.data.Dataset.interleave to the number of schedulable CPU cores.parallel_for: Add converter for MatrixDiag.narrow_range attribute to QuantizeAndDequantizeV2 and V3.tf.strings.unsorted_segment_join.topK_v2.TypeSpec classes.Head as public API.batch_dims case.tf.sparse.from_dense utility function.TensorFlowTestCase.ResizeInputTensor now works for all delegates.EXPAND_DIMS support to NN API delegate TEST: expand_dims_testtf.cond emits a StatelessIf op if the branch functions are stateless and do not touch any resources.tf.cond, tf.while and if and while in AutoGraph now accept a nonscalar predicate if has a single element. This does not affect non-V2 control flow.tf.while_loop emits a StatelessWhile op if the cond and body functions are stateless and do not touch any resources.LogSoftMax.nested_value_rowids for ragged tensors.tf.math.cumulative_logsumexp operation.tf.ragged.stack.AddNewInputConstantTensor.MemoryAllocation::MemoryAllocation().NNAPIDelegateKernel from nnapi_delegate.ccFusedBatchNormV3 in converter.tf.gradients().precision_mode argument to TrtGraphConverter is now case insensitive.This release contains contributions from many people at Google, as well as:
a6802739, Aaron Ma, Abdullah Selek, Abolfazl Shahbazi, Ag Ramesh, Albert Z. Guo, Albin Joy, Alex Itkes, Alex Sergeev, Alexander Pivovarov, Alexey Romanov, alhkad, Amit Srivastava, amoitra, Andrew Lihonosov, Andrii Prymostka, Anuj Rawat, Astropeak, Ayush Agrawal, Bairen Yi, Bas Aarts, Bastian Eichenberger, Ben Barsdell, Benjamin Peterson, bhack, Bharat Raghunathan, Bhavani Subramanian, Bryan Cutler, candy.dc, Cao Zongyan, Captain-Pool, Casper Da Costa-Luis, Chen Guoyin, Cheng Chang, chengchingwen, Chong Yan, Choong Yin Thong, Christopher Yeh, Clayne Robison, Coady, Patrick, Dan Ganea, David Norman, Denis Khalikov, Deven Desai, Diego Caballero, Duncan Dean, Duncan Riach, Dwight J Lyle, Eamon Ito-Fisher, eashtian3, EFanZh, ejot, Elroy Ashtian Jr, Eric Schweitz, Fangjun Kuang, Fei Hu, fo40225, formath, Fred Reiss, Frederic Bastien, Fredrik Knutsson, G. Hussain Chinoy, Gabriel, gehring, George Grzegorz Pawelczak, Gianluca Varisco, Gleb Popov, Greg Peatfield, Guillaume Klein, Gurpreet Singh, Gustavo Lima Chaves, haison, Haraldur TóMas HallgríMsson, HarikrishnanBalagopal, HåKon Sandsmark, I-Hong, Ilham Firdausi Putra, Imran Salam, Jason Zaman, Jason Zavaglia, jayhpark530, jefby, Jeff Daily, Jeffrey Poznanovic, Jekyll Lai, Jeroen BéDorf, Jerry Shih, jerryyin, jiakai, JiangXIAO, Joe Bowser, Joel Shapiro, Johan Gunnarsson, Jojimon Varghese, Joon, Josh Beal, Julian Niedermeier, Jun Wan, Junqin Zhang, Junyuan Xie, Justin Tunis, Kaixi Hou, Karl Lessard, Karthik Muthuraman, Kbhute-Ibm, khanhlvg, Koock Yoon, kstuedem, Kyuwon Kim, Lakshay Tokas, leike666666, leonard951, Leslie-Fang, Leslie-Fang-Intel, Li, Guizi, Lukas Folle, Lukas Geiger, Mahmoud Abuzaina, Manraj Singh Grover, Margaret Maynard-Reid, Mark Ryan, Matt Conley, Matthew Bentham, Matthew Denton, mbhuiyan, mdfaijul, Mei Jie, merturl, MichaelKonobeev, Michal W. Tarnowski, minds, mpppk, musikisomorphie, Nagy Mostafa, Nayana Thorat, Neil, Niels Ole Salscheider, Niklas SilfverströM, Niranjan Hasabnis, ocjosen, olramde, Pariksheet Pinjari, Patrick J. Lopresti, Patrik Gustavsson, per1234, PeterLee, Phan Van Nguyen Duc, Phillip Kravtsov, Pooya Davoodi, Pranav Marathe, Putra Manggala, Qingqing Cao, Rajeshwar Reddy T, Ramon ViñAs, Rasmus Diederichsen, Reuben Morais, richardbrks, robert, RonLek, Ryan Jiang, saishruthi, Saket Khandelwal, Saleem Abdulrasool, Sami Kama, Sana-Damani, Sergii Khomenko, Severen Redwood, Shubham Goyal, Sigrid Keydana, Siju Samuel, sleighsoft, smilu97, Son Tran, Srini511, srinivasan.narayanamoorthy, Sumesh Udayakumaran, Sungmann Cho, Tae-Hwan Jung, Taehoon Lee, Takeshi Watanabe, TengLu, terryky, TheMindVirus, ThisIsIsaac, Till Hoffmann, Timothy Liu, Tomer Gafner, Tongxuan Liu, Trent Lo, Trevor Morris, Uday Bondhugula, Vasileios Lioutas, vbvg2008, Vishnuvardhan Janapati, Vivek Suryamurthy, Wei Wang, Wen-Heng (Jack) Chung, wenxizhu, William D. Irons, winstonq, wyzhao, Xiaoming (Jason) Cui, Xinan Jiang, Xinping Wang, Yann-Yy, Yasir Modak, Yong Tang, Yongfeng Gu, Yuchen Ying, Yuxin Wu, zyeric, 王振华 (Zhenhua Wang)
Your coding agent can read these notes before it upgrades. Set up the MCP server →