Transformações Comuns

Neste documento descrevemos como fazer transformações comuns com tf.transform.

Presumimos que você já construiu o pipeline do feixe conforme os exemplos e descreve apenas o que precisa ser adicionado ao preprocessing_fn e possivelmente ao modelo.

Usando dados String/Categóricos

O preprocessing_fn a seguir calculará um vocabulário sobre os valores do recurso x com tokens em ordem decrescente de frequência, converterá os valores do recurso x em seu índice no vocabulário e, finalmente, executará uma codificação one-hot para a saída.

Isso é comum, por exemplo, em casos de uso em que o recurso de rótulo é uma sequência categórica. A codificação one-hot resultante está pronta para treinamento.

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,
  }

Imputação média para dados faltantes

Neste exemplo, o recurso x é um recurso opcional, representado como tf.SparseTensor no preprocessing_fn . Para convertê-lo em um tensor denso, calculamos sua média e definimos a média como o valor padrão quando estiver faltando em uma instância.

O tensor denso resultante terá a forma [None, 1] , None representa a dimensão do lote e para a segunda dimensão será o número de valores que x pode ter por instância. Neste caso é 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])
  }