TensorFlow2.7正式版上线,支持Jax模型到TensorFlowLite的转换这一重大变化是对TF/Keras调试体验的广泛重新设计,使其更加高效和有趣......”谷歌科学家Fran?oisChollet和Keras的发明者,11月5日,TensorFlow正式发布了2.7正式版,距上次2.6.1更新仅一个月,在TensorFlow博客上,官方简要介绍了新版本的主要升级内容:TensorFlow2.7majorchangestf.keras:Model.fit()、Model.predict()和Model.evaluate()方法将不再将(batch_size,)输入数据上升到(batch_size,1)。这使得Model子类可以在其train_step中处理标量数据()/test_step()/predict_step()方法;Model.to_yaml()和keras.models.model_from_yaml方法已被替换以引发RuntimeError,因为它们可能被滥用导致任意代码执行。建议使用JSON序列化而不是YAML,或者,一个更好的选择,序列化到H5;LinearModel和WideDeepModel被移动到tf.compat.v1.keras.models.namespace(tf.compat.v1.keras.models.LinearModel和tf.compat.v1.keras.models.WideDeepModel),其实验端点为tf.keras.experimental.models.LinearModel和tf.keras.experimental.models.WideDeepModel已弃用;所有tf??.keras.initializers类的RNG行为都发生了变化,这一变化将使初始化行为在v1和v2之间保持一致。tf.lite:重命名架构中的SignatureDef表,以最大限度地与TFSavedModel签名概念保持一致。Makefile构建已弃用,Makefile用户需要将他们的构建迁移到CMake或Bazel。弃用的tflite::OpResolver::GetDelegates。TfLite的BuiltinOpResolver::GetDelegates返回的列表现在始终为空。相反,建议使用新方法tflite::OpResolver::GetDelegateCreators。TFCore:tf.Graph.get_name_scope()现在总是返回一个字符串。它以前在name_scope("")或name_scope(None)上下文中调用时返回None,现在它返回一个空字符串;tensorflow/core/ir/包含一个新的基于MLIR的Graph方言,它与GraphDef同构,将用于替换基于GraphDef的优化(例如Grappler);弃用并删除了形状推断中的attrs()函数,现在应按名称查询所有属性。以下Python符号是在早期版本的TensorFlow中意外添加的,现在已被删除。每个符号都有一个替换,但请注意替换的参数名称不同:tf.quantize_and_dequantize_v4(在TensorFlow2.4中意外引入):改用tf.quantization.quantize_and_dequantize_v2;tf.batch_mat_mul_v3(在引入TensorFlow2.6时偶然引入):改用tf.linalg.matmul;tf.sparse_segment_sum_grad(在TensorFlow2.6中意外引入):改用tf.raw_ops.SparseSegmentSumGrad。将tensorflow::int64重命名为int_64_t(前者是后者的别名)。模块化文件系统迁移:对S3和HDFS文件系统的支持已迁移到基于模块化文件系统的方法,现在可在https://github.com/tensorflow/io获得。用户需要安装tensorflow-iopython包来支持S3和HDFS。TensorFlow2.7的主要功能和改进TensorFlow调试体验的改进:以前,TensorFlow错误堆栈跟踪涉及许多内部框架,这些框架可能难以阅读并且对最终用户而言不可操作。从TF2.7开始,TensorFlow在它引发的大多数错误中过滤内部帧,以保持堆栈跟踪简短、可读并专注于最终用户可操作的内容。通过在每个异常中添加传递给该层的参数值的完整列表,增加了KerasLayer.__call__()引发的错误消息中的信息量。tf.data:tf.data服务现在支持自动分片。用户通过tf.data.experimental.service.ShardingPolicy枚举指定分片策略;tf.data.experimental.service.register_dataset现在接受一个可选的压缩参数。Keras:tf.keras.layers.Conv现在包含一个公共convolution_op方法。此方法可用于简化Conv子类的实现。有两种方法可以使用这种新方法。第一种方法如下:classStandardizedConv2D(tf.keras.layers.Conv2D):defcall(self,inputs):mean,var=tf。nn.moments(self.kernel,axes=[0,1,2],keepdims=True)返回self.convolution_op(inputs,(self.kernel-mean)/tf.sqrt(var+1e-10))你可以也使用以下方法:classStandardizedConv2D(tf.keras.Layer):defconvolution_op(self,inputs,kernel):mean,var=tf.nn.moments(kernel,axes=[0,1,2],keepdims=True)#Authorcodeusesstd+1e-5returnsuper().convolution_op(inputs,(kernel-mean)/tf.sqrt(var+1e-10))为tf.keras.metrics.Metric添加了merge_state()方法用于分布式计算;tf.keras.layers.TextVectorization添加了稀疏和参差不齐的选项,以允许从层输出SparseTensor和RaggedTensor。tf.lite:添加实验性APIExperiment_from_jax以支持从Jax模型到TensorFlowLite的转换;支持uint32数据类型;添加实验性量化调试器tf.lite.QuantizationDebugger。更多详情可查看:https://github.com/tensorflow/tensorflow/releases/tag/v2.7.0
