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