Spec-Zone.ru › TensorFlow

tf.keras.models.clone_model

Клонирует экземпляр Model типа Functional или Sequential.

tf.keras.models.clone_model(
    model,
    input_tensors=None,
    clone_function=None,
    call_function=None,
    recursive=False,
    **kwargs
)

Используется в ноутбуках

Используется в руководствах
  • Масштабируемое сжатие моделей
  • Федеративное обучение для генерации текста

Клонирование модели похоже на вызов модели с новыми входными данными, однако вместо совместного использования весов существующих слоев создаются новые слои (и, следовательно, новые веса).

Обратите внимание, что clone_model не сохраняет уникальность общих объектов в модели (например, одна переменная, связанная с двумя разными слоями, будет восстановлена как две отдельные переменные).

Аргументы
model Экземпляр Model (может быть моделью Functional или Sequential).
input_tensors Необязательный список входных тензоров или объектов InputLayer для построения модели. Если не указан, будут созданы новые объекты Input.
clone_function Вызываемый объект с сигнатурой fn(layer), используемый для клонирования каждого слоя целевой модели (за исключением экземпляров Input). Он принимает в качестве аргумента экземпляр слоя для клонирования и возвращает соответствующий экземпляр слоя, который будет использоваться в копии модели. Если объект не указан, по умолчанию используется следующая функция сериализации/десериализации: lambda layer: layer.__class__.from_config(layer.get_config()). Передав пользовательский вызываемый объект, можно настроить копию модели, например, обернув некоторые интересующие вас слои (например, можно заменить все экземпляры LSTM эквивалентными экземплярами Bidirectional(LSTM(...))). По умолчанию — None.
call_function Вызываемый объект с сигнатурой fn(layer, *args, **kwargs), используемый для вызова каждого клонированного слоя с набором входных данных. Он принимает экземпляр слоя, аргументы вызова и именованные аргументы, а также возвращает результаты вызова. Если объект не указан, по умолчанию используется обычный метод __call__(): def fn(layer, *args, **kwargs): return layer(*args, **kwargs). Передав пользовательский вызываемый объект, можно вставить новые слои до или после заданного слоя. Примечание. Этот аргумент можно использовать только с моделями Functional.
recursive Логическое значение. Определяет, нужно ли рекурсивно клонировать все модели Sequential или Functional, обнаруженные в исходной модели Sequential/Functional. Если False, внутренние модели клонируются вызовом clone_function(). Если True, внутренние модели клонируются вызовом clone_model() с теми же аргументами clone_function, call_function и recursive. Обратите внимание, что в этом случае call_function не будет передан ни одной модели Sequential (поскольку к моделям Sequential он неприменим).
Возвращаемое значение
Экземпляр Model, воспроизводящий поведение исходной модели на новых входных тензорах с использованием заново созданных весов. Поведение клонированной модели может отличаться от поведения исходной, если пользовательский clone_function или call_function изменяет слой или вызов слоя.

Пример:

# Create a test Sequential model.
model = keras.Sequential([
    keras.layers.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_function для обеспечения детерминированности модели путем установки случайного начального значения во всех местах:

def clone_function(layer):
    config = layer.get_config()
    if "seed" in config:
        config["seed"] = 1337
    return layer.__class__.from_config(config)

new_model = clone_model(model)

Использование call_function для добавления слоя Dropout после каждого слоя Dense (без повторного создания слоев):

def call_function(layer, *args, **kwargs):
    out = layer(*args, **kwargs)
    if isinstance(layer, keras.layers.Dense):
        out = keras.layers.Dropout(0.5)(out)
    return out

new_model = clone_model(
    model,
    clone_function=lambda x: x,  # Reuse the same layers.
    call_function=call_function,
)

Обратите внимание, что модели, созданные путем наследования, по умолчанию нельзя клонировать, поскольку их внутренняя структура слоев неизвестна. Чтобы добиться функциональности, эквивалентной clone_model, для модели, созданной путем наследования, достаточно убедиться, что класс модели реализует get_config() (и, необязательно, from_config()), а затем вызвать:

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

Для модели, созданной путем наследования, нельзя использовать пользовательский clone_function.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/keras/models/clone_model

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API