本文档介绍了如何使用 tf.transform 进行常见转换。
我们假设您已经按照示例构建了 Beam 管道,并且只描述了需要添加到 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
是一个可选特征,在 preprocessing_fn
中表示为 tf.SparseTensor
。为了将其转换为密集张量,我们计算其均值,并在实例中缺失时将均值设置为默认值。
生成的密集张量将具有形状 [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])
}