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])
}