Общие преобразования

В этом документе мы описываем, как выполнять общие преобразования с помощью tf.transform.

Мы предполагаем, что вы уже построили лучевой конвейер согласно примерам и описываете только то, что необходимо добавить в preprocessing_fn и, возможно, в модель.

Использование строковых/категорических данных

Следующий preprocessing_fn вычислит словарь по значениям признака x с токенами в порядке убывания частоты, преобразует значения признака x в их индекс в словаре и, наконец, выполнит горячее кодирование для выходных данных.

Это часто встречается, например, в тех случаях, когда функция метки представляет собой категориальную строку. Полученное горячее кодирование готово к обучению.

def preprocessing_fn(inputs):
  integerized = tft.compute_and_apply_vocabulary(
      inputs['x'],
      num_oov_buckets=1,
      vocab_filename='x_vocab')
  one_hot_encoded = tf.one_hot(
      integerized,
      depth=tf.cast(tft.experimental.get_vocabulary_size_by_name('x_vocab') + 1,
                    tf.int32),
      on_value=1.0,
      off_value=0.0)
  return {
    'x_out': one_hot_encoded,
  }

Среднее вменение недостающих данных

В этом примере функция x является необязательной функцией, представленной как tf.SparseTensor в preprocessing_fn . Чтобы преобразовать его в плотный тензор, мы вычисляем его среднее значение и устанавливаем среднее значение в качестве значения по умолчанию, когда оно отсутствует в экземпляре.

Результирующий плотный тензор будет иметь форму [None, 1] , None представляет измерение пакета, а для второго измерения это будет количество значений, которые x может иметь для каждого экземпляра. В данном случае это 1.

def preprocessing_fn(inputs):
  return {
      'x_out': tft.sparse_tensor_to_dense_with_shape(
          inputs['x'], default_value=tft.mean(x), shape=[None, 1])
  }