Wspólne przemiany

W tym dokumencie opisujemy, jak wykonywać typowe transformacje za pomocą tf.transform.

Zakładamy, że już skonstruowałeś rurociąg belkowy zgodnie z przykładami i opisujesz tylko to, co należy dodać do preprocessing_fn i ewentualnie model.

Korzystanie z danych łańcuchowych/kategorycznych

Poniższe polecenie preprocessing_fn obliczy słownictwo na podstawie wartości cechy x z tokenami w malejącej kolejności częstotliwości, przekonwertuje wartości cechy x na ich indeks w słowniku i na koniec wykona jednokrotne kodowanie danych wyjściowych.

Jest to powszechne na przykład w przypadkach użycia, gdy funkcja etykiety jest ciągiem kategorycznym. Wynikowe kodowanie typu one-hot jest gotowe do szkolenia.

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

Średnia imputacja brakujących danych

W tym przykładzie funkcja x jest funkcją opcjonalną reprezentowaną jako tf.SparseTensor w preprocessing_fn . Aby przekonwertować go na gęsty tensor, obliczamy jego średnią i ustawiamy średnią jako wartość domyślną, gdy brakuje jej w instancji.

Powstały gęsty tensor będzie miał kształt [None, 1] , None reprezentuje wymiar wsadowy, a dla drugiego wymiaru będzie to liczba wartości, jakie x może mieć na instancję. W tym przypadku jest to 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])
  }