谷歌推出新版本TensorFlow 2.2.0,不再支持Python 2
扫描二维码
随时随地手机看文章
谷歌宣布推出了TensorFlow 2.2.0,该新版本终止了对 Python 2 的支持。现在,新的 TensorFlow Docker 镜像版本仅提供 Python 3。
主要特性和改进
· 将字符串张量的标量类型从 std::string 替换为 tensorflow::tstring,ABI更稳定了。
· TF 2 的新 Profiler,用于 CPU/GPU/TPU。它提供设备和主机性能分析,包括输入管道和 TF Ops。
· 推荐使用 pybind11 将 C++ 函数导出到 Python,尽量不要使用 SWIG,这是弃用 Swig进程的又一步努力。
· tf.distribute:
通过使用新添加的 tf.keras.layers.experimental.SyncBatchNormalization 层,添加了对全局同步 BatchNormalization 的支持。该层将在参与同步训练的所有副本之间同步 BatchNormalization 统计信息。
使用 tf.distribute.experimental.MultiWorkerMirroredStrategy 提高 GPU 多工分布式培训的性能
将 NVIDIA NCCL 更新到 2.5.7-1,以获得更好的性能和性能调整。
支持在 float16 中减少梯度。
所有实验的支持都减少了梯度压缩,以允许使用反向路径计算进行重叠梯度聚合。
弃用 experimental_run_v2 方法。
添加对 DistributedIterators 的 CompositeTensor 支持。这应该有助于防止不必要的功能跟踪和内存泄漏。
· tf.keras:
Model.fit 的主要改进:
可以通过覆盖 Model.train_step 将自定义训练逻辑与 Model.fit 结合使用。
轻松编写最新的培训循环,而不必担心 Model.fit 为你处理的所有功能(分发策略,回调,数据格式,循环逻辑等)
SavedModel 现在使用其自己的 Model._saved_model_inputs_spec attr 而不是依赖于不再为子类 Model 设置的 Model.inputs 和 Model.input_names。
生成器支持动态形状。
现在,SavedModel 格式支持所有 Keras 内置层(包括指标,预处理层和有状态 RNN 层)。
更新 Keras 批处理规范化层,以使用 fused_batch_norm 中的运行平均值和平均值计算。
· tf.lite:
默认情况下启用 TFLite 实验性新转换器。
· XLA
XLA 现在可以在 Windows 上构建并运行。所有预构建的软件包都随附有 XLA。
可以在 CPU 和 GPU 上使用“编译或抛出异常”语义为 tf.function 启用 XLA。
重大变化
tf.keras:
在tf.keras.applications中,“顶层”的名称已标准化为“预测”。仅当您的代码依赖于图层的确切名称时,这才是问题。
Huber损失函数已更新为与其他Keras损失一致。现在,在应用归约函数之前,它会计算每个样本损失的最后一个轴的平均值。
AutoGraph不再转换传递给tf.py_function,tf.py_func和tf.numpy_function的函数。
在此版本中弃用XLA_CPU和XLA_GPU设备。
将使用Bazel的cc_experimental_shared_library的最低bazel版本增加以将TF构建为2.0.0。
功能和子类模型的Keras编译/拟合行为已经统一。现在,只有在对功能模型的实际数据进行训练/评估模型之后,才可以使用模型属性(例如度量,metrics_names)。指标现在将包括模型损失和输出损失。loss_functions属性已从模型中删除。这是一个无证财产,偶然被公开,现在已被删除。
新版本包含大量 bug 修复与其他更改:
tf.data:
从实验性优化选项中删除了autotune_algorithm。
TF核心:
tf.constant始终创建CPU张量,而与当前设备上下文无关。
渴望的TensorHandles维护一个镜像列表,用于复制到本地或远程设备的任何副本。这样可以避免由于op执行而造成的任何冗余副本。
对于tf.Tensor和tf.Variable,.experimental_ref()不再是实验性的,仅可作为.ref()使用。
pfor / vectorized_map:增加了对56个以上操作进行矢量化的支持。现在也支持向量化tf.cond。
设置尽可能多的局部形状,以使我们可以在聚集op的渐变impl中进行静态推断。
如果cond和body函数为无状态,则tf.while_loop的梯度发出Stateless。这允许多个梯度,而运维在分配策略下并行运行。
通过自动生成未使用且因此未缓存用于梯度函数的运算输入/输出列表,以更快的速度加快GradientTape。
在while_v2中支持back_prop = False,但将其标记为已弃用。
尝试在依赖于数据的控制流中使用“无”时,改进错误消息。
添加RaggedTensor.numpy()。
更新RaggedTensor .__ getitem__以保留统一尺寸并允许索引为统一尺寸。
更新tf.expand_dims以始终将新维度插入为不粗糙的维度。
当id参差不齐时,更新tf.embedding_lookup以使用partition_strategy和max_norm。
在tf.gather中允许batch_dims == rank(索引)。
在tf.print中添加对bfloat16的支持。
tf.distribute:
通过MultiWorkerMirroredStrategy支持具有可变长度输入功能的embedding_column。
tf.keras:
在tf.keras.optimizer.Optimizer.apply_gradients中添加了experimental_aggregate_gradients参数。这允许自定义梯度聚合并在自定义训练循环中处理聚合的梯度。
允许pathlib.Path路径用于通过Keras API加载模型。
tf.function / AutoGraph:
现在,可以在ReplicaContext.merge_call,Strategy.extended.update和Strategy.extended.update_non_slot中使用AutoGraph。
在功能中启用了对形状不变式的实验支持。有关其他信息,请参阅tf.autograph.experimental.set_loop_options的API文档。
现在,AutoGraph错误消息会排除与AutoGraph内部的API对应的帧。
改善tf.function输入参数的形状推断,以在TensorFlow 2.x中解锁更多Grappler优化。
通过允许并行进行资源读取并仅在写入时进行同步,来改进资源的自动控制依赖性管理。
修正tf.function中对experimental_run_v2的多个状态调用的执行顺序。
现在,您可以在tf.function中使用for循环遍历RaggedTensors。
tf.lite:
将tf.lite C推理API从实验版本迁移到lite / c。
添加选项以在Android 10上禁止NNAPI CPU /部分加速
TFLite Android AAR现在包括C标头,并且需要API才能使用本机代码中的TFLite。
重构委托和委托内核源,以允许在linter中使用。
如果指定了设备名称或禁用了NNAPI CPU回退,则将委派的操作限制为实际支持的操作。
TFLite现在通过降低到tf.div op支持tf.math.reciprocal1 op。
TFLite的解压缩操作现在支持布尔张量输入。
微控制器和嵌入式代码从实验版移到了TensorFlow Lite文件夹中
检查较大的TFLite张量。
使用C ++ 17修复GPU委托崩溃。
为TFLite strided_slice添加5D支持。
修复了DEPTH_TO_SPACE委托给NNAPI的错误,该错误导致op未被加速。
使用NNAPI委托在具有LSTM节点的模型上运行时修复分段错误
修复最大/最小运算的操作数为标量时的NNAPI委托失败。
当用于减少操作的Axis输入为标量时,修复NNAPI委托失败。
公开选项以限制将委派给NNAPI的分区的数量。
如果指定了目标加速器,请使用其功能级别来确定要委派的操作,而不是SDK版本。
tf.random:
各种随机数生成改进:
为默认的random_uniform添加快速路径
random_seed文档改进。
RandomBinomial广播样本形状并将其追加到左侧而不是右侧。
添加了tf.random.stateless_binomial,tf.random.stateless_gamma,tf.random.stateless_poisson
tf.random.stateless_uniform现在支持int类型的无限制采样。
数学和线性代数:
添加tf.linalg.LinearOperatorTridiag。
添加LinearOperatorBlockLowerTriangular
将广播支持添加到tf.linalg.triangular_solve#
添加tf.math.sobol_sample op。
添加tf.math.xlog1py。
添加tf.math.special。{dawsn,expi,fresnel_cos,fresnel_sin,spence}。
将修改的离散余弦变换(MDCT)及其反函数添加到tf.signal。
TPU增强功能:
重构TpuClusterResolver以将共享逻辑移动到单独的pip包中。
支持从Cloud TPU客户端配置TPU软件版本。
允许TPU嵌入权重衰减因子乘以学习率。
XLA支持:
将独立的XLA AOT运行时目标+相关的.cc源添加到pip包中。
将内存对齐检查添加到32位ARM上的MemoryAllocation :: MemoryAllocation()。这样可以确保确定性的提前退出,而不是以后很难调试总线错误。
saved_model_cli aot_compile_cpu允许您将保存的模型编译为XLA头文件和目标文件,并将其包括在C ++程序中。
为XLA启用Igamma,Igammac。
确定性Op功能:
当环境变量TF_DETERMINISTIC_OPS设置为“ true”或“ 1”时,XLA减少发射器是确定性的。这扩展了确定性tf.nn.bias_add反向支持功能(因此也扩展了Keras层中的偏置加法的确定性反向支持),使其在启用XLA JIT兼容时也包括在内。
解决了在CUDA GPU上运行时以及环境变量TF_DETERMINSTIC_OPS或环境变量TF_CUDNN_DETERMINISTIC设置为“ true”或“ 1”时的问题,其中某些层配置导致出现异常,并显示消息“没有算法起作用!”。
跟踪和调试:
将源名称,目标名称添加到_send跟踪记录中,以便于调试。
将traceme事件添加到fastpathexecute。
其他:
解决了多标签AUC的AUC.reset_states问题#35852
修复TF升级脚本,以在出现解析错误并且输出模式就位时不删除文件。
将tensorflow / core:framework / * _ pyclif规则移动到tensorflow / core / framework:* _ pyclif。