serialize_keras_object 函数tf_keras.utils.serialize_keras_object(obj)
通过序列化 TF-Keras 对象来获取其配置字典。
serialize_keras_object() 将一个 TF-Keras 对象序列化为一个表示该对象的 Python 字典,它是 deserialize_keras_object() 的逆函数。有关配置格式的更多信息,请参阅 deserialize_keras_object()。
参数
返回
一个表示该对象的 Python 字典。该 Python 字典可以通过 deserialize_keras_object() 进行反序列化。
deserialize_keras_object 函数tf_keras.utils.deserialize_keras_object(
config, custom_objects=None, safe_mode=True, **kwargs
)
通过反序列化配置字典来获取对象。
配置字典是一个由键值对组成的 Python 字典,它表示一个 TF-Keras 对象,例如 Optimizer、Layer、Metrics 等。保存和加载库使用以下键来记录 TF-Keras 对象的信息:
class_name:字符串。这是类名,与源代码中定义的完全相同,例如 "LossesContainer"。config:字典。库定义的或用户定义的键值对,存储对象的配置,通过 object.get_config() 获取。module:字符串。Python 模块的路径,例如 "keras.engine.compile_utils"。内置的 TF-Keras 类期望具有前缀 keras。registered_name:字符串。通过 keras.saving.register_keras_serializable(package, name) API 注册该类的键。键的格式为 '{package}>{name}',其中 package 和 name 是传递给 register_keras_serializable() 的参数。如果 name 未提供,则使用类名。如果 registered_name 成功解析为一个类(已注册的类),则字典中的 class_name 和 config 值将不会被使用。registered_name 仅用于非内置类。例如,以下字典表示带有相关配置的内置 Adam 优化器
dict_structure = {
"class_name": "Adam",
"config": {
"amsgrad": false,
"beta_1": 0.8999999761581421,
"beta_2": 0.9990000128746033,
"decay": 0.0,
"epsilon": 1e-07,
"learning_rate": 0.0010000000474974513,
"name": "Adam"
},
"module": "keras.optimizers",
"registered_name": None
}
# Returns an `Adam` instance identical to the original one.
deserialize_keras_object(dict_structure)
如果该类没有导出的 TF-Keras 命名空间,库将通过其 module 和 class_name 来跟踪它。例如:
dict_structure = {
"class_name": "LossesContainer",
"config": {
"losses": [...],
"total_loss_mean": {...},
},
"module": "keras.engine.compile_utils",
"registered_name": "LossesContainer"
}
# Returns a `LossesContainer` instance identical to the original one.
deserialize_keras_object(dict_structure)
以下字典表示一个用户自定义的 MeanSquaredError 损失函数
@keras.saving.register_keras_serializable(package='my_package')
class ModifiedMeanSquaredError(keras.losses.MeanSquaredError):
...
dict_structure = {
"class_name": "ModifiedMeanSquaredError",
"config": {
"fn": "mean_squared_error",
"name": "mean_squared_error",
"reduction": "auto"
},
"registered_name": "my_package>ModifiedMeanSquaredError"
}
# Returns the `ModifiedMeanSquaredError` object
deserialize_keras_object(dict_structure)
参数
lambda 反序列化。当 safe_mode=False 时,加载对象可能会触发任意代码执行。此参数仅适用于 TF-Keras v3 模型格式。默认为 True。返回
由 config 字典描述的对象。
CustomObjectScope 类tf_keras.saving.custom_object_scope(*args)
将自定义类/函数暴露给 TF-Keras 反序列化内部。
在 with custom_object_scope(objects_dict) 的作用域下,TF-Keras 方法(如 tf.keras.models.load_model 或 tf.keras.models.model_from_config)将能够反序列化已保存配置中引用的任何自定义对象(例如自定义层或指标)。
示例
考虑一个自定义正则化器 my_regularizer
layer = Dense(3, kernel_regularizer=my_regularizer)
# Config contains a reference to `my_regularizer`
config = layer.get_config()
...
# Later:
with custom_object_scope({'my_regularizer': my_regularizer}):
layer = Dense.from_config(config)
参数
{name: object} 对的字典。get_custom_objects 函数tf_keras.saving.get_custom_objects()
检索对全局自定义对象字典的实时引用。
通过 custom_object_scope 设置的自定义对象不会添加到全局自定义对象字典中,也不会出现在返回的字典中。
示例
get_custom_objects().clear()
get_custom_objects()['MyObject'] = MyObject
返回
全局字典,将注册的类名映射到类。
register_keras_serializable 函数tf_keras.saving.register_keras_serializable(package="Custom", name=None)
将对象注册到 TF-Keras 序列化框架。
此装饰器将装饰的类或函数注入到 TF-Keras 自定义对象字典中,这样它就可以被序列化和反序列化,而无需在用户提供的自定义对象字典中进行条目。它还会注入一个 TF-Keras 将调用该函数以获取对象的序列化字符串键。
请注意,为了被序列化和反序列化,类必须实现 get_config() 方法。函数没有这个要求。
该对象将以键 'package>name' 进行注册,其中 name 默认为对象的名称(如果未传递)。
示例
# Note that `'my_package'` is used as the `package` argument here, and since
# the `name` argument is not provided, `'MyDense'` is used as the `name`.
@keras.saving.register_keras_serializable('my_package')
class MyDense(keras.layers.Dense):
pass
assert keras.saving.get_registered_object('my_package>MyDense') == MyDense
assert keras.saving.get_registered_name(MyDense) == 'my_package>MyDense'
参数
key(为 "package>name")以标识该类。请注意,这是传递给装饰器的第一个参数。None,则使用类名(请注意,当装饰器仅使用一个参数时,该参数将成为 package)。返回
一个注册装饰类与传递的名称的装饰器。