tf.keras.layers.Discretization
Слой предобработки, который группирует непрерывные признаки по диапазонам.
Наследуется от: PreprocessingLayer, Layer, Module
tf.keras.layers.Discretization(
bin_boundaries=None,
num_bins=None,
epsilon=0.01,
output_mode='int',
sparse=False,
**kwargs
)
Этот слой поместит каждый элемент входных данных в один из нескольких смежных диапазонов и выведет целочисленный индекс, указывающий, в какой диапазон был помещён каждый элемент.
Обзор и полный список слоев предобработки см. в руководстве по предобработке руководство.
Входная форма:
Любой tf.Tensor или tf.RaggedTensor размерности 2 или выше.
Выходная форма:
Такая же, как форма входа.
| Аргументы | |
|---|---|
bin_boundaries | Список границ бинов. Левый и правый бины всегда будут простираться до -inf и inf, поэтому bin_boundaries=[0., 1., 2.] создаёт бины (-inf, 0.), [0., 1.), [1., 2.), и [2., +inf). Если этот параметр установлен, adapt() вызывать не следует. |
num_bins | Целое число бинов для вычисления. Если этот параметр установлен, необходимо вызвать adapt() для обучения границ бинов. |
epsilon | Допуск погрешности, обычно небольшая доля, близкая к нулю (например, 0,01). Более высокие значения epsilon увеличивают аппроксимацию квантилей, и поэтому приводят к более неравномерным группам, но могут улучшить производительность и потребление ресурсов. |
output_mode | Указание для вывода слоя. По умолчанию "int". Значения могут быть "int", "one_hot", "multi_hot", или "count" для конфигурирования слоя следующим образом:
|
sparse | Булево значение. Применимо только к режимам вывода "one_hot", "multi_hot", и "count". Если True, возвращает SparseTensor вместо плотного Tensor. По умолчанию False. |
Примеры:
Группирование значений с плавающей точкой на основе заданных бинов.
>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = tf.keras.layers.Discretization(bin_boundaries=[0., 1., 2.])
>>> layer(input)
<tf.Tensor: shape=(2, 4), dtype=int64, numpy=
array([[0, 2, 3, 1],
[1, 3, 2, 1]])>
Группирование значений с плавающей точкой на основе числа бинов для вычисления.
>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = tf.keras.layers.Discretization(num_bins=4, epsilon=0.01)
>>> layer.adapt(input)
>>> layer(input)
<tf.Tensor: shape=(2, 4), dtype=int64, numpy=
array([[0, 2, 3, 2],
[1, 3, 3, 1]])>
| Атрибуты | |
|---|---|
is_adapted | Была ли слой уже подготовлен к данным. |
Методы
adapt
adapt(
data, batch_size=None, steps=None
)
Вычисляет границы бинов из квантилей в наборе входных данных.
Вызов adapt() на слое Discretization является альтернативой передаче аргумента bin_boundaries во время создания. Слой Discretization всегда должен быть адаптирован к набору данных или иметь передано значение bin_boundaries.
Во время adapt(), слой будет оценивать квантильные границы входного набора данных. Количество квантилей можно контролировать с помощью аргумента num_bins, а допуск погрешности для квантильных границ — с помощью аргумента epsilon.
Для того, чтобы Discretization был эффективным в любом контексте распределения, вычисленные границы остаются статичными по отношению к любым составленным tf.Graph слоям, которые вызывают слой. Вследствие этого, если слой адаптируется второй раз, все модели, использующие слой, должны быть перекомпилированы. Дополнительная информация представлена в tf.keras.layers.experimental.preprocessing.PreprocessingLayer.adapt.
adapt() предназначен только для использования в одномашинном режиме для вычисления состояния слоя. Чтобы проанализировать набор данных, который не может поместиться на одной машине, см. Tensorflow Transform для многомашинного решения по типу MapReduce.
| Аргументы | |
|---|---|
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 может значительно улучшить производительность на TPUs или небольших моделях с большой накладными расходами Python. |
reset_state
reset_state()
Сбрасывает статистику слоя предобработки.
update_state
update_state(
data
)
Накапливает статистику для слоя предобработки.
| Аргументы | |
|---|---|
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/versions/r2.9/api_docs/python/tf/keras/layers/Discretization