tf.keras.Sequential
| Просмотреть исходный код на GitHub |
Sequential группирует линейную стопку слоёв в tf.keras.Model.
Наследуется от: Model, Layer, Module
tf.keras.Sequential(
layers=None, name=None
)
Sequential предоставляет функции обучения и вывода для этой модели.
Примеры:
# Optionally, the first layer can receive an `input_shape` argument: model = tf.keras.Sequential() model.add(tf.keras.layers.Dense(8, input_shape=(16,))) # Afterwards, we do automatic shape inference: model.add(tf.keras.layers.Dense(4)) # This is identical to the following: model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(16,))) model.add(tf.keras.layers.Dense(8)) # Note that you can also omit the `input_shape` argument. # In that case the model doesn't have any weights until the first call # to a training/evaluation method (since it isn't yet built): model = tf.keras.Sequential() model.add(tf.keras.layers.Dense(8)) model.add(tf.keras.layers.Dense(4)) # model.weights not created yet # Whereas if you specify the input shape, the model gets built # continuously as you are adding layers: model = tf.keras.Sequential() model.add(tf.keras.layers.Dense(8, input_shape=(16,))) model.add(tf.keras.layers.Dense(4)) len(model.weights) # Returns "4" # When using the delayed-build pattern (no input shape specified), you can # choose to manually build your model by calling # `build(batch_input_shape)`: model = tf.keras.Sequential() model.add(tf.keras.layers.Dense(8)) model.add(tf.keras.layers.Dense(4)) model.build((None, 16)) len(model.weights) # Returns "4" # Note that when using the delayed-build pattern (no input shape specified), # the model gets built the first time you call `fit`, `eval`, or `predict`, # or the first time you call the model on some input data. model = tf.keras.Sequential() model.add(tf.keras.layers.Dense(8)) model.add(tf.keras.layers.Dense(1)) model.compile(optimizer='sgd', loss='mse') # This builds the model for the first time: model.fit(x, y, batch_size=32, epochs=10)
| Аргументы | |
|---|---|
layers | Необязательный список слоёв для добавления в модель. |
name | Необязательное имя для модели. |
| Атрибуты | |
|---|---|
distribute_strategy | tf.distribute.Strategy, в рамках которой была создана эта модель. |
layers | |
metrics_names | Возвращает метки отображения для всех выходов модели.
Примечание: inputs = tf.keras.layers.Input(shape=(3,)) outputs = tf.keras.layers.Dense(2)(inputs) model = tf.keras.models.Model(inputs=inputs, outputs=outputs) model.compile(optimizer="Adam", loss="mse", metrics=["mae"]) model.metrics_names [] x = np.random.random((2, 3)) y = np.random.randint(0, 2, (2, 2)) model.fit(x, y) model.metrics_names ['loss', 'mae'] inputs = tf.keras.layers.Input(shape=(3,)) d = tf.keras.layers.Dense(2, name='out') output_1 = d(inputs) output_2 = d(inputs) model = tf.keras.models.Model( inputs=inputs, outputs=[output_1, output_2]) model.compile(optimizer="Adam", loss="mse", metrics=["mae", "acc"]) model.fit(x, (y, y)) model.metrics_names ['loss', 'out_loss', 'out_1_loss', 'out_mae', 'out_acc', 'out_1_mae', 'out_1_acc'] |
run_eagerly | Устанавливаемый атрибут, указывающий, следует ли модели запускать вычисления в режиме eager. Вычисления в режиме eager означают, что ваша модель будет выполняться шаг за шагом, как код Python. Модель может работать медленнее, но вам будет проще отладить её, переходя к отдельным вызовам слоёв. По умолчанию мы попытаемся скомпилировать вашу модель в статическую графическую модель для достижения наилучшей производительности вычислений. |
Методы
add
add(
layer
)
Добавляет экземпляр слоя поверх стека слоёв.
| Аргументы | |
|---|---|
layer | Экземпляр слоя. |
| Исключения | |
|---|---|
TypeError | Если layer не является экземпляром слоя. |
ValueError | В случае, если аргумент layer не знает форму своего входного значения. |
ValueError | В случае, если у аргумента layer несколько выходных тензоров или он уже подключён где-то ещё (запрещено в моделях Sequential). |
compile
compile(
optimizer='rmsprop',
loss=None,
metrics=None,
loss_weights=None,
weighted_metrics=None,
run_eagerly=None,
steps_per_execution=None,
jit_compile=None,
**kwargs
)
Настраивает модель для обучения.
Пример:
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3),
loss=tf.keras.losses.BinaryCrossentropy(),
metrics=[tf.keras.metrics.BinaryAccuracy(),
tf.keras.metrics.FalseNegatives()])
| Аргументы | |
|---|---|
optimizer | Строка (название оптимизатора) или экземпляр оптимизатора. См. tf.keras.optimizers. |
loss | Функция потерь. Может быть строкой (названием функции потерь) или экземпляром tf.keras.losses.Loss. См. tf.keras.losses. Функция потерь — это любая вызываемая функция с сигнатурой loss = fn(y_true, y_pred), где y_true — значения целевых данных, а y_pred — предсказания модели. y_true должна иметь форму (batch_size, d0, .. dN) (за исключением случаев с функциями потерь, таких как sparse categorical crossentropy, которые ожидают целочисленные массивы формы (batch_size, d0, .. dN-1)). y_pred должна иметь форму (batch_size, d0, .. dN). Функция потерь должна возвращать скалярный тензор. Если используется пользовательский экземпляр Loss и reduction установлен на None, возвращаемое значение имеет форму (batch_size, d0, .. dN-1), т. е. значения потерь на образец или на временной шаг; в противном случае это скаляр. Если у модели несколько выходов, вы можете использовать различные функции потерь для каждого выхода, передавая словарь или список функций потерь. Значение функции потерь, которое будет минимизировать модель, будет затем суммой всех отдельных потерь, если не указан loss_weights. |
metrics | Список метрик, которые должны оцениваться моделью во время обучения и тестирования. Каждый из них может быть строкой (название встроенной функции), функцией или экземпляром tf.keras.metrics.Metric. См. tf.keras.metrics. Обычно используется metrics=['accuracy']. Функция — это любая вызываемая функция с сигнатурой result = fn(y_true, y_pred). Чтобы указать разные метрики для разных выходов многовыходной модели, вы также можете передать словарь, такой как metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}. Вы также можете передать список для указания метрики или списка метрик для каждого выхода, такого как metrics=[['accuracy'], ['accuracy', 'mse']] или metrics=['accuracy', ['accuracy', 'mse']]. При передаче строк 'accuracy' или 'acc' мы преобразуем их в один из tf.keras.metrics.BinaryAccuracy, tf.keras.metrics.CategoricalAccuracy, tf.keras.metrics.SparseCategoricalAccuracy в зависимости от используемой функции потерь и формы выходных данных модели. Мы делаем аналогичное преобразование для строк 'crossentropy' и 'ce'. |
loss_weights | Необязательный список или словарь, определяющий скалярные коэффициенты (числа с плавающей точкой Python), чтобы взвесить вклад функций потерь для разных выходных данных модели. Значение функции потерь, которое будет минимизировать модель, будет тогда взвешенной суммой всех отдельных потерь, взвешенных по loss_weights коэффициентам. Если список, он должен иметь взаимно однозначное соответствие выходам модели. Если словарь, он должен сопоставлять имена выходов (строки) со скалярными коэффициентами. |
weighted_metrics | Список метрик, которые должны оцениваться и взвешиваться sample_weight или class_weight во время обучения и тестирования. |
run_eagerly | Булево значение. По умолчанию False. Если True, логика этого Model не будет обернута в tf.function. Рекомендуется оставить это как None, если ваша Model не может выполняться внутри tf.function. run_eagerly=True не поддерживается при использовании tf.distribute.experimental.ParameterServerStrategy. |
steps_per_execution | Целое число. По умолчанию 1. Количество пачек, которые нужно выполнить во время каждого вызова tf.function. Выполнение нескольких пачек внутри одного вызова tf.function может значительно повысить производительность на TPU или в случае небольших моделей с высокой нагрузкой на Python. При этом выполняется максимум одна полная эпоха за одно выполнение. Если передано число, большее размера эпохи, выполнение будет усечено до размера эпохи. Обратите внимание, что если steps_per_execution установлено на N, методы Callback.on_batch_begin и Callback.on_batch_end будут вызываться только каждые N пачек (т. е. до/после каждого вызова tf.function). |
jit_compile | Если True, компилировать шаг обучения модели с использованием XLA. XLA — это оптимизирующая компиляторная система для машинного обучения. jit_compile по умолчанию не включён. Этот параметр нельзя включить с помощью run_eagerly=True. Обратите внимание, что jit_compile=True может не работать для всех моделей. Для получения более подробной информации о поддерживаемых операциях, пожалуйста, обратитесь к документации XLA. Также см. известные проблемы XLA для получения более подробной информации. |
**kwargs | Аргументы, поддерживаемые только для обратной совместимости. |
compute_loss
compute_loss(
x=None, y=None, y_pred=None, sample_weight=None
)
Вычисляет общую функцию потерь, проверяет её и возвращает результат.
Подклассы могут по желанию переопределить этот метод для обеспечения пользовательской логики вычисления функции потерь.
Пример:
class MyModel(tf.keras.Model):
def __init__(self, *args, **kwargs):
super(MyModel, self).__init__(*args, **kwargs)
self.loss_tracker = tf.keras.metrics.Mean(name='loss')
def compute_loss(self, x, y, y_pred, sample_weight):
loss = tf.reduce_mean(tf.math.squared_difference(y_pred, y))
loss += tf.add_n(self.losses)
self.loss_tracker.update_state(loss)
return loss
def reset_metrics(self):
self.loss_tracker.reset_states()
@property
def metrics(self):
return [self.loss_tracker]
tensors = tf.random.uniform((10, 10)), tf.random.uniform((10,))
dataset = tf.data.Dataset.from_tensor_slices(tensors).repeat().batch(1)
inputs = tf.keras.layers.Input(shape=(10,), name='my_input')
outputs = tf.keras.layers.Dense(10)(inputs)
model = MyModel(inputs, outputs)
model.add_loss(tf.reduce_sum(outputs))
optimizer = tf.keras.optimizers.SGD()
model.compile(optimizer, loss='mse', steps_per_execution=10)
model.fit(dataset, epochs=2, steps_per_epoch=10)
print('My custom loss: ', model.loss_tracker.result().numpy())
| Аргументы | |
|---|---|
x | Входные данные. |
y | Целевые данные. |
y_pred | Предсказания, возвращаемые моделью (выход от model(x)) |
sample_weight | Веса выборки для взвешивания функции потерь. |
| Возвращаемое значение | |
|---|---|
Общая функция потерь в виде tf.Tensor или None, если результаты функции потерь отсутствуют (что имеет место при вызове Model.test_step). |
compute_metrics
compute_metrics(
x, y, y_pred, sample_weight
)
Обновляет состояние метрик и собирает все метрики для возврата.
Подклассы могут по желанию переопределить этот метод для обеспечения пользовательской логики обновления и сбора метрик.
Пример:
class MyModel(tf.keras.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(MyModel, self).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['custom_metric_name'] = self.custom_metric.result()
return metric_results
| Аргументы | |
|---|---|
x | Входные данные. |
y | Целевые данные. |
y_pred | Предсказания, возвращаемые моделью (выход от model.call(x)) |
sample_weight | Веса выборки для взвешивания функции потерь. |
| Возвращаемое значение | |
|---|---|
Объект dict содержащий значения, которые будут переданы в tf.keras.callbacks.CallbackList.on_train_batch_end(). Как правило, возвращаются значения метрик, перечисленных в self.metrics. Пример: {'loss': 0.2, 'accuracy': 0.7}. |
evaluate
evaluate(
x=None,
y=None,
batch_size=None,
verbose='auto',
sample_weight=None,
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
return_dict=False,
**kwargs
)
Возвращает значение ошибки и значения метрик для модели в режиме тестирования.
Вычисление выполняется по частям (см. аргумент %%%CODE_BLOCK_119%%).
| Аргументы | |
|---|---|
x | Данные для входных данных. Может быть:
|
y | Данные для целевых значений. Как и данные входных данных x, они могут быть массивами NumPy или тензорами TensorFlow. Они должны быть согласованы с x (вы не можете иметь входные данные NumPy и целевые тензоры или наоборот). Если x является набором данных, генератором или экземпляром keras.utils.Sequence, то y не нужно указывать (поскольку целевые значения будут получены из итератора/набора данных). |
batch_size | Целое число или None. Количество образцов в каждой части вычислений. Если не указано, batch_size будет по умолчанию 32. Не указывайте batch_size если ваши данные представлены в виде набора данных, генераторов или экземпляров keras.utils.Sequence (поскольку они генерируют пакеты). |
verbose | Режим отображения, 0, 1 или 2. 0 = без вывода, 1 = индикатор прогресса, 2 = одна строка. "auto" по умолчанию равен 1 для большинства случаев и 2, когда используется с ParameterServerStrategy. Обратите внимание, что индикатор прогресса не очень полезен, когда вывод направлен в файл, поэтому verbose=2 рекомендуется, если выполнение не интерактивное (например, в производственной среде). |
sample_weight | Необязательный массив NumPy весов для образцов тестирования, используемый для взвешивания функции потерь. Вы можете передать плоский (одномерный) массив NumPy с такой же длиной, как у входных образцов (1:1 соответствие между весами и образцами) или, в случае временных данных, можете передать двумерный массив с формой (samples, sequence_length), чтобы применить разные веса к каждому шагу времени каждого образца. Этот аргумент не поддерживается, когда x является набором данных, вместо этого передайте веса образцов как третий элемент x. |
steps | Целое число или None. Общее количество шагов (пакетов образцов) перед завершением раунда оценки. Игнорируется с использованием значения по умолчанию None. Если x — набор данных tf.data, и steps равно None, 'evaluate' будет выполняться до тех пор, пока набор данных не будет исчерпан. Этот аргумент не поддерживается с входными массивами. |
callbacks | Список экземпляров keras.callbacks.Callback. Список колбеков для применения во время оценки. См. callbacks. |
max_queue_size | Целое число. Используется только для входных данных генератора или keras.utils.Sequence. Максимальный размер очереди генератора. Если не указано, max_queue_size будет по умолчанию 10. |
workers | Целое число. Используется только для входных данных генератора или keras.utils.Sequence. Максимальное количество процессов для запуска при использовании многопоточности на основе процессов. Если не указано, workers будет по умолчанию 1. |
use_multiprocessing | Булево значение. Используется только для входных данных генератора или keras.utils.Sequence. Если True, используйте многопоточность на основе процессов. Если не указано, use_multiprocessing будет по умолчанию False. Обратите внимание, что из-за того, что эта реализация использует многопроцессорность, вы не должны передавать не сериализуемые аргументы в генератор, так как их трудно передать дочерним процессам. |
return_dict | Если True, результаты потерь и метрик возвращаются в виде словаря, где каждый ключ — имя метрики. Если False, они возвращаются как список. |
**kwargs | В данный момент не используется. |
См. обсуждение Unpacking behavior for iterator-like inputs для Model.fit.
| Возвращаемое значение | |
|---|---|
Скалярная ошибка тестирования (если у модели один выход и нет метрик) или список скаляров (если у модели несколько выходов и/или метрик). Атрибут model.metrics_names предоставит вам метки отображения для скалярных выходов. |
| Исключения | |
|---|---|
RuntimeError | Если model.evaluate обернут в tf.function. |
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,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
Обучает модель для фиксированного числа эпох (итераций по набору данных).
| Аргументы | |
|---|---|
x | Данные ввода. Это может быть:
|
y | Данные целевых значений. Как и данные ввода x, они могут быть массивом(ами) NumPy или тензором(ами) TensorFlow. Они должны быть согласованы с x (вы не можете иметь входные данные NumPy и целевые данные тензора, или наоборот). Если x представляет собой набор данных, генератор или экземпляр keras.utils.Sequence, y не следует указывать (так как целевые значения будут получены из x). |
batch_size | Целое число или None. Количество образцов на один шаг обновления градиента. Если не указано, batch_size по умолчанию будет 32. Не указывайте batch_size, если данные представлены в виде наборов данных, генераторов или экземпляров keras.utils.Sequence (поскольку они генерируют пакеты). |
epochs | Целое число. Количество эпох для обучения модели. Эпоха — это итерация по всем данным обучения и данным валидации (если флаг steps_per_epoch установлен не на None). Обратите внимание, что в сочетании с initial_epoch, epochs следует понимать как «конечную эпоху». Модель обучается не за количество итераций, заданное epochs, а только до достижения эпохи с индексом epochs. |
verbose | 'auto', 0, 1 или 2. Режим отображения подробностей обучения. 0 = без отображения, 1 = прогресс-бар, 2 = по одной строке на эпоху. 'auto' по умолчанию устанавливается в 1 для большинства случаев, но в 2 при использовании с ParameterServerStrategy. Обратите внимание, что прогресс-бар не особенно полезен, когда выводимые данные направляются в файл, поэтому verbose=2 рекомендуется при отсутствии интерактивного режима (например, в производственной среде). |
callbacks | Список экземпляров keras.callbacks.Callback. Список обратных вызовов, применяемых во время обучения. См. tf.keras.callbacks. Обратите внимание, что обратные вызовы tf.keras.callbacks.ProgbarLogger и tf.keras.callbacks.History создаются автоматически и не нужно передавать в model.fit. Обратный вызов tf.keras.callbacks.ProgbarLogger создаётся или нет в зависимости от аргумента verbose для model.fit. Обратные вызовы с вызовами на уровне пакета в настоящее время не поддерживаются с tf.distribute.experimental.ParameterServerStrategy, и пользователям рекомендуется реализовывать вызовы на уровне эпох вместо этого с соответствующим значением steps_per_epoch. |
validation_split | Вещественное число от 0 до 1. Доля данных обучения, которая будет использоваться в качестве данных валидации. Модель выделит эту долю данных обучения, не будет обучаться на ней и будет оценивать потерю и любые метрики модели на этих данных в конце каждой эпохи. Данные валидации выбираются из последних образцов в данных обучения и данных валидации, перед перемешиванием. Этот аргумент не поддерживается, когда x является набором данных, генератором или экземпляром keras.utils.Sequence. Если оба validation_data и validation_split заданы, validation_data переопределит validation_split. validation_split ещё не поддерживается с tf.distribute.experimental.ParameterServerStrategy. |
validation_data | Данные, на которых необходимо оценить потерю и любые метрики модели в конце каждой эпохи. Модель на этих данных не будет обучаться. Следовательно, обратите внимание на тот факт, что потери валидации данных, предоставленных с помощью validation_split или validation_data, не влияют на регуляризационные слои, такие как шум и отбрасывание. validation_data переопределит validation_split. validation_data может быть:
|
shuffle | Булево значение (перемешивать ли данные обучения перед каждой эпохой) или строка ('batch'). Этот аргумент игнорируется, когда x представляет собой генератор или объект tf.data.Dataset. 'batch' — специальный вариант для работы с ограничениями данных HDF5; перемешивает данные в блоках размером пакет. Не оказывает влияния, если steps_per_epoch не равно None. |
class_weight | Необязательный словарь, сопоставляющий индексы классов (целые числа) с весом (вещественное число), используемым для взвешивания функции потерь (только во время обучения). Это может быть полезно, чтобы указать модели «уделять больше внимания» образцам из недопредставленного класса. |
sample_weight | Необязательный массив NumPy весов для обучающих образцов, используемых для взвешивания функции потерь (только во время обучения). Вы можете передать плоский (одномерный) массив NumPy той же длины, что и входные образцы (1:1 соответствие между весами и образцами), или, в случае временных данных, вы можете передать двумерный массив с формой (samples, sequence_length), чтобы применить разные веса к каждому шагу времени каждого образца. Этот аргумент не поддерживается, когда x является набором данных, генератором или keras.utils.Sequence экземпляром; вместо этого укажите sample_weights как третий элемент x. |
initial_epoch | Целое число. Эпоха, с которой начать обучение (полезно для возобновления предыдущего обучения). |
steps_per_epoch | Целое число или None. Общее количество шагов (пакетов образцов) до объявления окончания одной эпохи и начала следующей. При обучении с входными тензорами, такими как тензоры данных TensorFlow, значение None по умолчанию равно количеству образцов в вашем наборе данных, делённому на размер пакета, или 1, если это невозможно определить. Если x является набором данных tf.data, а 'steps_per_epoch' равно None, эпоха будет продолжаться до тех пор, пока набор данных не будет исчерпан. При передаче бесконечно повторяющегося набора данных вы должны указать аргумент steps_per_epoch. Если steps_per_epoch=-1, обучение будет выполняться неопределённо долго с бесконечно повторяющимся набором данных. Этот аргумент не поддерживается с входными массивами. При использовании tf.distribute.experimental.ParameterServerStrategy: steps_per_epoch=None не поддерживается. |
validation_steps | Актуально только если validation_data задан и представляет собой набор данных tf.data. Общее количество шагов (пакетов образцов), которые необходимо извлечь, прежде чем прекратить валидацию в конце каждой эпохи. Если 'validation_steps' равно None, валидация будет выполняться до тех пор, пока набор данных validation_data не будет исчерпан. В случае бесконечно повторяющегося набора данных это приведёт к бесконечному циклу. Если 'validation_steps' задано, и будет обработана только часть набора данных, оценка начнётся с начала набора данных в каждой эпохе. Это гарантирует, что каждый раз будут использованы те же образцы валидации. |
validation_batch_size | Целое число или None. Количество образцов в пакете для валидации. Если не указано, по умолчанию будет batch_size. Не указывайте validation_batch_size если данные представлены в виде наборов данных, генераторов или keras.utils.Sequence (поскольку они генерируют пакеты). |
validation_freq | Актуально только при наличии данных валидации. Целое число или экземпляр collections.abc.Container (например, список, кортеж и т. д.). Если целое число, задаёт количество эпох обучения, выполняемых перед новым запуском валидации, например, validation_freq=2 выполняет валидацию каждые 2 эпохи. Если контейнер, указывает эпохи, в которых следует выполнить валидацию, например, validation_freq=[1, 2, 10] выполняет валидацию в конце 1-й, 2-й и 10-й эпох. |
max_queue_size | Целое число. Используется только для входных данных генератора или keras.utils.Sequence. Максимальный размер очереди генератора. Если не указано, max_queue_size по умолчанию будет 10. |
workers | Целое число. Используется только для входных данных генератора или keras.utils.Sequence. Максимальное количество процессов, которые можно запустить при использовании многопотоковой обработки на основе процессов. Если не указано, workers по умолчанию будет 1. |
use_multiprocessing | Булево значение. Используется только для входных данных генератора или keras.utils.Sequence. Если True, используйте многопотоковую обработку на основе процессов. Если не указано, use_multiprocessing по умолчанию будет False. Обратите внимание, что поскольку эта реализация основана на многопроцессорности, вы не должны передавать несериализуемые аргументы генератору, так как они не могут быть легко переданы дочерним процессам. |
Поведение распаковки для входных данных, похожих на итераторы: Общим шаблоном является передача tf.data.Dataset, генератора или tf.keras.utils.Sequence в аргумент x метода fit, который, фактически, будет выдавать не только признаки (x), но также необязательно целевые значения (y) и весы выборок. Keras требует, чтобы вывод таких итераторов был однозначным. Итератор должен возвращать кортеж длиной 1, 2 или 3, где необязательные второй и третий элементы будут использованы для y и sample_weight соответственно. Любой другой тип будет заключён в кортеж длиной один, фактически обрабатывая всё как 'x'. При передаче словарей, они должны соответствовать структуре кортежа верхнего уровня. Например, ({"x0": x0, "x1": x1}, y). Keras не будет пытаться разделить признаки, целевые значения и весы из ключей единственного словаря. Примечателен тот факт, что тип данных namedtuple не поддерживается. Причина в том, что он ведет себя как упорядоченный тип данных (кортеж) и как тип данных сопоставления (словарь). Таким образом, в случае namedtuple вида: namedtuple("example_tuple", ["y", "x"]) неясно, следует ли изменять порядок элементов при интерпретации значения. Ещё хуже кортеж вида: namedtuple("other_tuple", ["x", "y", "z"]), где непонятно, предназначался ли кортеж для распаковки в x, y и sample_weight или для передачи в качестве единственного элемента в x. В результате код обработки данных просто поднимет исключение ValueError, если встретит namedtuple. (Вместе с инструкциями по устранению проблемы.)
| Возвращает | |
|---|---|
Объект History. Его атрибут History.history — запись значений потерь обучения и значений метрик на последовательных эпохах, а также значений потерь валидации и значений метрик валидации (применимо). |
| Возбуждает | |
|---|---|
RuntimeError |
|
ValueError | В случае несоответствия между предоставленными входными данными и ожиданиями модели или когда входные данные пусты. |
get_layer
get_layer(
name=None, index=None
)
Извлекает слой на основе либо его имени (уникальное), либо индекса.
Если name и index оба предоставлены, index будет иметь приоритет. Индексы основаны на порядке горизонтального прохода графа (снизу вверх).
| Аргументы | |
|---|---|
name | Строка, имя слоя. |
index | Целое число, индекс слоя. |
| Возвращает | |
|---|---|
| Экземпляр слоя. |
load_weights
load_weights(
filepath, by_name=False, skip_mismatch=False, options=None
)
Загружает все весы слоёв, либо из файла весов TensorFlow, либо из HDF5.
Если by_name равно False, весы загружаются на основе топологии сети. Это означает, что архитектура должна быть такой же, как при сохранении весов. Обратите внимание, что слои, у которых нет весов, не учитываются в топологической сортировке, поэтому добавление или удаление слоёв допустимо, если они не имеют весов.
Если by_name равно True, весы загружаются в слои только в том случае, если они имеют одинаковое имя. Это полезно для дообучения или трансферного обучения моделей, где некоторые слои изменились.
Только топологическая загрузка (by_name=False) поддерживается при загрузке весов из формата TensorFlow. Обратите внимание, что топологическая загрузка несколько отличается между форматами TensorFlow и HDF5 для пользовательских классов, наследующих от tf.keras.Model: HDF5 загружает на основе сплющенного списка весов, а формат TensorFlow загружает на основе локальных имён атрибутов, которым слои назначены в конструкторе Model.
| Аргументы | |
|---|---|
filepath | Строка, путь к файлу весов для загрузки. Для файлов весов в формате TensorFlow это префикс файла (такой же, как передавался в save_weights). Также может быть путь к SavedModel, сохранённому из model.save. |
by_name | Булево значение, загружать ли весы по имени или в топологическом порядке. Только топологическая загрузка поддерживается для файлов весов в формате TensorFlow. |
skip_mismatch | Булево значение, пропускать ли загрузку слоев, где есть несоответствие в количестве весов или форме весов (только при by_name=True). |
options | Необязательный объект tf.train.CheckpointOptions, который определяет параметры для загрузки весов. |
| Возвращает | |
|---|---|
При загрузке файла весов в формате TensorFlow возвращает тот же объект состояния, что и tf.train.Checkpoint.restore. При построении графа операции восстановления выполняются автоматически, как только сеть построена (при первом вызове для пользовательских классов, наследующих от Model, немедленно, если она уже построена). При загрузке весов в формате HDF5 возвращает |
| Возбуждает | |
|---|---|
ImportError | Если h5py недоступен и файл весов в формате HDF5. |
ValueError | Если skip_mismatch установлено в True, когда by_name равно False. |
make_predict_function
make_predict_function(
force=False
)
Создаёт функцию, выполняющую один шаг инференции.
Этот метод можно переопределить для поддержки пользовательской логики инференции. Этот метод вызывается методами Model.predict и Model.predict_on_batch.
Обычно этот метод непосредственно управляет параметрами tf.function и tf.distribute.Strategy, и делегирует фактическую логику оценки методу Model.predict_step.
Функция кэшируется при первом вызове Model.predict или Model.predict_on_batch. Кэш очищается при каждом вызове Model.compile. Вы можете пропустить кэш и повторно сгенерировать функцию с помощью force=True.
| Аргументы | |
|---|---|
force | Нужно ли перегенерировать функцию прогнозирования и пропустить кэшированную функцию, если она доступна. |
| Возвращает | |
|---|---|
Функция. Функция, созданная этим методом, должна принимать tf.data.Iterator и возвращать выходные данные Model. |
make_test_function
make_test_function(
force=False
)
Создаёт функцию, выполняющую один шаг оценки.
Этот метод можно переопределить для поддержки пользовательской логики оценки. Этот метод вызывается методами Model.evaluate и Model.test_on_batch.
Обычно этот метод непосредственно управляет параметрами tf.function и tf.distribute.Strategy, и делегирует фактическую логику оценки методу Model.test_step.
Функция кэшируется при первом вызове Model.evaluate или Model.test_on_batch. Кэш очищается при каждом вызове Model.compile. Вы можете пропустить кэш и повторно сгенерировать функцию с помощью force=True.
| Аргументы | |
|---|---|
force | Нужно ли перегенерировать функцию тестирования и пропустить кэшированную функцию, если она доступна. |
| Возвращает | |
|---|---|
Функция. Функция, созданная этим методом, должна принимать tf.data.Iterator и возвращать dict, содержащий значения, которые будут переданы в tf.keras.Callbacks.on_test_batch_end. |
make_train_function
make_train_function(
force=False
)
Создаёт функцию, выполняющую один шаг обучения.
Этот метод можно переопределить для поддержки пользовательской логики обучения. Этот метод вызывается методами Model.fit и Model.train_on_batch.
Обычно этот метод непосредственно управляет параметрами tf.function и tf.distribute.Strategy, и делегирует фактическую логику обучения методу Model.train_step.
Функция кэшируется при первом вызове Model.fit или Model.train_on_batch. Кэш очищается при каждом вызове Model.compile. Вы можете пропустить кэш и повторно сгенерировать функцию с помощью force=True.
| Аргументы | |
|---|---|
force | Нужно ли перегенерировать функцию обучения и пропустить кэшированную функцию, если она доступна. |
| Возвращаемые значения | |
|---|---|
Функция. Функция, созданная этим методом, должна принимать tf.data.Iterator, и возвращать dict, содержащий значения, которые будут переданы tf.keras.Callbacks.on_train_batch_end, такие как {'loss': 0.2, 'accuracy': 0.7}. |
pop
pop()
Удаляет последний слой в модели.
| Исключения | |
|---|---|
TypeError | если в модели нет слоёв. |
predict
predict(
x,
batch_size=None,
verbose='auto',
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
Генерирует предсказания для входных выборок.
Вычисления выполняются по частям. Этот метод предназначен для пакетной обработки большого количества входов. Он не предназначен для использования внутри циклов, которые итерируются по вашим данным и обрабатывают небольшое количество входов за раз.
Для небольшого количества входов, которые помещаются в одну часть, напрямую используйте __call__() для более быстрого выполнения, например, model(x), или model(x, training=False) если у вас есть слои, такие как tf.keras.layers.BatchNormalization, которые ведут себя иначе во время вывода. Вы можете объединить вызов отдельной модели с tf.function для дополнительного повышения производительности внутри внутреннего цикла. Если вам нужен доступ к значениям массива NumPy вместо тензоров после вызова вашей модели, вы можете использовать tensor.numpy() для получения значения массива NumPy для тензора eager.
Также обратите внимание на тот факт, что тестовая ошибка не зависит от регуляризующих слоёв, таких как шум и дропаут.
Примечание: См. эту запись в разделе вопросов и ответов для получения более подробной информации о разнице между методамиModelpredict()и__call__().
| Аргументы | |
|---|---|
x | Входные выборки. Может быть:
|
batch_size | Целое число или None. Количество выборок в пакет. Если не указано, batch_size по умолчанию будет 32. Не указывайте batch_size, если ваши данные представлены в виде набора данных, генераторов или экземпляров keras.utils.Sequence (поскольку они генерируют пакеты). |
verbose | Режим отображения, 0, 1 или 2. 0 = без отображения, 1 = полоса прогресса, 2 = одна строка. "auto" по умолчанию устанавливается в 1 для большинства случаев и в 2 при использовании с ParameterServerStrategy. Обратите внимание, что полоса прогресса не очень полезна при записи в файл, поэтому рекомендуется использовать verbose=2, если вы не работаете интерактивно (например, в производственной среде). |
steps | Общее количество шагов (пакетов выборок) перед объявлением завершения раунда прогнозирования. Игнорируется с значением по умолчанию None. Если x является набором данных tf.data и steps равно None, predict() будет выполняться до тех пор, пока входной набор данных не будет исчерпан. |
callbacks | Список экземпляров keras.callbacks.Callback. Список колбеков для применения во время прогнозирования. См. колбеки. |
max_queue_size | Целое число. Используется только для генератора или входных данных keras.utils.Sequence. Максимальный размер очереди генератора. Если не указано, max_queue_size по умолчанию будет 10. |
workers | Целое число. Используется только для генератора или входных данных keras.utils.Sequence. Максимальное количество процессов для запуска при использовании многопроцессорной обработки. Если не указано, workers по умолчанию будет 1. |
use_multiprocessing | Булево. Используется только для генератора или входных данных keras.utils.Sequence. Если True, использовать многопроцессорную обработку. Если не указано, use_multiprocessing по умолчанию будет False. Обратите внимание, что поскольку эта реализация использует многопроцессорность, вы не должны передавать несериализуемые аргументы генератору, так как они не могут быть легко переданы дочерним процессам. |
См. обсуждение Unpacking behavior for iterator-like inputs для Model.fit. Обратите внимание, что Model.predict использует те же правила интерпретации, что и Model.fit и Model.evaluate, поэтому входные данные должны быть однозначными для всех трёх методов.
| Возвращаемые значения | |
|---|---|
| Массив(ы) NumPy предсказаний. |
| Исключения | |
|---|---|
RuntimeError | Если model.predict заключён в tf.function. |
ValueError | В случае несовпадения между предоставленными входными данными и ожиданиями модели или если в состояние модели поступает число выборок, которое не кратно размеру пакета. |
predict_on_batch
predict_on_batch(
x
)
Возвращает прогнозы для одной части выборок.
| Аргументы | |
|---|---|
x | Входные данные. Может быть:
|
| Возвращаемые значения | |
|---|---|
| Массив(ы) NumPy предсказаний. |
| Исключения | |
|---|---|
RuntimeError | Если model.predict_on_batch заключён в tf.function. |
predict_step
predict_step(
data
)
Логика для одного шага вывода.
Этот метод может быть переопределён для поддержки пользовательской логики вывода. Этот метод вызывается Model.make_predict_function.
Этот метод должен содержать математическую логику для одного шага вывода. Как правило, это включает в себя прямой проход.
Подробные сведения о том, как запускается эта логика (например, настройки tf.function и tf.distribute.Strategy), должны быть оставлены Model.make_predict_function, который также может быть переопределён.
| Аргументы | |
|---|---|
data | Вложенная структура Tensor. |
| Возвращаемые значения | |
|---|---|
Результат одного шага вывода, обычно выход вызова Model на данных. |
reset_metrics
reset_metrics()
Сбрасывает состояние всех метрик в модели.
Примеры:
inputs = tf.keras.layers.Input(shape=(3,)) outputs = tf.keras.layers.Dense(2)(inputs) model = tf.keras.models.Model(inputs=inputs, outputs=outputs) model.compile(optimizer="Adam", loss="mse", metrics=["mae"])
x = np.random.random((2, 3)) y = np.random.randint(0, 2, (2, 2)) _ = model.fit(x, y, verbose=0) assert all(float(m.result()) for m in model.metrics)
model.reset_metrics() assert all(float(m.result()) == 0 for m in model.metrics)
reset_states
reset_states()
save
save(
filepath,
overwrite=True,
include_optimizer=True,
save_format=None,
signatures=None,
options=None,
save_traces=True
)
Сохраняет модель в TensorFlow SavedModel или в один файл HDF5.
Для получения подробностей см. tf.keras.models.save_model или руководство по сериализации и сохранению.
| Args | |
|---|---|
filepath | Строка, PathLike, путь к сохранённому файлу SavedModel или H5 для сохранения модели. |
overwrite | Нужно ли безмолвно перезаписывать любой существующий файл в целевом расположении или предоставить пользователю ручную подсказку. |
include_optimizer | Если True, сохранить состояние оптимизатора вместе. |
save_format | Либо 'tf', либо 'h5', указывающие, нужно ли сохранить модель в формате Tensorflow SavedModel или HDF5. По умолчанию 'tf' в TF 2.X и 'h5' в TF 1.X. |
signatures | Сигнатуры для сохранения вместе с SavedModel. Применимо только к формату 'tf'. Подробности см. в аргументе signatures в tf.saved_model.save. |
options | (применимо только к формату SavedModel) Объект tf.saved_model.SaveOptions, который задаёт параметры сохранения в SavedModel. |
save_traces | (применимо только к формату SavedModel) Если включено, SavedModel будет хранить следы функций для каждого слоя. Это можно отключить, чтобы сохранить только конфигурации каждого слоя. По умолчанию True. Отключение этого уменьшит время сериализации и размер файла, но требует, чтобы все пользовательские слои/модели реализовали метод get_config(). |
Пример:
from keras.models import load_model
model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
del model # deletes the existing model
# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')
save_spec
save_spec(
dynamic_batch=True
)
Возвращает tf.TensorSpec входных данных вызова в виде кортежа (args, kwargs).
Это значение автоматически определяется после первого вызова модели. После этого вы можете использовать его при экспорте модели для обслуживания:
model = tf.keras.Model(...)
@tf.function
def serve(*args, **kwargs):
outputs = model(*args, **kwargs)
# Apply postprocessing steps, or add additional outputs.
...
return outputs
# arg_specs is `[tf.TensorSpec(...), ...]`. kwarg_specs, in this example, is
# an empty dict since functional models do not use keyword arguments.
arg_specs, kwarg_specs = model.save_spec()
model.save(path, signatures={
'serving_default': serve.get_concrete_function(*arg_specs, **kwarg_specs)
})
| Args | |
|---|---|
dynamic_batch | Нужно ли установить размер пакета всех возвращаемых tf.TensorSpec в None. (Обратите внимание, что при определении функциональных или Sequential моделей с tf.keras.Input([...], batch_size=X), размер пакета всегда сохраняется). По умолчанию True. |
| Returns | |
|---|---|
Если входные данные модели определены, возвращает кортеж (args, kwargs). Все элементы в args и kwargs являются tf.TensorSpec. Если входные данные модели не определены, возвращает None. Входные данные модели автоматически устанавливаются при вызове модели, model.fit, model.evaluate или model.predict. |
save_weights
save_weights(
filepath, overwrite=True, save_format=None, options=None
)
Сохраняет все веса слоев.
Сохраняет в формате HDF5 или TensorFlow в зависимости от аргумента save_format.
При сохранении в формате HDF5 файл весов содержит:
-
layer_names(атрибут), список строк (упорядоченные имена слоев модели). - Для каждого слоя, группа атрибутов
groupс именемlayer.name- Для каждой такой группы слоев, атрибут группы
weight_names, список строк (упорядоченные имена весовых тензоров слоя). - Для каждого веса в слое, набор данных, хранящий значение веса, именованный по имени тензора веса.
- Для каждой такой группы слоев, атрибут группы
При сохранении в формате TensorFlow все объекты, на которые ссылается сеть, сохраняются в том же формате, что и tf.train.Checkpoint, включая любые экземпляры Layer или экземпляры Optimizer , присвоенные атрибутам объекта. Для сетей, созданных из входов и выходов с использованием tf.keras.Model(inputs, outputs), экземпляры Layer , используемые сетью, отслеживаются/сохраняются автоматически. Для пользовательских классов, которые наследуются от tf.keras.Model, экземпляры Layer должны быть присвоены атрибутам объекта, обычно в конструкторе. См. документацию по tf.train.Checkpoint и tf.keras.Model для получения подробной информации.
Хотя форматы одинаковы, не смешивайте save_weights и tf.train.Checkpoint. Точки останова, сохранённые с помощью Model.save_weights, должны загружаться с помощью Model.load_weights. Точки останова, сохраненные с помощью tf.train.Checkpoint.save, должны восстанавливаться с помощью соответствующей tf.train.Checkpoint.restore. Предпочитайте tf.train.Checkpoint save_weights для контрольных точек обучения.
Формат TensorFlow сопоставляет объекты и переменные, начиная с корневого объекта, self для save_weights, и жадно сопоставляет имена атрибутов. Для Model.save это Model, а для Checkpoint.save это Checkpoint, даже если у Checkpoint прикреплена модель. Это означает, что сохранение tf.keras.Model с помощью save_weights и загрузка в tf.train.Checkpoint с присоединённой Model не будет сопоставлять переменные Model. См. руководство по контрольным точкам обучения по контрольным точкам TensorFlow для получения подробной информации о формате TensorFlow.
| Args | |
|---|---|
filepath | Строка или PathLike, путь к файлу для сохранения весов. При сохранении в формате TensorFlow это префикс, используемый для файлов контрольных точек (генерируется несколько файлов). Обратите внимание, что суффикс '.h5' приводит к сохранению весов в формате HDF5. |
overwrite | Нужно ли безмолвно перезаписывать любой существующий файл в целевом расположении или предоставить пользователю ручную подсказку. |
save_format | Либо 'tf', либо 'h5'. Файл с filepath окончанием '.h5' или '.keras' по умолчанию сохранится в формате HDF5, если save_format равно None. В противном случае None по умолчанию равно 'tf'. |
options | Необязательный объект tf.train.CheckpointOptions, который задаёт параметры сохранения весов. |
| Raises | |
|---|---|
ImportError | Если h5py недоступен при попытке сохранить в формате HDF5. |
summary
summary(
line_length=None,
positions=None,
print_fn=None,
expand_nested=False,
show_trainable=False
)
Выводит строковый вывод сети.
| Args | |
|---|---|
line_length | Общая длина выводимых строк (например, установите это значение для адаптации вывода к различным размерам окон терминала). |
positions | Относительные или абсолютные позиции элементов журнала в каждой строке. Если не указано, по умолчанию [.33, .55, .67, 1.]. |
print_fn | Функция вывода, которую нужно использовать. По умолчанию print. Она будет вызываться для каждой строки вывода. Вы можете установить её на пользовательскую функцию для захвата строкового вывода. |
expand_nested | Нужно ли раскрывать вложенные модели. Если не указано, по умолчанию False. |
show_trainable | Нужно ли показывать, является ли слой обучаемым. Если не указано, по умолчанию False. |
| Raises | |
|---|---|
ValueError | Если summary() вызывается до построения модели. |
test_on_batch
test_on_batch(
x, y=None, sample_weight=None, reset_metrics=True, return_dict=False
)
Тестирование модели на одной группе выборок.
| Args | |
|---|---|
x | Входные данные. Может быть:
|
y | Целевые данные. Как и входные данные x, они могут быть массивами NumPy или тензорами TensorFlow. Они должны быть согласованы с x (вы не можете иметь входные данные NumPy и целевые тензоры или наоборот). |
sample_weight | Необязательный массив той же длины, что и x, содержащий веса, применяемые к потере модели для каждой выборки. В случае временных данных вы можете передать двумерный массив с формой (выборки, длина_последовательности), чтобы применить разные веса к каждому временной шагу каждой выборки. |
reset_metrics | Если True, метрики, возвращаемые только для этой группы. Если False, метрики будут накапливаться по всем группам. |
return_dict | Если True, результаты потерь и метрик возвращаются как словарь, где каждый ключ — это имя метрики. Если False, они возвращаются как список. |
| Returns | |
|---|---|
Скалярная потеря при тестировании (если у модели один выход и нет метрик) или список скаляров (если у модели несколько выходов и/или метрик). Атрибут model.metrics_names даст вам метки отображения для скалярных выходов. |
| Raises | |
|---|---|
RuntimeError | Если model.test_on_batch заключён в tf.function. |
test_step
test_step(
data
)
Логика для одного шага оценки.
Этот метод можно переопределить для поддержки пользовательской логики оценки. Этот метод вызывается Model.make_test_function.
Эта функция должна содержать математическую логику для одного шага оценки. Обычно это включает прямой проход, вычисление потерь и обновления метрик.
Детали конфигурации того, как выполняется эта логика (например, tf.function и tf.distribute.Strategy настройки) должны оставляться Model.make_test_function, который также может быть переопределен.
| Аргументы | |
|---|---|
data | Вложенная структура Tensor. |
| Возвращаемое значение | |
|---|---|
Объект dict, содержащий значения, которые будут переданы в tf.keras.callbacks.CallbackList.on_train_batch_end. Обычно возвращаются значения метрик Model. |
to_json
to_json(
**kwargs
)
Возвращает строку JSON, содержащую конфигурацию сети.
Чтобы загрузить сеть из файла сохранения в формате JSON, используйте keras.models.model_from_json(json_string, custom_objects={}).
| Аргументы | |
|---|---|
**kwargs | Дополнительные ключевые аргументы, которые будут переданы в json.dumps(). |
| Возвращаемое значение | |
|---|---|
| Строка JSON. |
to_yaml
to_yaml(
**kwargs
)
Возвращает строку YAML, содержащую конфигурацию сети.
Примечание: Начиная с TF 2.6, этот метод больше не поддерживается и будет вызывать исключение RuntimeError.
Чтобы загрузить сеть из файла сохранения в формате YAML, используйте keras.models.model_from_yaml(yaml_string, custom_objects={}).
custom_objects должен быть словарем, сопоставляющим имена пользовательских функций потерь/слоев и т. д. соответствующим функциям/классам.
| Аргументы | |
|---|---|
**kwargs | Дополнительные ключевые аргументы, которые будут переданы в yaml.dump(). |
| Возвращаемое значение | |
|---|---|
| Строка YAML. |
| Исключения | |
|---|---|
RuntimeError | Сообщает о том, что метод представляет собой угрозу безопасности |
train_on_batch
train_on_batch(
x,
y=None,
sample_weight=None,
class_weight=None,
reset_metrics=True,
return_dict=False
)
Выполняет одно обновление градиента на одной порции данных.
| Аргументы | |
|---|---|
x | Данные входных данных. Это может быть:
|
y | Данные целевого значения. Как и данные входных данных x, они могут быть массивами NumPy или тензорами TensorFlow. |
sample_weight | Необязательный массив той же длины, что и x, содержащий веса, применяемые к потерям модели для каждого образца. В случае временных данных вы можете передать двумерный массив с формой (образцы, длина_последовательности), чтобы применить разные веса к каждому временному шагу каждого образца. |
class_weight | Необязательный словарь, сопоставляющий индексы классов (целые числа) с весом (число с плавающей точкой), который применяется к потерям модели для образцов из этого класса во время обучения. Это может быть полезно, чтобы сообщить модели «уделять больше внимания» образцам из недопредставленного класса. |
reset_metrics | Если True, возвращаемые метрики будут только для этой порции. Если False, метрики будут накапливаться по всем порциям. |
return_dict | Если True, результаты потерь и метрик возвращаются как словарь, где каждый ключ — это имя метрики. Если False, они возвращаются как список. |
| Возвращаемое значение | |
|---|---|
Скалярная ошибка обучения (если у модели есть один выходной сигнал и нет метрик) или список скаляров (если у модели есть несколько выходных сигналов и/или метрик). Атрибут model.metrics_names предоставит вам метки отображения для скалярных выходных данных. |
| Исключения | |
|---|---|
RuntimeError | Если model.train_on_batch обернуто в tf.function. |
train_step
train_step(
data
)
Логика для одного шага обучения.
Этот метод можно переопределить для поддержки пользовательской логики обучения. Для конкретных примеров переопределения этого метода см. Настройка того, что происходит в fit. Этот метод вызывается Model.make_train_function.
Этот метод должен содержать математическую логику для одного шага обучения. Обычно это включает прямой проход, вычисление потерь, обратное распространение и обновления метрик.
Детали конфигурации того, как выполняется эта логика (например, tf.function и tf.distribute.Strategy настройки) должны оставляться Model.make_train_function, который также может быть переопределен.
| Аргументы | |
|---|---|
data | Вложенная структура Tensor. |
| Возвращаемое значение | |
|---|---|
Объект dict, содержащий значения, которые будут переданы в tf.keras.callbacks.CallbackList.on_train_batch_end. Обычно возвращаются значения метрик Model. Пример: {'loss': 0.2, 'accuracy': 0.7}. |
© 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/versions/r2.9/api_docs/python/tf/keras/Sequential