谷歌宣布推出TensorFlow 2.2.0,结束了对Python 2的支持。现在,新的TensorFlow Docker镜像版本只提供Python 3。
主要特点和改进
将字符串tmdyx的标量类型从std:string替换为tensorflow:tstring,这样可以使ABI更加稳定。
TF 2新的中央处理器/图形处理器/TPU剖析器。它提供设备和主机性能分析,包括输入管道和TF Ops。
建议使用pybind11将C函数导出到Python,尽量不要使用Swig,这是放弃SWIG进程的又一努力。
tf.distribute:
通过使用新添加的TF . keras . layers . experimental . syncbatchnormalization层,增加了对全局同步batchnormalization的支持。该层将同步参与同步训练的所有副本之间的批处理规范化统计信息。
使用TF。分发。实验性的。MultiworkermirrroredStrategy提高GPU多任务分布式训练的性能。
将英伟达NCCL更新到2.5.7-1,以获得更好的性能和性能调整。
支持减少浮动中的梯度16。
所有实验的支持减少了梯度压缩,允许使用反向路径计算进行重叠梯度聚合。
使用实验_run_v2方法。
添加对分发服务器的组合或支持。这应该有助于防止不必要的功能跟踪和内存泄漏。
tf.keras:
Model.fit的主要改进:
您可以通过重写Model.train_step对Model.fit使用自定义训练逻辑
轻松写出最新的训练周期,不用担心所有的功能(分发策略、回调、数据格式、循环逻辑等)。)那款适合你的手柄。
SavedModel现在使用自己的模型。_ saved _ model _ inputs _ specattr,而不是依赖不再为子类模型设置的Model.inputs和Model.input _ names。
生成器支持动态形状。
现在,SavedModel格式支持所有Keras内置层(包括指示器、预处理层和有状态RNN层)。
更新Keras批处理规范化层,在fused_batch_norm中使用运行平均值和平均计算。
tf.lite:
默认情况下,TFLite实验新转换器处于启用状态。
XLA
XLA现在可以在Windows上构建和运行。所有预建软件包都随XLA提供。
通过在中央处理器和图形处理器上使用“编译或抛出异常”语义,可以为tf.function启用XLA。
巨大的变化
tf.keras:
在tf.keras.applications中,“顶级”的名称已标准化为“预测”。如果您的代码依赖于图层的确切名称,这只是一个问题。
Huber损失函数已更新,与其他Keras损失保持一致。现在,在应用缩减函数之前,它计算每个样本损失的最后一个轴的平均值。
亲笔签名不再转换传递给tf.py_func、TF . py _ func和tf.py _ func的函数。
此版本不推荐使用XLA中央处理器和XLA图形处理器设备。
使用bazel添加cc _ experimental _ shared _ library的最低Bazel版本,将TF构建为2.0.0。
功能子类模型和功能子类模型的Keras编译/拟合行为已经统一。现在,模型属性(如metrics _ names)只能在训练/评估功能模型的实际数据后使用。指标现在将包括模型损失和产出损失。loss_functions属性已从模型中删除。这是一个未经许可的财产,不小心被公开了,现在已经被删除了。
新版本包含许多错误修复和其他更改:
tf.data:
Autotune_algorithm已从实验优化选项中删除。
TF核心:
不管当前的设备上下文如何,Tf.constant总是创建CPUtmdyx。
所需的张量句柄维护一个镜像列表,用于复制到本地或远程设备的任何副本。这可以避免op执行导致的任何冗余拷贝。
为了tf。张量和tf。变量,experimental _ ref()不再是实验性的,只能用作。ref()。
Pfor/vector d _ 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的解压缩操作现在支持布尔tmdyx输入。
微控制器和嵌入式代码从实验版移到了TensorFlow Lite文件夹中
检查较大的TFLitetmdyx。
使用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。