2023年3月28日 -由TensorFlow和Keras团队发布TensorFlow2.12和Keras 2.12已经发布!这个版本的亮点包括新的Keras模型保存和导出格式、keras.utils.FeatureSpace工具、SavedModel指纹、TensorFlow的Python 3.11轮子等等。 TensorFlow核心SavedModel指纹用tf.saved_model.save保存的模型现在带有指纹文件。
由TensorFlow和Keras团队发布
TensorFlow 2.12和Keras 2.12已经发布!这个版本的亮点包括新的Keras模型保存和导出格式、keras.utils.FeatureSpace 工具、SavedModel指纹、TensorFlow的Python 3.11轮子等等。
SavedModel指纹识别
用tf.saved_model.save 保存的模型现在带有一个指纹文件,其中包含哈希值以唯一地识别SavedModel。多个指纹来自于模型内容,允许你比较不同模型的结构、图形、签名和权重。阅读RFC中关于指纹的更多信息,并查看 [read_fingerprint](https://www.tensorflow.org/api_docs/python/tf/saved_model/experimental/read_fingerprint)API 和 [Fingerprint](https://www.tensorflow.org/api_docs/python/tf/saved_model/experimental/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.ExtensionTypes转换为Pythondicts。
新的模型格式
这个版本中最大的Keras新功能是新的模型导出格式。我们完全重新设计了Keras的保存和序列化,以干净地分离两个关键用例:
- **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 )。该格式不依赖于通过字节码或酸洗加载任意代码,所以它默认是安全的。这是安全ML的一大进步。注意,由于这种安全第一的思想,Pythonlambdas 在加载时是不允许的。如果你想使用lambda ,并且你相信模型的来源,你可以将safe_mode=False 传递给加载方法。
传统的格式("h5 "和基于TF SavedModel的 "Keras SavedModel "格式)将被永久地支持。然而,我们建议你考虑采用新的Keras v3格式,以获得更丰富的Python端模型保存/重载,并使用export() ,以获得推理优化的模型输出。
特征空间
另一个令人兴奋的功能是引入了keras.utils.FeatureSpace 工具。它可以对结构化数据进行一步索引和预处理--包括特征散列和特征交叉。更多信息请参见[特征空间教程](https://keras.io/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", ) |
这只是发布的亮点--还包括许多与Keras相关的改进,所以一定要查看发布说明!
tf.data
热启动
tf.data 已经增加了对暖启动输入处理的支持。如果 (在 ),tf.data将在迭代器创建过程中预先启动后台线程(而不是等待对 的第一次调用)。这允许用户改善对初始 调用的延迟,但代价是更高的内存使用。warm_start=True tf.data.experimental.OptimizationOptions GetNext GetNext
跨纪元的重新随机化
tf.data 在 中增加了一个新的 参数,以控制是否应在每个纪元重新随机化生成随机数的序列(默认行为)。如果设置了 ,那么 , 将在每个历时中产生一个不同的(确定性的)数字序列。当在相对较少的输入例子上进行训练时,这可能是有用的,以确保模型不会自己学习序列。tf.data.Dataset.random() rerandomize_each_iteration seed rerandomize_each_iteration=True random()
Infra更新
- Protobuf python运行时版本升级到4.21.9。所有protobuf *_pb2.py存根现在都是用protoc 3.21.9生成的。最小支持的protobuf运行时版本是3.20.3。
- 我们在这个版本中发布了用于 TensorFlow 包的 Python 3.11 轮子!
- 我们从这个版本中删除了对Python 3.7的支持。今后,我们将不再发布针对Python 3.7的补丁。