Стандартный и эффективный способ, насколько я понимаю, использовать Tensorflow Transform.По сути это не означает, что мы должны использовать весь конвейер TFX, если нам нужно использовать TF Transform.TF-преобразование также можно использовать в качестве автономного.
Tensorflow Transform создает граф преобразования лучей, который вводит эти преобразования в виде констант в граф Tensorflow.Поскольку эти преобразования представлены в виде констант на графике, они будут единообразными по всему обучению и обслуживанию.Преимущества такой согласованности при обучении и обслуживании:
- Устраняет перекос при обучении
- Устраняет необходимость наличия кода в системе обслуживания, что улучшает задержку.
Пример кода для преобразования TF приведен ниже:
Код для импорта всех зависимостей:
try:
import tensorflow_transform as tft
import apache_beam as beam
except ImportError:
print('Installing TensorFlow Transform. This will take a minute, ignore the warnings')
!pip install -q tensorflow_transform
print('Installing Apache Beam. This will take a minute, ignore the warnings')
!pip install -q apache_beam
import tensorflow_transform as tft
import apache_beam as beam
import tensorflow as tf
import tensorflow_transform.beam as tft_beam
from tensorflow_transform.tf_metadata import dataset_metadata
from tensorflow_transform.tf_metadata import dataset_schema
Ниже упоминается функция предварительной обработки, в которой мы упоминаем все преобразования:
def preprocessing_fn(inputs):
"""Preprocess input columns into transformed columns."""
# Since we are modifying some features and leaving others unchanged, we
# start by setting `outputs` to a copy of `inputs.
outputs = inputs.copy()
# Scale numeric columns to have range [0, 1].
for key in NUMERIC_FEATURE_KEYS:
outputs[key] = tft.scale_to_0_1(outputs[key])
for key in OPTIONAL_NUMERIC_FEATURE_KEYS:
# This is a SparseTensor because it is optional. Here we fill in a default
# value when it is missing.
dense = tf.sparse_to_dense(outputs[key].indices,
[outputs[key].dense_shape[0], 1],
outputs[key].values, default_value=0.)
# Reshaping from a batch of vectors of size 1 to a batch to scalars.
dense = tf.squeeze(dense, axis=1)
outputs[key] = tft.scale_to_0_1(dense)
return outputs
В дополнение к
tft.scale_to_0_1
Вы также можете использовать другие API для нормализации, такие как
tft.scale_by_min_max, tft.scale_to_z_score
. Для получения подробной информации вы можете обратиться по ссылке ниже.и для учебника по TF Transform.
https://www.tensorflow.org/tfx/transform/get_started
https://www.tensorflow.org/tfx/tutorials/transform/census