2023 年 3 月 28 日 — 发布者:TensorFlow & Keras 团队TensorFlow 2.12 和 Keras 2.12 已发布!此版本亮点包括新的 Keras 模型保存和导出格式、keras.utils.FeatureSpace
工具、SavedModel 指纹、TensorFlow 的 Python 3.11 轮子等等。TensorFlow CoreSavedModel 指纹使用 tf.saved_model.save
保存的模型现在带有一个指纹文件,其中包含哈希值,用于唯一标识 SavedModel。从模型内容中派生出多个指纹,允许您比较模型的结构、图形、签名和权重。在 RFC 中阅读更多关于指纹的信息,并查看 read_fingerprint
API 和 Fingerprint
类。
发布者:TensorFlow & Keras 团队
TensorFlow 2.12 和 Keras 2.12 已发布!此版本亮点包括新的 Keras 模型保存和导出格式、keras.utils.FeatureSpace
工具、SavedModel 指纹、TensorFlow 的 Python 3.11 轮子等等。
使用 tf.saved_model.save
保存的模型现在带有一个指纹文件,其中包含哈希值,用于唯一标识 SavedModel。从模型内容中派生出多个指纹,允许您比较模型的结构、图形、签名和权重。在 RFC 中阅读更多关于指纹的信息,并查看 read_fingerprint
API 和 Fingerprint
类。
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 的保存和序列化,以清晰地分离两个关键用例
1. **Python 保存和重新加载。** 当您将 Keras 模型保存到 Python 运行时环境中以供稍后重新实例化时,它将与最初保存时完全相同。我们通过一种新的文件格式来实现这一点,称为 **“Keras v3”** 格式(.keras
)。您可以通过调用model.save("your_model.keras", save_format="keras_v3")
来开始使用它。
2. **模型导出** 用于在可能根本不支持 Python 的运行时环境中进行推理(例如,TF Serving 运行时)。您可以通过model.export("your_model")
创建一个轻量级(单文件)导出,然后通过tf.saved_model.load("your_model")
在 TF Serving 或 Python 中重新加载它。默认情况下,此格式仅保留一个服务端点,即模型的前向传递,在重新加载后可作为.serve()
获得。keras.export.ExportArchive
类提供了进一步的自定义选项。
在 2.13 版本中,keras_v3
将成为所有扩展名为 .keras
的文件的默认格式。该格式支持非数值状态,例如词汇文件和查找表,并且易于保存具有异域状态元素(例如 FIFOQueue
)的自定义层。该格式不依赖于通过字节码或腌制加载任意代码,因此默认情况下是安全的。这对安全的机器学习来说是一个巨大的进步。请注意,由于这种以安全为中心的思维方式,Python lambdas
在加载时是不允许的。如果您想使用 lambda
,并且您信任模型的来源,您可以在加载方法中传递 safe_mode=False
。
旧格式(基于 TF SavedModel 的“h5”和“Keras SavedModel”格式)将永久保留支持。但是,我们建议您考虑采用新的 Keras v3 格式来实现更丰富的 Python 侧模型保存/重新加载,并使用 export()
来进行推理优化模型导出。
另一个令人兴奋的功能是引入了 keras.utils.FeatureSpace
工具。它使结构化数据的单步索引和预处理成为可能,包括特征哈希和特征交叉。请参阅 [特征空间教程](https://keras.org.cn/examples/structured_data/structured_data_classification_with_feature_space/) 了解更多信息。
与所有 Keras API 一样,FeatureSpace
的设计理念是逐步揭示复杂性,因此它完全可定制,您甚至可以指定依赖于您自己的预处理层的自定义特征类型。例如,如果您想创建一个对文本段落进行编码的特征,只需两行代码
from tensorflow.keras import layers, utils custom_layer = layers.TextVectorization(output_mode="tf_idf") feature_space = utils.FeatureSpace( features={ "text": FeatureSpace.feature( preprocessor=custom_layer, dtype="string", output_mode="float" ), }, output_mode="concat", ) |
tf.data
添加了对热启动输入处理的支持。如果 warm_start=True
(在 tf.data.experimental.OptimizationOptions
上),tf.data 将在迭代器创建期间预先启动后台线程(而不是等待对 GetNext
的第一次调用)。这允许用户以更高的内存使用为代价,来提高对初始 GetNext
调用的延迟。tf.data
在 tf.data.Dataset.random()
中添加了一个新的 rerandomize_each_iteration
参数,以控制在每次 epoch 中是否应该重新随机化生成的随机数序列(默认行为)。如果设置了 seed
并且 rerandomize_each_iteration=True
,random()
将在每次 epoch 中生成不同的(确定性)数字序列。当在相对较少的输入示例上进行训练时,这可能很有用,以确保模型不会学习该序列本身。