Keras 2 API 文档 / 模型 API / 保存与序列化 / Model 配置序列化

模型配置序列化

[源代码]

get_config 方法

Model.get_config()

返回 Model 的配置。

配置是一个 Python 字典(可序列化),包含对象的配置,在本例中是 Model。这允许 Model 稍后从该配置中重新实例化(不包含其训练好的权重)。

请注意,get_config() 并不保证每次调用都返回一个新的字典副本。如果调用者想修改它,应该复制返回的字典。

建议子类化 Model 的开发者覆盖此方法,并继续从 super(MyModel, self).get_config() 更新字典,以提供此 Model 的正确配置。默认配置将返回初始化参数的基本类型的配置字典。如果子类化模型需要自定义 get_config() 实现,将引发 NotImplementedError

返回

包含此 Model 配置的 Python 字典。


[源代码]

from_config 方法

Model.from_config(config, custom_objects=None)

从配置创建层。

此方法是 get_config 的逆向操作,能够从配置字典中实例化相同的层。它不处理层连接(由 Network 处理),也不处理权重(由 set_weights 处理)。

参数

  • config:一个 Python 字典,通常是 get_config 的输出。

返回

一个层实例。


[源代码]

clone_model 函数

tf_keras.models.clone_model(model, input_tensors=None, clone_function=None)

克隆一个 Functional 或 Sequential Model 实例。

模型克隆类似于用新输入调用模型,但它会创建新的层(因此是新的权重),而不是共享现有层的权重。

请注意,clone_model 不会保留模型内共享对象的唯一性(例如,附加到两个不同层的单个变量将被恢复为两个独立的变量)。

参数

  • modelModel 的实例(可以是 Functional 模型或 Sequential 模型)。
  • input_tensors:用于构建模型的可选输入张量或 InputLayer 对象列表。如果未提供,将创建新的 Input 对象。
  • clone_function:用于克隆目标模型中每个层(除了 InputLayer 实例)的可调用函数。它接收要克隆的层实例作为参数,并返回要在模型副本中使用的相应层实例。如果未指定,此可调用函数将成为以下序列化/反序列化函数:lambda layer: layer.__class__.from_config(layer.get_config())。通过传递自定义的可调用函数,您可以自定义模型的副本,例如,通过包装某些感兴趣的层(例如,您可能想将所有 LSTM 实例替换为等效的 Bidirectional(LSTM(...)) 实例)。默认为 None

返回

Model 的一个实例,它在新的输入张量之上,使用新实例化的权重,重现了原始模型的行为。如果自定义的 clone_function 修改了层,克隆的模型可能与原始模型行为不同。

示例

# Create a test Sequential model.
model = keras.Sequential([
    keras.Input(shape=(728,)),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dense(1, activation='sigmoid'),
])
# Create a copy of the test model (with freshly initialized weights).
new_model = clone_model(model)

请注意,子类化模型无法克隆,因为它们的内部层结构未知。要在子类化模型的情况下实现与 clone_model 等效的功能,只需确保模型类实现了 get_config()(可选地实现了 from_config()),然后调用

new_model = model.__class__.from_config(model.get_config())