Transformaciones comunes

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