tf.keras.Model
Модель, объединяющая слои в объект с функциями обучения и вывода.
tf.keras.Model(
*args, **kwargs
)
Используется в блокнотах
| Используется в руководстве | Используется в учебных пособиях |
|---|---|
Есть три способа создать экземпляр Model:
С помощью «Функционального API»
Начните с Input, объедините вызовы слоев, чтобы задать прямой проход модели, и, наконец, создайте модель на основе входных и выходных данных:
inputs = keras.Input(shape=(37,)) x = keras.layers.Dense(32, activation="relu")(inputs) outputs = keras.layers.Dense(5, activation="softmax")(x) model = keras.Model(inputs=inputs, outputs=outputs)
Примечание: Поддерживаются только словари, списки и кортежи входных тензоров. Вложенные входные данные не поддерживаются (например, списки списков или словари словарей).
Новую модель Functional API также можно создать с помощью промежуточных тензоров. Это позволяет быстро извлекать компоненты модели.
Пример:
inputs = keras.Input(shape=(None, None, 3)) processed = keras.layers.RandomCrop(width=128, height=128)(inputs) conv = keras.layers.Conv2D(filters=32, kernel_size=3)(processed) pooling = keras.layers.GlobalAveragePooling2D()(conv) feature = keras.layers.Dense(10)(pooling) full_model = keras.Model(inputs, feature) backbone = keras.Model(processed, conv) activations = keras.Model(conv, feature)
Обратите внимание, что модели backbone и activations создаются не с помощью объектов keras.Input, а с помощью тензоров, полученных из объектов keras.Input. Внутренне слои и веса будут общими для этих моделей, поэтому пользователь сможет обучать full_model и использовать backbone или activations для извлечения признаков. Входные и выходные данные модели также могут представлять собой вложенные структуры тензоров, а созданные модели являются стандартными моделями Functional API, поддерживающими все существующие API.
Путем создания подкласса класса Model
В этом случае необходимо определить слои в __init__() и реализовать прямой проход модели в call().
class MyModel(keras.Model):
def __init__(self):
super().__init__()
self.dense1 = keras.layers.Dense(32, activation="relu")
self.dense2 = keras.layers.Dense(5, activation="softmax")
def call(self, inputs):
x = self.dense1(inputs)
return self.dense2(x)
model = MyModel()
При создании подкласса Model можно дополнительно указать аргумент training (логическое значение) в call(), чтобы задать различное поведение при обучении и выводе:
class MyModel(keras.Model):
def __init__(self):
super().__init__()
self.dense1 = keras.layers.Dense(32, activation="relu")
self.dense2 = keras.layers.Dense(5, activation="softmax")
self.dropout = keras.layers.Dropout(0.5)
def call(self, inputs, training=False):
x = self.dense1(inputs)
x = self.dropout(x, training=training)
return self.dense2(x)
model = MyModel()
После создания модели можно настроить ее функции потерь и метрики с помощью model.compile(), обучить модель с помощью model.fit() или использовать ее для прогнозирования с помощью model.predict().
С помощью класса Sequential
Кроме того, keras.Sequential — это особый тип модели, представляющий собой исключительно последовательность слоев с одним входом и одним выходом.
model = keras.Sequential([
keras.Input(shape=(None, None, 3)),
keras.layers.Conv2D(filters=32, kernel_size=3),
])
| Атрибуты | |
|---|---|
compiled_metrics | |
distribute_reduction_method | |
distribute_strategy | |
input | Возвращает входной тензор (тензоры) символьной операции. Возвращает только тензор (тензоры), соответствующий первому вызову операции. |
jit_compile | |
layers | |
metrics_names | |
output | Возвращает выходной тензор (тензоры) слоя. Возвращает только тензор (тензоры), соответствующий первому вызову операции. |
run_eagerly | |
Методы
compile
compile(
optimizer='rmsprop',
loss=None,
loss_weights=None,
metrics=None,
weighted_metrics=None,
run_eagerly=False,
steps_per_execution=1,
jit_compile='auto',
auto_scale_loss=True
)
Настраивает модель для обучения.
Пример:
model.compile(
optimizer=keras.optimizers.Adam(learning_rate=1e-3),
loss=keras.losses.BinaryCrossentropy(),
metrics=[
keras.metrics.BinaryAccuracy(),
keras.metrics.FalseNegatives(),
],
)
| Аргументы | |
|---|---|
optimizer | Строка (название оптимизатора) или экземпляр оптимизатора. См. keras.optimizers. |
loss | Функция потерь. Может быть строкой (названием функции потерь) или экземпляром keras.losses.Loss. См. keras.losses. Функция потерь — это вызываемый объект с сигнатурой loss = fn(y_true, y_pred), где y_true — фактические значения, а y_pred — прогнозы модели. y_true должен иметь форму (batch_size, d0, .. dN) (за исключением разреженных функций потерь, например разреженной категориальной перекрестной энтропии, для которой требуются целочисленные массивы формы (batch_size, d0, .. dN-1)). y_pred должен иметь форму (batch_size, d0, .. dN). Функция потерь должна возвращать тензор с плавающей точкой. |
loss_weights | Необязательный список или словарь, задающий скалярные коэффициенты (числа с плавающей точкой Python) для взвешивания вкладов в функцию потерь различных выходных данных модели. В этом случае минимизируемое моделью значение функции потерь будет взвешенной суммой всех отдельных значений потерь, взвешенных с помощью коэффициентов loss_weights. Если передан список, он должен соответствовать выходным данным модели один к одному. Если передан словарь, он должен сопоставлять имена выходных данных (строки) скалярным коэффициентам. |
metrics | Список метрик, вычисляемых моделью во время обучения и тестирования. Каждый элемент может быть строкой (названием встроенной функции), функцией или экземпляром keras.metrics.Metric. См. keras.metrics. Обычно используется metrics=['accuracy']. Функция — это вызываемый объект с сигнатурой result = fn(y_true, _pred). Чтобы задать разные метрики для разных выходных данных модели с несколькими выходами, можно передать словарь, например metrics={'a':'accuracy', 'b':['accuracy', 'mse']}. Также можно передать список, чтобы указать метрику или список метрик для каждого выхода, например metrics=[['accuracy'], ['accuracy', 'mse']] или metrics=['accuracy', ['accuracy', 'mse']]. При передаче строк 'accuracy' или 'acc' мы преобразуем их в одну из метрик keras.metrics.BinaryAccuracy, keras.metrics.CategoricalAccuracy, keras.metrics.SparseCategoricalAccuracy в зависимости от форм целевых данных и выходных данных модели. Аналогичное преобразование выполняется и для строк "crossentropy" и "ce". Переданные здесь метрики вычисляются без учета весов образцов; если требуется учитывать веса образцов, укажите метрики с помощью аргумента weighted_metrics. |
weighted_metrics | Список метрик, вычисляемых с учетом весов sample_weight или class_weight во время обучения и тестирования. |
run_eagerly | Логическое значение. Если True, прямой проход этой модели никогда не будет компилироваться. Для повышения производительности при обучении рекомендуется оставить значение False, а при отладке установить True. |
steps_per_execution | Целое число. Количество пакетов, обрабатываемых за один вызов скомпилированной функции. Обработка нескольких пакетов за один вызов скомпилированной функции может значительно повысить производительность на TPU или небольших моделях с большими накладными расходами Python. За одно выполнение будет обработана максимум одна полная эпоха. Если передано число, превышающее размер эпохи, выполнение будет ограничено размером эпохи. Обратите внимание: если для steps_per_execution задано значение N, методы Callback.on_batch_begin и Callback.on_batch_end будут вызываться только через каждые N пакетов (то есть до и после каждого выполнения скомпилированной функции). Не поддерживается бэкендом PyTorch. |
jit_compile | Логическое значение или "auto". Использовать ли компиляцию XLA при компиляции модели. Для бэкендов jax и tensorflow значение jit_compile="auto" включает компиляцию XLA, если модель ее поддерживает, и отключает в противном случае. Для бэкенда torch значение "auto" по умолчанию задает немедленное выполнение, а jit_compile=True запускает выполнение с torch.compile на бэкенде "inductor". |
auto_scale_loss | Логическое значение. Если задано True, а политика типов данных модели — "mixed_float16", переданный оптимизатор будет автоматически обернут в LossScaleOptimizer, который будет динамически масштабировать функцию потерь для предотвращения потери точности при слишком малых значениях. |
compile_from_config
compile_from_config(
config
)
Компилирует модель с параметрами, указанными в конфигурации.
Этот метод использует сведения из конфигурации (оптимизатор, функция потерь, метрики и т. д.) для компиляции модели.
| Аргументы | |
|---|---|
config | Словарь со сведениями для компиляции модели. |
compiled_loss
compiled_loss(
y, y_pred, sample_weight=None, regularization_losses=None
)
compute_loss
compute_loss(
x=None, y=None, y_pred=None, sample_weight=None
)
Вычисляет общую функцию потерь, проверяет результат и возвращает его.
Подклассы могут переопределить этот метод, чтобы задать собственную логику вычисления функции потерь.
Пример:
class MyModel(Model):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.loss_tracker = metrics.Mean(name='loss')
def compute_loss(self, x, y, y_pred, sample_weight):
loss = ops.means((y_pred - y) ** 2)
loss += ops.sum(self.losses)
self.loss_tracker.update_state(loss)
return loss
def reset_metrics(self):
self.loss_tracker.reset_state()
@property
def metrics(self):
return [self.loss_tracker]
inputs = layers.Input(shape=(10,), name='my_input')
outputs = layers.Dense(10)(inputs)
model = MyModel(inputs, outputs)
model.add_loss(ops.sum(outputs))
optimizer = SGD()
model.compile(optimizer, loss='mse', steps_per_execution=10)
dataset = ...
model.fit(dataset, epochs=2, steps_per_epoch=10)
print(f"Custom loss: {model.loss_tracker.result()}")
| Аргументы | |
|---|---|
x | Входные данные. |
y | Целевые данные. |
y_pred | Прогнозы, возвращенные моделью (выходные данные model(x)) |
sample_weight | Веса образцов для взвешивания функции потерь. |
| Возвращает | |
|---|---|
Общую функцию потерь в виде скалярного тензора или None, если результат функции потерь отсутствует (например, при вызове из Model.test_step). |
compute_metrics
compute_metrics(
x, y, y_pred, sample_weight=None
)
Обновляет состояния метрик и собирает все метрики для возврата.
Подклассы могут переопределить этот метод, чтобы задать собственную логику обновления и сбора метрик.
Пример:
class MyModel(Sequential):
def compute_metrics(self, x, y, y_pred, sample_weight):
# This super call updates `self.compiled_metrics` and returns
# results for all metrics listed in `self.metrics`.
metric_results = super().compute_metrics(
x, y, y_pred, sample_weight)
# Note that `self.custom_metric` is not listed
# in `self.metrics`.
self.custom_metric.update_state(x, y, y_pred, sample_weight)
metric_results['metric_name'] = self.custom_metric.result()
return metric_results
| Аргументы | |
|---|---|
x | Входные данные. |
y | Целевые данные. |
y_pred | Прогнозы, возвращенные моделью, — выходные данные model.call(x). |
sample_weight | Веса образцов для взвешивания функции потерь. |
| Возвращает | |
|---|---|
dict со значениями, которые будут переданы в keras.callbacks.CallbackList.on_train_batch_end(). Обычно возвращаются значения метрик, перечисленных в self.metrics. | |
Example | {'loss': 0.2, 'accuracy': 0.7}. |
evaluate
evaluate(
x=None,
y=None,
batch_size=None,
verbose='auto',
sample_weight=None,
steps=None,
callbacks=None,
return_dict=False,
**kwargs
)
Возвращает значение функции потерь и значения метрик модели в режиме тестирования.
Вычисления выполняются пакетами (см. аргумент batch_size).
| Аргументы | |
|---|---|
x | Входные данные. Это могут быть:
|
y | Целевые данные. Как и входные данные x, это могут быть массивы NumPy или тензоры, нативные для используемого бэкенда. Если x — экземпляр tf.data.Dataset или keras.utils.PyDataset, указывать y не нужно (целевые данные будут получены из итератора или набора данных). |
batch_size | Целое число или None. Количество образцов в пакете для вычислений. Если не указано, для batch_size по умолчанию будет задано значение 32. Не указывайте batch_size, если данные представлены набором данных, генераторами или экземплярами keras.utils.PyDataset (так как они формируют пакеты). |
verbose | "auto", 0, 1 или 2. Режим подробного вывода. 0 = без вывода, 1 = индикатор выполнения, 2 = одна строка. В большинстве случаев "auto" принимает значение 1. Обратите внимание: индикатор выполнения мало полезен при записи данных в файл, поэтому при запуске без интерактивного взаимодействия (например, в рабочей среде) рекомендуется использовать verbose=2. По умолчанию — "auto". |
sample_weight | Необязательный массив NumPy с весами тестовых образцов, используемыми для взвешивания функции потерь. Можно передать одномерный массив NumPy с той же длиной, что и входные образцы (соответствие весов и образцов один к одному), либо, для временных данных, двумерный массив формы (samples, sequence_length), чтобы задать отдельный вес для каждого временного шага каждого образца. Этот аргумент не поддерживается, если x является набором данных; в этом случае передайте веса образцов третьим элементом x. |
steps | Целое число или None. Общее количество шагов (пакетов образцов) до завершения цикла оценки. Игнорируется при значении по умолчанию None. Если x является tf.data.Dataset, а steps — None, оценка будет выполняться до исчерпания набора данных. |
callbacks | Список экземпляров keras.callbacks.Callback. Список обратных вызовов, применяемых во время оценки. |
return_dict | Если True, функция потерь и результаты метрик возвращаются в виде словаря, где каждый ключ — это название метрики. Если False, они возвращаются в виде списка. |
| Возвращает | |
|---|---|
Скалярное значение функции потерь на тестовой выборке (если у модели один выход и нет метрик) или список скалярных значений (если у модели несколько выходов и/или метрик). Атрибут model.metrics_names содержит отображаемые метки для скалярных выходных значений. |
export
export(
filepath, format='tf_saved_model'
)
Создает артефакт TF SavedModel для вывода.
Примечание: В настоящее время этот метод можно использовать только с бэкендами TensorFlow или JAX.
Этот метод позволяет экспортировать модель в компактный артефакт SavedModel, содержащий только прямой проход модели (ее метод call()) и предназначенный для обслуживания, например с помощью TF-Serving. Прямой проход регистрируется под именем serve() (см. пример ниже).
Исходный код модели (включая все используемые пользовательские слои) больше не требуется для загрузки артефакта — он полностью автономен.
| Аргументы | |
|---|---|
filepath | Объект str или pathlib.Path. Путь для сохранения артефакта. |
Пример:
# Create the artifact
model.export("path/to/location")
# Later, in a different process / environment...
reloaded_artifact = tf.saved_model.load("path/to/location")
predictions = reloaded_artifact.serve(input_data)
Чтобы настроить конечные точки обслуживания, можно использовать низкоуровневый класс keras.export.ExportArchive. Метод export() внутри использует ExportArchive.
fit
fit(
x=None,
y=None,
batch_size=None,
epochs=1,
verbose='auto',
callbacks=None,
validation_split=0.0,
validation_data=None,
shuffle=True,
class_weight=None,
sample_weight=None,
initial_epoch=0,
steps_per_epoch=None,
validation_steps=None,
validation_batch_size=None,
validation_freq=1
)
Обучает модель в течение заданного числа эпох (итераций по набору данных).
| Аргументы | |
|---|---|
x | Входные данные. Это могут быть:
|
y | Целевые данные. Как и входные данные x, это могут быть массивы NumPy или тензоры, нативные для бэкенда. Если x — это набор данных, генератор или экземпляр keras.utils.PyDataset, указывать y не следует (поскольку целевые значения будут получены из x). |
batch_size | Целое число или None. Количество образцов на одно обновление градиента. Если не указано, значение batch_size по умолчанию будет равно 32. Не указывайте batch_size, если ваши данные представлены в виде наборов данных, генераторов или экземпляров keras.utils.PyDataset (так как они формируют пакеты). |
epochs | Целое число. Количество эпох обучения модели. Эпоха — это проход по всем предоставленным данным x и y (если только флаг steps_per_epoch не установлен в значение, отличное от None). Обратите внимание, что в сочетании с initial_epoch значение epochs следует понимать как «последняя эпоха». Модель обучается не указанное в epochs количество итераций, а только до достижения эпохи с индексом epochs. |
verbose | "auto", 0, 1 или 2. Режим подробного вывода. 0 = без вывода, 1 = индикатор выполнения, 2 = одна строка на эпоху. В большинстве случаев значение "auto" преобразуется в 1. Обратите внимание, что индикатор выполнения не особенно полезен при записи в файл, поэтому при запуске без интерактивного режима (например, в производственной среде) рекомендуется использовать verbose=2. Значение по умолчанию — "auto". |
callbacks | Список экземпляров keras.callbacks.Callback. Список обратных вызовов, применяемых во время обучения. См. раздел keras.callbacks. Обратите внимание: обратные вызовы keras.callbacks.ProgbarLogger и keras.callbacks.History создаются автоматически, и передавать их в model.fit() не нужно. Обратный вызов keras.callbacks.ProgbarLogger создаётся или не создаётся в зависимости от аргумента verbose в model.fit(). |
validation_split | Число с плавающей точкой от 0 до 1. Доля обучающих данных, используемая в качестве проверочных данных. Эта доля обучающих данных будет выделена моделью и не будет использоваться для обучения; в конце каждой эпохи на этих данных будут вычисляться функция потерь и все метрики модели. Проверочные данные выбираются из последних образцов в предоставленных данных x и y до перемешивания. Этот аргумент не поддерживается, если x — это набор данных, генератор или экземпляр keras.utils.PyDataset. Если указаны и validation_data, и validation_split, validation_data имеет приоритет над validation_split. |
validation_data | Данные, на которых в конце каждой эпохи вычисляются функция потерь и все метрики модели. Модель не будет обучаться на этих данных. Поэтому обратите внимание, что на значение функции потерь для проверочных данных, переданных с помощью validation_split или validation_data, не влияют слои регуляризации, такие как шум и прореживание. validation_data имеет приоритет над validation_split. Это могут быть: (x_val, y_val) из массивов NumPy или тензоров.(x_val, y_val, val_sample_weights) из массивов NumPy.tf.data.Dataset.keras.utils.PyDataset, возвращающий (inputs, targets) или (inputs, targets, sample_weights). |
shuffle | Логическое значение: следует ли перемешивать обучающие данные перед каждой эпохой. Этот аргумент игнорируется, если x — генератор или tf.data.Dataset. |
class_weight | Необязательный словарь, сопоставляющий индексы классов (целые числа) значениям весов (числа с плавающей точкой), используемым для взвешивания функции потерь (только во время обучения). Это может быть полезно, чтобы указать модели «уделять больше внимания» образцам из недостаточно представленного класса. Если указано class_weight и целевые значения имеют ранг 2 или выше, y должно быть закодировано методом one-hot либо для разреженных меток классов необходимо включить явное последнее измерение 1. |
sample_weight | Необязательный массив NumPy с весами обучающих образцов, используемыми для взвешивания функции потерь (только во время обучения). Можно передать одномерный массив NumPy той же длины, что и входные образцы (соответствие весов образцам один к одному) или, в случае временных данных, двумерный массив формы (samples, sequence_length), чтобы задать отдельный вес для каждого временного шага каждого образца. Этот аргумент не поддерживается, если x — это набор данных, генератор или экземпляр keras.utils.PyDataset; вместо этого передайте sample_weights третьим элементом x. Обратите внимание, что взвешивание образцов не применяется к метрикам, указанным через аргумент metrics в compile(). Чтобы применить взвешивание образцов к метрикам, укажите их через weighted_metrics в compile(). |
initial_epoch | Целое число. Эпоха, с которой следует начать обучение (полезно для возобновления ранее начатого обучения). |
steps_per_epoch | Целое число или None. Общее количество шагов (пакетов образцов) до завершения одной эпохи и начала следующей. При обучении с входными тензорами, например нативными для бэкенда тензорами, значение None по умолчанию равно количеству образцов в наборе данных, делённому на размер пакета, или 1, если это значение определить невозможно. Если x — это tf.data.Dataset, а steps_per_epoch равно None, эпоха будет выполняться до исчерпания входного набора данных. При передаче бесконечно повторяющегося набора данных необходимо указать аргумент steps_per_epoch. Если steps_per_epoch=-1, обучение будет выполняться бесконечно с бесконечно повторяющимся набором данных. |
validation_steps | Имеет значение только при наличии validation_data. Общее количество шагов (пакетов образцов), которые нужно выполнить до остановки при проверке в конце каждой эпохи. Если validation_steps равно None, проверка будет выполняться до исчерпания набора данных validation_data. В случае бесконечно повторяющегося набора данных это приведёт к бесконечному циклу. Если указано validation_steps и используется только часть набора данных, проверка каждый раз будет начинаться с начала набора данных. Это гарантирует, что при каждой проверке используются одни и те же проверочные образцы. |
validation_batch_size | Целое число или None. Количество образцов на проверочный пакет. Если не указано, по умолчанию будет использоваться batch_size. Не указывайте validation_batch_size, если ваши данные представлены в виде наборов данных или экземпляров keras.utils.PyDataset (так как они формируют пакеты). |
validation_freq | Имеет значение только при наличии проверочных данных. Задаёт количество эпох обучения до следующего запуска проверки; например, при значении validation_freq=2 проверка выполняется каждые 2 эпохи. |
Распаковка входных данных, похожих на итераторы: часто в fit() передают объект, похожий на итератор, например tf.data.Dataset или keras.utils.PyDataset, который возвращает не только признаки (x), но и, при необходимости, целевые значения (y) и веса образцов (sample_weight). Keras требует, чтобы результат таких объектов был однозначным. Итератор должен возвращать кортеж длины 1, 2 или 3, где необязательные второй и третий элементы будут использоваться соответственно для y и sample_weight. Любой другой переданный тип будет обёрнут в кортеж длины 1 и, таким образом, будет считаться x. При возврате словарей они всё равно должны соответствовать структуре кортежа верхнего уровня, например ({"x0": x0, "x1": x1}, y). Keras не будет пытаться разделять признаки, целевые значения и веса по ключам одного словаря. Одним из неподдерживаемых типов данных является namedtuple. Это связано с тем, что он ведёт себя и как упорядоченный тип данных (кортеж), и как тип данных-сопоставление (словарь). Поэтому для именованного кортежа вида namedtuple("example_tuple", ["y", "x"]) неоднозначно, следует ли менять порядок элементов при интерпретации значения. Ещё сложнее случай кортежа вида namedtuple("other_tuple", ["x", "y", "z"]), для которого неясно, предназначен ли кортеж для распаковки в x, y и sample_weight или же его нужно передать как единый элемент в x.
| Возвращает | |
|---|---|
Объект History. Его атрибут History.history содержит значения функции потерь и метрик на последовательных эпохах обучения, а также значения функции потерь и метрик на проверочных данных (если применимо). |
from_config
@classmethod
from_config(
config, custom_objects=None
)
Создаёт слой на основе его конфигурации.
Этот метод является обратным по отношению к get_config и позволяет создать такой же слой из словаря конфигурации. Он не обрабатывает связи слоя (это делает Network) и веса (это делает set_weights).
| Аргументы | |
|---|---|
config | Словарь Python, обычно являющийся результатом вызова get_config. |
| Возвращает | |
|---|---|
| Экземпляр слоя. |
get_compile_config
get_compile_config()
Возвращает сериализованную конфигурацию с информацией для компиляции модели.
Этот метод возвращает словарь конфигурации со всей информацией (оптимизатор, функция потерь, метрики и т. д.), использованной при компиляции модели.
| Возвращает | |
|---|---|
| Словарь с информацией для компиляции модели. |
get_layer
get_layer(
name=None, index=None
)
Получает слой по его имени (уникальному) или индексу.
Если указаны и name, и index, приоритет будет отдан index. Индексы определяются порядком горизонтального обхода графа (снизу вверх).
| Аргументы | |
|---|---|
name | Строка, имя слоя. |
index | Целое число, индекс слоя. |
| Возвращает | |
|---|---|
| Экземпляр слоя. |
get_metrics_result
get_metrics_result()
Возвращает значения метрик модели в виде словаря.
Если результат какой-либо метрики представляет собой словарь (содержащий несколько метрик), каждая из них добавляется на верхний уровень словаря, возвращаемого этим методом.
| Возвращает | |
|---|---|
dict со значениями метрик, перечисленных в self.metrics. | |
Example | {'loss': 0.2, 'accuracy': 0.7}. |
load_weights
load_weights(
filepath, skip_mismatch=False, **kwargs
)
Загружает веса из файла, сохранённого с помощью save_weights().
Веса загружаются с учётом топологии сети. Это означает, что архитектура должна совпадать с той, которая использовалась при сохранении весов. Обратите внимание: слои без весов не учитываются при топологической сортировке, поэтому их можно добавлять или удалять, если у них нет весов.
Частичная загрузка весов
Если вы изменили модель, например добавили новый слой (с весами) или изменили форму весов слоя, можно проигнорировать ошибки и продолжить загрузку, задав skip_mismatch=True. В этом случае все слои с несовпадающими весами будут пропущены. Для каждого пропущенного слоя будет выведено предупреждение.
| Аргументы | |
|---|---|
filepath | Строка, путь к файлу весов для загрузки. Это может быть файл .weights.h5 или файл весов устаревшего формата .h5. |
skip_mismatch | Логическое значение: следует ли пропускать загрузку слоёв, если количество весов или их форма не совпадают. |
loss
loss(
y, y_pred, sample_weight=None
)
make_predict_function
make_predict_function(
force=False
)
make_test_function
make_test_function(
force=False
)
make_train_function
make_train_function(
force=False
)
predict
predict(
x, batch_size=None, verbose='auto', steps=None, callbacks=None
)
Формирует прогнозы для входных образцов.
Вычисления выполняются пакетами. Этот метод предназначен для пакетной обработки большого количества входных данных. Он не предназначен для использования внутри циклов, которые перебирают данные и обрабатывают за раз небольшое количество входных значений.
Для небольшого количества входных значений, помещающихся в один пакет, используйте напрямую __call__() для более быстрого выполнения, например model(x), или model(x, training=False), если в модели есть такие слои, как BatchNormalization, поведение которых при инференсе отличается.
Примечание: Подробнее о различиях между методамиModel,predict()и__call__()см. в этом ответе на часто задаваемый вопрос.
| Аргументы | |
|---|---|
x | Входные образцы. Это могут быть:
|
batch_size | Целое число или None. Количество образцов в пакете. Если не указано, значение batch_size по умолчанию будет равно 32. Не указывайте batch_size, если ваши данные представлены в виде набора данных, генераторов или экземпляров keras.utils.PyDataset (так как они формируют пакеты). |
verbose | "auto", 0, 1 или 2. Режим подробного вывода. 0 = без вывода, 1 = индикатор выполнения, 2 = одна строка. В большинстве случаев значение "auto" преобразуется в 1. Обратите внимание, что индикатор выполнения не особенно полезен при записи в файл, поэтому при запуске без интерактивного режима (например, в производственной среде) рекомендуется использовать verbose=2. Значение по умолчанию — "auto". |
steps | Общее количество шагов (пакетов образцов) до завершения цикла прогнозирования. Игнорируется при использовании значения по умолчанию None. Если x — это tf.data.Dataset, а steps равно None, predict() будет выполняться до исчерпания входного набора данных. |
callbacks | Список экземпляров keras.callbacks.Callback. Список обратных вызовов, применяемых во время прогнозирования. |
| Возвращает | |
|---|---|
| Массивы NumPy с прогнозами. |
predict_on_batch
predict_on_batch(
x
)
Возвращает прогнозы для одного пакета образцов.
| Аргументы | |
|---|---|
x | Входные данные. Должны быть объектом, подобным массиву. |
| Возвращает | |
|---|---|
| Массивы NumPy с прогнозами. |
predict_step
predict_step(
data
)
reset_metrics
reset_metrics()
save
save(
filepath, overwrite=True, **kwargs
)
Сохраняет модель в файл .keras.
| Аргументы | |
|---|---|
filepath | Объект str или pathlib.Path. Путь для сохранения модели. Должен оканчиваться на .keras. |
overwrite | Следует ли перезаписать существующую модель в указанном расположении или вместо этого запросить подтверждение у пользователя в интерактивном режиме. |
save_format | Аргумент save_format устарел в Keras 3. Формат для использования в виде строки. В настоящее время поддерживается только формат "keras". |
Пример:
model = keras.Sequential(
[
keras.layers.Dense(5, input_shape=(3,)),
keras.layers.Softmax(),
],
)
model.save("model.keras")
loaded_model = keras.saving.load_model("model.keras")
x = keras.random.uniform((10, 3))
assert np.allclose(model.predict(x), loaded_model.predict(x))
Обратите внимание, что model.save() — это псевдоним keras.saving.save_model().
Сохранённый файл .keras содержит:
- Конфигурацию модели (архитектуру)
- Веса модели
- Состояние оптимизатора модели (если есть)
Таким образом, модели можно повторно создать в точно таком же состоянии.
save_weights
save_weights(
filepath, overwrite=True
)
Сохраняет все веса слоёв в файл .weights.h5.
| Аргументы | |
|---|---|
filepath | Объект str или pathlib.Path. Путь для сохранения модели. Должен оканчиваться на .weights.h5. |
overwrite | Следует ли перезаписать существующую модель в указанном расположении или вместо этого запросить подтверждение у пользователя в интерактивном режиме. |
stateless_compute_loss
stateless_compute_loss(
trainable_variables,
non_trainable_variables,
metrics_variables,
x=None,
y=None,
y_pred=None,
sample_weight=None
)
summary
summary(
line_length=None,
positions=None,
print_fn=None,
expand_nested=False,
show_trainable=False,
layer_range=None
)
Выводит текстовую сводку по сети.
| Аргументы | |
|---|---|
line_length | Общая длина выводимых строк (например, задайте это значение, чтобы адаптировать вывод к разному размеру окна терминала). |
positions | Относительные или абсолютные позиции элементов журнала в каждой строке. Если не указано, становится [0.3, 0.6, 0.70, 1.]. Значение по умолчанию — None. |
print_fn | Используемая функция вывода. По умолчанию вывод выполняется в stdout. Если stdout не работает в вашей среде, замените его на print. Функция будет вызываться для каждой строки сводки. Чтобы перехватить текст сводки, можно задать пользовательскую функцию. |
expand_nested | Следует ли разворачивать вложенные модели. Значение по умолчанию — False. |
show_trainable | Следует ли отображать, является ли слой обучаемым. Значение по умолчанию — False. |
layer_range | Список или кортеж из двух строк: имя начального слоя и имя конечного слоя (включая оба), задающих диапазон слоёв для вывода в сводке. Вместо точных имён также принимаются шаблоны регулярных выражений. В этом случае начальный предикат будет соответствовать первому элементу, совпавшему с layer_range[0], а конечный — последнему элементу, совпавшему с layer_range[1]. По умолчанию используется None, учитывающий все слои модели. |
| Вызывает исключение | |
|---|---|
ValueError | если summary() вызывается до построения модели. |
symbolic_call
symbolic_call(
*args, **kwargs
)
test_on_batch
test_on_batch(
x, y=None, sample_weight=None, return_dict=False
)
Проверяет модель на одном пакете образцов.
| Аргументы | |
|---|---|
x | Входные данные. Должны быть объектом, подобным массиву. |
y | Целевые данные. Должны быть объектом, подобным массиву. |
sample_weight | Необязательный массив той же длины, что и x, содержащий веса, применяемые к функции потерь модели для каждого образца. В случае временных данных можно передать двумерный массив формы (samples, sequence_length), чтобы задать отдельный вес для каждого временного шага каждого образца. |
return_dict | Если True, функция потерь и результаты метрик возвращаются в виде словаря, где каждому имени метрики соответствует ключ. Если False, они возвращаются в виде списка. |
| Возвращает | |
|---|---|
Скалярное значение функции потерь (если метрики отсутствуют и задано return_dict=False), список значений функции потерь и метрик (если метрики есть и задано return_dict=False) или словарь значений метрик и функции потерь (если задано return_dict=True). |
test_step
test_step(
data
)
to_json
to_json(
**kwargs
)
Возвращает строку JSON с конфигурацией сети.
Чтобы загрузить сеть из файла JSON, используйте keras.models.model_from_json(json_string, custom_objects={...}).
| Аргументы | |
|---|---|
**kwargs | Дополнительные именованные аргументы, передаваемые в json.dumps(). |
| Возвращает | |
|---|---|
| Строка JSON. |
train_on_batch
train_on_batch(
x, y=None, sample_weight=None, class_weight=None, return_dict=False
)
Выполняет одно обновление градиента на одном пакете данных.
| Аргументы | |
|---|---|
x | Входные данные. Должны быть массивоподобными. |
y | Целевые данные. Должны быть массивоподобными. |
sample_weight | Необязательный массив той же длины, что и x, содержащий веса, применяемые к функции потерь модели для каждого образца. Для временных данных можно передать 2D-массив с формой (samples, sequence_length), чтобы задать отдельный вес для каждого временного шага каждого образца. |
class_weight | Необязательный словарь, сопоставляющий индексы классов (целые числа) с весом (число с плавающей точкой), который будет применяться к функции потерь модели для образцов этого класса во время обучения. Это может быть полезно, чтобы указать модели уделять «больше внимания» образцам из недостаточно представленного класса. Если задано class_weight и ранг целевых данных равен 2 или выше, либо y должны быть закодированы методом one-hot, либо для разреженных меток классов необходимо явно добавить последнее измерение размером 1. |
return_dict | Если True, результаты функции потерь и метрик возвращаются в виде словаря, где каждый ключ — это название метрики. Если False, они возвращаются в виде списка. |
| Возвращает | |
|---|---|
Скалярное значение функции потерь (если метрик нет и return_dict=False), список значений функции потерь и метрик (если метрики есть и return_dict=False) или словарь значений метрик и функции потерь (если return_dict=True). |
train_step
train_step(
data
)
© 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/Model