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 (может быть функциональной или последовательной). |
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). Передавая пользовательскую функцию, вы можете вставлять новые слои до или после заданного слоя. Примечание: этот аргумент может использоваться только с функциональными моделями. |
recursive | Булево значение. Нужно ли рекурсивно клонировать любые встреченные в исходной модели 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 для создания детерминированной модели, устанавливая seed случайных чисел повсюду:
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