tf.keras.layers.experimental.preprocessing.PreprocessingLayer
Базовый класс для слоев предобработки.
tf.keras.layers.experimental.preprocessing.PreprocessingLayer(
**kwargs
)
Не используйте этот класс напрямую: это абстрактный базовый класс! Возможно, вам нужны один из многих встроенных слоев предобработки.
Слои предобработки — это слои, состояние которых вычисляется до начала обучения модели. Они не обновляются во время обучения. Большинство слоев предобработки реализуют метод adapt() для вычисления состояния.
Класс PreprocessingLayer — это базовый класс, который необходимо наследовать для реализации собственных слоев предобработки.
| Атрибуты | |
|---|---|
is_adapted | Является ли слой уже подобранным к данным. |
Методы
adapt
adapt(
data, batch_size=None, steps=None
)
Подбирает состояние слоя предобработки к передаваемым данным.
После вызова adapt для слоя состояние слоя предобработки не будет обновляться во время обучения. Чтобы сделать слои предобработки эффективными в любом контексте распределения, они сохраняются неизменными относительно любых скомпилированных tf.Graph, которые вызывают слой. Это не влияет на использование слоя при адаптации каждого слоя только один раз, но если вы адаптируете слой несколько раз, вам необходимо позаботиться о повторной компиляции любых скомпилированных функций следующим образом:
- Если вы добавляете слой предобработки в
keras.Model, вам необходимо вызватьmodel.compileпосле каждого последующего вызоваadapt. - Если вы вызываете слой предобработки внутри
tf.data.Dataset.map, вы должны вызватьmapснова на входномtf.data.Datasetпосле каждогоadapt. - Если вы используете
tf.functionнапрямую, который вызывает слой предобработки, вам необходимо вызватьtf.functionснова на вашем вызываемом объекте после каждого последующего вызоваadapt.
tf.keras.Model пример с несколькими адаптациями:
layer = tf.keras.layers.Normalization(
axis=None)
layer.adapt([0, 2])
model = tf.keras.Sequential(layer)
model.predict([0, 1, 2])
array([-1., 0., 1.], dtype=float32)
layer.adapt([-1, 1])
model.compile() # This is needed to re-compile model.predict!
model.predict([0, 1, 2])
array([0., 1., 2.], dtype=float32)
tf.data.Dataset пример с несколькими адаптациями:
layer = tf.keras.layers.Normalization(
axis=None)
layer.adapt([0, 2])
input_ds = tf.data.Dataset.range(3)
normalized_ds = input_ds.map(layer)
list(normalized_ds.as_numpy_iterator())
[array([-1.], dtype=float32),
array([0.], dtype=float32),
array([1.], dtype=float32)]
layer.adapt([-1, 1])
normalized_ds = input_ds.map(layer) # Re-map over the input dataset.
list(normalized_ds.as_numpy_iterator())
[array([0.], dtype=float32),
array([1.], dtype=float32),
array([2.], dtype=float32)]
adapt() предназначен только для использования на одной машине для вычисления состояния слоя. Чтобы проанализировать набор данных, который не помещается на одной машине, см. Tensorflow Transform для многомашинного решения map-reduce.
| Аргументы | |
|---|---|
data | Данные для обучения. Его можно передать как tf.data Dataset или как массив NumPy. |
batch_size | Целое число или None. Количество образцов на обновление состояния. Если не указано, batch_size по умолчанию равно 32. Не указывайте batch_size если ваши данные представлены в виде наборов данных, генераторов или экземпляров keras.utils.Sequence (поскольку они генерируют пакеты). |
steps | Целое число или None. Общее количество шагов (пакетов образцов). При обучении с помощью тензоров данных, таких как тензоры данных TensorFlow, значение None по умолчанию равно количеству образцов в вашем наборе данных, деленному на размер пакета, или 1, если это невозможно определить. Если x является набором данных tf.data, а 'steps' равно None, эпоха будет выполняться до тех пор, пока входной набор данных не будет исчерпан. При передаче бесконечно повторяющегося набора данных вы должны указать аргумент steps . Этот аргумент не поддерживается с входными массивами. |
compile
compile(
run_eagerly=None, steps_per_execution=None
)
Настраивает слой для adapt.
| Аргументы | |
|---|---|
run_eagerly | Булево значение. По умолчанию False. Если True, логика этого Model не будет обернута в tf.function. Рекомендуется оставить это значение как None, если ваша Model не может быть выполнена внутри tf.function. steps_per_execution: Целое число. По умолчанию 1. Количество пакетов, выполняемых во время каждого вызова tf.function. Выполнение нескольких пакетов внутри одного вызова tf.function может значительно повысить производительность на TPU или небольших моделях с большой накладными расходами Python. |
© 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/layers/experimental/preprocessing/PreprocessingLayer