ในเอกสารนี้ เราจะอธิบายวิธีการแปลงทั่วไปด้วย tf.transform
เราถือว่าคุณได้สร้างคานไปป์ไลน์ตามตัวอย่างแล้ว และอธิบายเฉพาะสิ่งที่จำเป็นต้องเพิ่มใน preprocessing_fn
และโมเดลที่เป็นไปได้เท่านั้น
การใช้ข้อมูลสตริง/หมวดหมู่
preprocessing_fn
ต่อไปนี้จะคำนวณคำศัพท์เหนือค่าของคุณลักษณะ x
ด้วยโทเค็นตามลำดับความถี่จากมากไปน้อย แปลงค่าคุณลักษณะ x
เป็นดัชนีในคำศัพท์ และสุดท้ายทำการเข้ารหัสแบบร้อนแรงเดียวสำหรับเอาต์พุต
นี่เป็นเรื่องปกติ เช่น ในกรณีที่ฟีเจอร์ป้ายกำกับเป็นสตริงหมวดหมู่ การเข้ารหัสแบบร้อนแรงเดียวที่เกิดขึ้นนั้นพร้อมสำหรับการฝึกแล้ว
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,
}
การใส่ร้ายเฉลี่ยสำหรับข้อมูลที่ขาดหายไป
ในตัวอย่างนี้ คุณลักษณะ x
เป็นคุณลักษณะทางเลือก ซึ่งแสดงเป็น tf.SparseTensor
ใน preprocessing_fn
ในการแปลงเป็นเทนเซอร์แบบหนาแน่น เราจะคำนวณค่าเฉลี่ยของมัน และตั้งค่าค่าเฉลี่ยให้เป็นค่าเริ่มต้นเมื่อค่านั้นหายไปจากอินสแตนซ์
เทนเซอร์หนาแน่นที่ได้จะมีรูปร่าง [None, 1]
, None
แสดงถึงมิติข้อมูลแบทช์ และสำหรับมิติที่สอง จะเป็นจำนวนค่าที่ x
สามารถมีได้ต่ออินสแตนซ์ ในกรณีนี้คือ 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])
}