serialize_keras_object
函數keras.saving.serialize_keras_object(obj)
透過序列化 Keras 物件來檢索配置字典。
serialize_keras_object()
將 Keras 物件序列化為代表該物件的 Python 字典,並且是 deserialize_keras_object()
的互逆函數。請參閱 deserialize_keras_object()
以取得關於配置格式的更多資訊。
引數
傳回
代表該物件的 Python 字典。此 Python 字典可以透過 deserialize_keras_object()
反序列化。
deserialize_keras_object
函數keras.saving.deserialize_keras_object(
config, custom_objects=None, safe_mode=True, **kwargs
)
透過反序列化配置字典來檢索物件。
配置字典是一個 Python 字典,由一組鍵值對組成,並代表一個 Keras 物件,例如 Optimizer
、Layer
、Metrics
等。儲存和載入庫使用以下鍵來記錄 Keras 物件的資訊
class_name
:字串。這是類別的名稱,與原始碼中定義的完全相同,例如 "LossesContainer"。config
:字典。庫定義或使用者定義的鍵值對,用於儲存物件的配置,如同透過 object.get_config()
取得。module
:字串。Python 模組的路徑。內建的 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)
如果類別沒有匯出的 Keras 命名空間,則庫會透過其 module
和 class_name
追蹤它。例如
dict_structure = {
"class_name": "MetricsList",
"config": {
...
},
"module": "keras.trainers.compile_utils",
"registered_name": "MetricsList"
}
# Returns a `MetricsList` 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
時,載入物件有可能觸發任意程式碼執行。此引數僅適用於 Keras v3 模型格式。預設值為 True
。傳回
由 config
字典描述的物件。
CustomObjectScope
類別keras.saving.custom_object_scope(custom_objects)
向 Keras 反序列化內部機制公開自訂類別/函數。
在 with custom_object_scope(objects_dict)
的作用域下,Keras 方法(例如 keras.models.load_model()
或 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)
引數
{str: object}
配對的字典,其中 str
鍵是物件名稱。get_custom_objects
函數keras.saving.get_custom_objects()
檢索對自訂物件全域字典的即時參考。
使用 custom_object_scope()
設定的自訂物件不會被新增到自訂物件的全域字典中,也不會出現在傳回的字典中。
範例
get_custom_objects().clear()
get_custom_objects()['MyObject'] = MyObject
傳回
將已註冊的類別名稱映射到類別的全域字典。
register_keras_serializable
函數keras.saving.register_keras_serializable(package="Custom", name=None)
向 Keras 序列化框架註冊物件。
此裝飾器將裝飾的類別或函數注入到 Keras 自訂物件字典中,以便可以對其進行序列化和反序列化,而無需在使用者提供的自訂物件字典中新增條目。它還注入一個函數,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`.
@register_keras_serializable('my_package')
class MyDense(keras.layers.Dense):
pass
assert get_registered_object('my_package>MyDense') == MyDense
assert get_registered_name(MyDense) == 'my_package>MyDense'
引數
key
(即 "package>name"
)以識別類別。請注意,這是傳遞到裝飾器的第一個引數。None
,則將使用類別的名稱(請注意,當裝飾器僅使用一個引數時,情況就是如此,該引數將成為 package
)。傳回
一個裝飾器,用於使用傳遞的名稱註冊裝飾的類別。