TensorFlow 2.12 和 Keras 2.12 新功能简介
51CTO官方
2024/04/25
TensorFlow 2.12 和 Keras 2.12 现已发布!此版本的亮点包括全新的 Keras 模型保存和导出格式、keras.utils.FeatureSpace 实用程序、SavedModel 指纹识别、适用于 TensorFlow 的 Python 3.11 Wheel 软件包及更多内容。
SavedModel 指纹识别
使用 tf.saved_model.save 保存的模型如今附带一个指纹文件,其中包含用于仅此一个标识 SavedModel 的哈希值。该机制可以根据模型内容生产多个指纹,以便您比较不同模型之间的结构、计算图、签名和权重。如需了解有关指纹识别的更多信息,您可以参阅 RFC,也可以查看 read_fingerprint API 和 Fingerprint 类。
tf.function
tf.function 目前使用 Python inspect 库,来一致地模仿装饰函数的签名。经过装饰的行为和未经装饰的行为是相同的,甚至对于包装 (functools.wraps) 和部分应用 (functools.partial) 等复杂用法也是如此,这就是所谓的 "所见即所得"。
现在,我们可以检测不兼容的 tf.function 输入类型 (如不匹配的 functools.wraps 调用)。为了优化错误消息并提高一致性,我们还对类型约束逻辑 (input_signature) 进行了改进 (例如,某个不含参数的函数如今自动拥有 input_signature=[])。
此外,我们还添加了 experimental.extension_type.as_dict(),以将 tf.experimental.ExtensionType 转换为 Python dict。
全新的模型格式
此版本中最重要的 Keras 新功能就是全新的模型导出格式。我们已经完全重新设计了 Keras 的保存和序列化,以清晰地区分两个关键用例:
在 2.13 版本中,keras_v3 将成为所有扩展名为 .keras 的文件的默认格式。此格式支持非数值状态,如词汇表文件和对照表,并且可以轻松保存具有特殊状态元素 (例如 FIFOQueue) 的自定义层。此格式并不依赖字节码或 pickling 加载任意代码,因此默认情况下十分安全。这是安全机器学习领域的一个重大进展。请注意,在这种安全第一的思维方式下,加载时会禁用 Python lambdas。如果您想使用 lambda 并且信任模型的来源,您可以将 safe_mode=False 传递给加载方法。
旧格式 ("h5" 和基于 TF SavedModel 的 "Keras SavedModel" 格式) 仍受支持。但我们建议您考虑采用全新的 Keras v3 格式以实现更丰富的 Python 端模型保存/重新加载,并使用 export() 进行推理优化模型导出。
FeatureSpace
此版本另外一个激动人心的功能是引入了 keras.utils.FeatureSpace 实用工具。此实用程序可实现对结构化数据进行一步索引和预处理,包括特征哈希和特征交叉。您可以参阅特征空间教程了解更多信息。
与所有 Keras API 一样,FeatureSpace 实用工具的设计考虑了渐进式呈现复杂性的原则,因此它支持完全自定义,您甚至可以指定依赖自有预处理层的自定义特征类型。例如,如果您想创建一个编码文本段落的特征,只需两行代码:
以上只是亮点介绍,新版本还推出了许多其他与 Keras 相关的改进,您可以查看版本说明,了解更多内容!
温启动
tf.data 已新增对温启动输入处理的支持。如果 warm_start=True (在 tf.data.experimental.OptimizationOptions 上),tf.data 将会在迭代器创建过程中抢先启动后台线程 (而不是等待第一次调用 GetNext)。这使得用户可以缩短初始 GetNext 调用的延迟时间,但此过程需要消耗更多内存用量。
跨周期重新随机化
tf.data 向 tf.data.Dataset.random() 添加了一个全新的 rerandomize_each_iteration 参数,用于控制每个周期内所生成的随机数字的顺序是否应该重新随机排列,或是保持不变 (默认情况)。如果设置了 seed,并且 rerandomize_each_iteration=True,则 random() 将在每个周期生成不同的 (确定性) 数字序列。这在对相对较少的输入示例进行训练时十分有用,可以确保模型不会学习序列本身。
©著作权归作者所有,未经许可不可转载及商用,否则将追究法律责任