En este documento describimos cómo hacer transformaciones comunes con tf.transform.
Suponemos que ya ha construido la canalización de vigas siguiendo las líneas de los ejemplos, y solo describe lo que debe agregarse a preprocessing_fn
y posiblemente al modelo.
Uso de datos de cadena/categóricos
El siguiente preprocessing_fn
calculará un vocabulario sobre los valores de la característica x
con tokens en orden de frecuencia descendente, convertirá los valores de la característica x
a su índice en el vocabulario y, finalmente, realizará una codificación one-hot para la salida.
Esto es común, por ejemplo, en casos de uso donde la característica de la etiqueta es una cadena categórica. La codificación one-hot resultante está lista para el entrenamiento.
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,
}
Imputación media de los datos faltantes
En este ejemplo, la función x
es una función opcional, representada como tf.SparseTensor
en preprocessing_fn
. Para convertirlo en un tensor denso, calculamos su media y establecemos la media como el valor predeterminado cuando falta en una instancia.
El tensor denso resultante tendrá la forma [None, 1]
, None
representa la dimensión del lote, y para la segunda dimensión será el número de valores que puede tener x
por instancia. En este caso es 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])
}