Стандартный и эффективный способ сделать это, как я понимаю, использовать 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
Ниже упоминается функция предварительной обработки, гдемы упоминаем все преобразования.На данный момент TF Transform не предоставляет прямой API для вменения пропущенных значений.Таким образом, только для этого мы должны написать собственный код для этого с использованием низкоуровневых API.
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)
# For all categorical columns except the label column, we generate a
# vocabulary but do not modify the feature. This vocabulary is instead
# used in the trainer, by means of a feature column, to convert the feature
# from a string to an integer id.
for key in CATEGORICAL_FEATURE_KEYS:
tft.vocabulary(inputs[key], vocab_filename=key)
# For the label column we provide the mapping from string to index.
table = tf.contrib.lookup.index_table_from_tensor(['>50K', '<=50K'])
outputs[LABEL_KEY] = table.lookup(outputs[LABEL_KEY])
return outputs
Вы можете обратиться по нижеприведенной ссылке для получения подробной информации и Учебника по TF Transform.
https://www.tensorflow.org/tfx/transform/get_started
https://www.tensorflow.org/tfx/tutorials/transform/census