Transform TFX işlem hattı bileşeni, bir SchemaGen bileşeni tarafından oluşturulan bir veri şemasını kullanarak bir ExampleGen bileşeninden yayılan tf.Examples üzerinde özellik mühendisliği gerçekleştirir ve hem bir SavedModel hem de hem dönüşüm öncesi hem de dönüşüm sonrası verilere ilişkin istatistikleri yayar. Yürütüldüğünde SavedModel, bir ExampleGen bileşeninden yayılan tf.Examples'ı kabul edecek ve dönüştürülmüş özellik verilerini yayınlayacaktır.
- Tüketim: Bir ExampleGen bileşeninden tf.Örnekler ve bir SchemaGen bileşeninden bir veri şeması.
- Yayılanlar: SavedModel'den Trainer bileşenine, dönüşüm öncesi ve dönüşüm sonrası istatistikler.
Bir Dönüştürme Bileşenini Yapılandırma
preprocessing_fn
yazıldıktan sonra, daha sonra Transform bileşenine bir girdi olarak sağlanan bir python modülünde tanımlanması gerekir. Bu modül transform tarafından yüklenecek ve preprocessing_fn
adlı işlev bulunacak ve Transform tarafından ön işleme ardışık düzenini oluşturmak için kullanılacaktır.
transform = Transform(
examples=example_gen.outputs['examples'],
schema=schema_gen.outputs['schema'],
module_file=os.path.abspath(_taxi_transform_module_file))
Ek olarak, TFDV tabanlı dönüşüm öncesi veya dönüşüm sonrası istatistik hesaplaması için seçenekler sağlamak isteyebilirsiniz. Bunu yapmak için, aynı modül içinde bir stats_options_updater_fn
tanımlayın.
Dönüşüm ve TensorFlow Dönüşümü
Transform, veri kümenizde özellik mühendisliği gerçekleştirmek için TensorFlow Transform'u kapsamlı bir şekilde kullanır. TensorFlow Transform, özellik verilerini modelinize gitmeden önce ve eğitim sürecinin bir parçası olarak dönüştürmek için harika bir araçtır. Ortak özellik dönüşümleri şunları içerir:
- Gömme : yüksek boyutlu uzaydan düşük boyutlu uzaya anlamlı bir eşleme bularak seyrek özellikleri (bir sözlük tarafından üretilen tamsayı kimlikleri gibi) yoğun özelliklere dönüştürmek. Gömmelere giriş için Makine öğrenimi Hızlandırılmış Kursu'ndaki Gömmeler ünitesine bakın.
- Kelime dağarcığı oluşturma : her benzersiz değeri bir kimlik numarasına eşleyen bir kelime dağarcığı oluşturarak dizeleri veya diğer sayısal olmayan özellikleri tam sayılara dönüştürmek.
- Değerleri normalleştirme : sayısal özellikleri, tümü benzer bir aralığa denk gelecek şekilde dönüştürme.
- Gruplaştırma : ayrık gruplara değerler atayarak sürekli değerli özellikleri kategorik özelliklere dönüştürme.
- Metin özelliklerini zenginleştirme : özellik setini zenginleştirmek için belirteçler, n-gramlar, varlıklar, duyarlılık vb. gibi ham verilerden özellikler üretmek.
TensorFlow Transform, bu ve diğer pek çok türde dönüşüm için destek sağlar:
En son verilerinizden otomatik olarak bir sözlük oluşturun.
Modelinize göndermeden önce verilerinizde isteğe bağlı dönüşümler gerçekleştirin. TensorFlow Transform, modeliniz için dönüşümleri TensorFlow grafiğine oluşturur, böylece eğitim ve çıkarım zamanında aynı dönüşümler gerçekleştirilir. Tüm eğitim örneklerinde bir özelliğin maksimum değeri gibi verilerin genel özelliklerine atıfta bulunan dönüşümleri tanımlayabilirsiniz.
TFX'i çalıştırmadan önce verilerinizi istediğiniz gibi dönüştürebilirsiniz. Ancak bunu TensorFlow Transform içinde yaparsanız, dönüşümler TensorFlow grafiğinin bir parçası haline gelir. Bu yaklaşım, eğitim/hizmet çarpıklığını önlemeye yardımcı olur.
Modelleme kodunuzdaki dönüşümler, FeatureColumns'u kullanır. FeatureColumns'u kullanarak, gruplara ayırmaları, önceden tanımlanmış sözlükleri kullanan tamsayılaştırmaları veya verilere bakmadan tanımlanabilecek diğer dönüşümleri tanımlayabilirsiniz.
Buna karşılık, TensorFlow Transform, önceden bilinmeyen değerleri hesaplamak için veriler üzerinden tam geçiş gerektiren dönüşümler için tasarlanmıştır. Örneğin, kelime dağarcığı oluşturma, veriler üzerinden tam bir geçiş gerektirir.
Apache Beam kullanarak değerleri hesaplamaya ek olarak, TensorFlow Transform, kullanıcıların bu değerleri daha sonra eğitim grafiğine yüklenebilecek bir TensorFlow grafiğine gömmelerine olanak tanır. Örneğin, özellikleri normalleştirirken, tft.scale_to_z_score
işlevi bir özelliğin ortalamasını ve standart sapmasını ve ayrıca ortalamayı çıkaran ve standart sapmaya bölen işlevin bir TensorFlow grafiğindeki temsilini hesaplayacaktır. TensorFlow Transform, yalnızca istatistik değil, bir TensorFlow grafiği de yayınlayarak, ön işleme işlem hattınızı yazma sürecini basitleştirir.
Ön işleme bir grafik olarak ifade edildiğinden, sunucuda gerçekleşebilir ve eğitim ile sunum arasında tutarlı olması garanti edilir. Bu tutarlılık, bir eğitim/servis çarpıklığını ortadan kaldırır.
TensorFlow Transform, kullanıcıların ön işleme boru hattını TensorFlow kodunu kullanarak belirtmelerine olanak tanır. Bu, bir işlem hattının bir TensorFlow grafiğiyle aynı şekilde oluşturulduğu anlamına gelir. Bu grafikte yalnızca TensorFlow operasyonları kullanılmış olsaydı, ardışık düzen, girdi yığınlarını kabul eden ve toplu çıktıları döndüren saf bir harita olurdu. Böyle bir ardışık düzen, tf.Estimator
API'sini kullanırken bu grafiği input_fn
içine yerleştirmeye eşdeğer olacaktır. Hesaplama nicelikleri gibi tam geçiş işlemlerini belirtmek için TensorFlow Transform, analyzers
operasyonları gibi görünen, ancak aslında Apache Beam tarafından yapılacak ertelenmiş bir hesaplamayı ve çıktıyı grafiğe bir devamlı. Sıradan bir TensorFlow işlemi, girdi olarak tek bir toplu işi alırken, yalnızca bu toplu iş üzerinde bazı hesaplamalar gerçekleştirip bir toplu iş yayınlarken, bir analyzer
tüm toplu işler üzerinde (Apache Beam'de uygulanan) küresel bir indirgeme gerçekleştirecek ve sonucu döndürecektir.
Kullanıcılar, sıradan TensorFlow operasyonlarını ve TensorFlow Transform analizörlerini birleştirerek verilerini önceden işlemek için karmaşık boru hatları oluşturabilir. Örneğin, tft.scale_to_z_score
işlevi bir giriş tensörü alır ve bu tensörü ortalama 0
ve varyans 1
olacak şekilde normalize edilmiş olarak döndürür. Bunu, grafikte giriş tensörünün ortalamasına ve varyansına eşit sabitleri etkili bir şekilde üretecek olan başlık altındaki mean
ve var
analizörlerini çağırarak yapar. Ardından, ortalamayı çıkarmak ve standart sapmaya bölmek için TensorFlow işlemlerini kullanacaktır.
TensorFlow Dönüşümü preprocessing_fn
TFX Transform bileşeni, verileri okuma ve yazma ile ilgili API çağrılarını işleyerek ve SavedModel çıktısını diske yazarak Transform kullanımını basitleştirir. Bir TFX kullanıcısı olarak, yalnızca preprocessing_fn
adlı tek bir işlev tanımlamanız gerekir. preprocessing_fn
, tensörlerin çıkış diktesini üretmek için tensörlerin giriş diktesini işleyen bir dizi fonksiyon tanımlarsınız. TensorFlow Transform API'de scale_to_0_1 ve compute_and_apply_vocabulary gibi yardımcı işlevleri bulabilir veya aşağıda gösterildiği gibi normal TensorFlow işlevlerini kullanabilirsiniz.
def preprocessing_fn(inputs):
"""tf.transform's callback function for preprocessing inputs.
Args:
inputs: map from feature keys to raw not-yet-transformed features.
Returns:
Map from string feature key to transformed feature operations.
"""
outputs = {}
for key in _DENSE_FLOAT_FEATURE_KEYS:
# If sparse make it dense, setting nan's to 0 or '', and apply zscore.
outputs[_transformed_name(key)] = transform.scale_to_z_score(
_fill_in_missing(inputs[key]))
for key in _VOCAB_FEATURE_KEYS:
# Build a vocabulary for this feature.
outputs[_transformed_name(
key)] = transform.compute_and_apply_vocabulary(
_fill_in_missing(inputs[key]),
top_k=_VOCAB_SIZE,
num_oov_buckets=_OOV_SIZE)
for key in _BUCKET_FEATURE_KEYS:
outputs[_transformed_name(key)] = transform.bucketize(
_fill_in_missing(inputs[key]), _FEATURE_BUCKET_COUNT)
for key in _CATEGORICAL_FEATURE_KEYS:
outputs[_transformed_name(key)] = _fill_in_missing(inputs[key])
# Was this passenger a big tipper?
taxi_fare = _fill_in_missing(inputs[_FARE_KEY])
tips = _fill_in_missing(inputs[_LABEL_KEY])
outputs[_transformed_name(_LABEL_KEY)] = tf.where(
tf.is_nan(taxi_fare),
tf.cast(tf.zeros_like(taxi_fare), tf.int64),
# Test if the tip was > 20% of the fare.
tf.cast(
tf.greater(tips, tf.multiply(taxi_fare, tf.constant(0.2))), tf.int64))
return outputs
preprocessing_fn girdilerini anlama
preprocessing_fn
, tensörler (yani, Tensor
s, SparseTensor
s veya RaggedTensor
s) üzerinde bir dizi işlemi açıklar. preprocessing_fn
doğru bir şekilde tanımlamak için, verilerin tensörler olarak nasıl temsil edildiğini anlamak gerekir. preprocessing_fn
girdisi şema tarafından belirlenir. Bir Schema
protosu sonunda veri ayrıştırma için kullanılan bir "özellik belirtimine" (bazen "ayrıştırma özelliği" olarak adlandırılır) dönüştürülür, dönüştürme mantığı hakkında daha fazla ayrıntıya buradan bakın.
Dize etiketlerini işlemek için TensorFlow Transform'u kullanma
Genellikle kişi, hem bir kelime dağarcığı oluşturmak hem de bu kelime dağarcığını dizeleri tam sayılara dönüştürmek için uygulamak için TensorFlow Transform'u kullanmak ister. Bu iş akışını takip ederken, modelde oluşturulan input_fn
, tamsayılaştırılmış dizenin çıktısını verecektir. Bununla birlikte, etiketler bir istisnadır, çünkü modelin çıktı (tamsayı) etiketlerini dizelere geri eşleyebilmesi için modelin, etiketin olası değerlerinin bir listesiyle birlikte bir dizi etiketi çıkarması için input_fn
ihtiyacı vardır. Örneğin, etiketler cat
ve dog
ise, input_fn
çıktısı bu ham dizeler olmalıdır ve ["cat", "dog"]
anahtarlarının bir parametre olarak tahmin ediciye iletilmesi gerekir (aşağıdaki ayrıntılara bakın).
Dize etiketlerinin tam sayılara eşlenmesini işlemek için, bir sözcük dağarcığı oluşturmak üzere TensorFlow Transform'u kullanmalısınız. Bunu aşağıdaki kod parçacığında gösteriyoruz:
def _preprocessing_fn(inputs):
"""Preprocess input features into transformed features."""
...
education = inputs[features.RAW_LABEL_KEY]
_ = tft.vocabulary(education, vocab_filename=features.RAW_LABEL_KEY)
...
Yukarıdaki ön işleme işlevi, (ön işleme işlevinin çıktısının bir parçası olarak da döndürülecek olan) ham girdi özelliğini alır ve bunun üzerinde tft.vocabulary
çağırır. Bu, modelde erişilebilen education
için bir kelime dağarcığının oluşmasına neden olur.
Örnek ayrıca bir etiketin nasıl dönüştürüleceğini ve ardından dönüştürülen etiket için bir sözlük oluşturmayı gösterir. Özellikle ham etiket education
alır ve etiketi bir tamsayıya dönüştürmeden ilk 5 etiket (sıklığa göre) hariç tümünü UNKNOWN
dönüştürür.
Model kodunda, sınıflandırıcıya, label_vocabulary
argümanı olarak tft.vocabulary
tarafından üretilen kelime dağarcığı verilmelidir. Bu, önce bu sözlüğü yardımcı işlevi olan bir liste olarak okuyarak yapılır. Bu, aşağıdaki pasajda gösterilmiştir. Örnek kodun yukarıda tartışılan dönüştürülmüş etiketi kullandığına dikkat edin, ancak burada ham etiketi kullanmak için kodu gösteriyoruz.
def create_estimator(pipeline_inputs, hparams):
...
tf_transform_output = trainer_util.TFTransformOutput(
pipeline_inputs.transform_dir)
# vocabulary_by_name() returns a Python list.
label_vocabulary = tf_transform_output.vocabulary_by_name(
features.RAW_LABEL_KEY)
return tf.contrib.learn.DNNLinearCombinedClassifier(
...
n_classes=len(label_vocab),
label_vocabulary=label_vocab,
...)
Dönüşüm öncesi ve dönüşüm sonrası istatistikleri yapılandırma
Yukarıda bahsedildiği gibi, Transform bileşeni hem dönüşüm öncesi hem de dönüşüm sonrası istatistikleri hesaplamak için TFDV'yi çağırır. TFDV girdi olarak isteğe bağlı bir StatsOptions nesnesi alır. Kullanıcılar, belirli ek istatistikleri (örn. NLP istatistikleri) etkinleştirmek veya doğrulanan eşikleri (örn. minimum / maksimum belirteç frekansı) ayarlamak için bu nesneyi yapılandırmak isteyebilir. Bunu yapmak için modül dosyasında bir stats_options_updater_fn
tanımlayın.
def stats_options_updater_fn(stats_type, stats_options):
...
if stats_type == stats_options_util.StatsType.PRE_TRANSFORM:
# Update stats_options to modify pre-transform statistics computation.
# Most constraints are specified in the schema which can be accessed
# via stats_options.schema.
if stats_type == stats_options_util.StatsType.POST_TRANSFORM
# Update stats_options to modify post-transform statistics computation.
# Most constraints are specified in the schema which can be accessed
# via stats_options.schema.
return stats_options
Dönüşüm sonrası istatistikler genellikle bir özelliğin ön işlenmesi için kullanılan kelime bilgisinden yararlanır. Yol eşleme için sözcük adı, TFT tarafından oluşturulan her sözcük dağarcığı için StatsOptions'a (ve dolayısıyla TFDV'ye) sağlanır. Ek olarak, harici olarak oluşturulan sözlükler için eşlemeler, (i) StatsOptions içindeki vocab_paths
sözlüğünü doğrudan değiştirerek veya (ii) tft.annotate_asset
kullanılarak eklenebilir.
Transform TFX işlem hattı bileşeni, bir SchemaGen bileşeni tarafından oluşturulan bir veri şemasını kullanarak bir ExampleGen bileşeninden yayılan tf.Examples üzerinde özellik mühendisliği gerçekleştirir ve hem bir SavedModel hem de hem dönüşüm öncesi hem de dönüşüm sonrası verilere ilişkin istatistikleri yayar. Yürütüldüğünde SavedModel, bir ExampleGen bileşeninden yayılan tf.Examples'ı kabul edecek ve dönüştürülmüş özellik verilerini yayınlayacaktır.
- Tüketim: Bir ExampleGen bileşeninden tf.Örnekler ve bir SchemaGen bileşeninden bir veri şeması.
- Yayılanlar: SavedModel'den Trainer bileşenine, dönüşüm öncesi ve dönüşüm sonrası istatistikler.
Bir Dönüştürme Bileşenini Yapılandırma
preprocessing_fn
yazıldıktan sonra, daha sonra Transform bileşenine bir girdi olarak sağlanan bir python modülünde tanımlanması gerekir. Bu modül transform tarafından yüklenecek ve preprocessing_fn
adlı işlev bulunacak ve Transform tarafından ön işleme ardışık düzenini oluşturmak için kullanılacaktır.
transform = Transform(
examples=example_gen.outputs['examples'],
schema=schema_gen.outputs['schema'],
module_file=os.path.abspath(_taxi_transform_module_file))
Ek olarak, TFDV tabanlı dönüşüm öncesi veya dönüşüm sonrası istatistik hesaplaması için seçenekler sağlamak isteyebilirsiniz. Bunu yapmak için, aynı modül içinde bir stats_options_updater_fn
tanımlayın.
Dönüşüm ve TensorFlow Dönüşümü
Transform, veri kümenizde özellik mühendisliği gerçekleştirmek için TensorFlow Transform'u kapsamlı bir şekilde kullanır. TensorFlow Transform, özellik verilerini modelinize gitmeden önce ve eğitim sürecinin bir parçası olarak dönüştürmek için harika bir araçtır. Ortak özellik dönüşümleri şunları içerir:
- Gömme : yüksek boyutlu uzaydan düşük boyutlu uzaya anlamlı bir eşleme bularak seyrek özellikleri (bir sözlük tarafından üretilen tamsayı kimlikleri gibi) yoğun özelliklere dönüştürmek. Gömmelere giriş için Makine öğrenimi Hızlandırılmış Kursu'ndaki Gömmeler ünitesine bakın.
- Kelime dağarcığı oluşturma : her benzersiz değeri bir kimlik numarasına eşleyen bir kelime dağarcığı oluşturarak dizeleri veya diğer sayısal olmayan özellikleri tam sayılara dönüştürmek.
- Değerleri normalleştirme : sayısal özellikleri, tümü benzer bir aralığa denk gelecek şekilde dönüştürme.
- Gruplaştırma : ayrık gruplara değerler atayarak sürekli değerli özellikleri kategorik özelliklere dönüştürme.
- Metin özelliklerini zenginleştirme : özellik setini zenginleştirmek için belirteçler, n-gramlar, varlıklar, duyarlılık vb. gibi ham verilerden özellikler üretmek.
TensorFlow Transform, bu ve diğer pek çok türde dönüşüm için destek sağlar:
En son verilerinizden otomatik olarak bir sözlük oluşturun.
Modelinize göndermeden önce verilerinizde isteğe bağlı dönüşümler gerçekleştirin. TensorFlow Transform, modeliniz için dönüşümleri TensorFlow grafiğine oluşturur, böylece eğitim ve çıkarım zamanında aynı dönüşümler gerçekleştirilir. Tüm eğitim örneklerinde bir özelliğin maksimum değeri gibi verilerin genel özelliklerine atıfta bulunan dönüşümleri tanımlayabilirsiniz.
TFX'i çalıştırmadan önce verilerinizi istediğiniz gibi dönüştürebilirsiniz. Ancak bunu TensorFlow Transform içinde yaparsanız, dönüşümler TensorFlow grafiğinin bir parçası haline gelir. Bu yaklaşım, eğitim/hizmet çarpıklığını önlemeye yardımcı olur.
Modelleme kodunuzdaki dönüşümler, FeatureColumns'u kullanır. FeatureColumns'u kullanarak, gruplara ayırmaları, önceden tanımlanmış sözlükleri kullanan tamsayılaştırmaları veya verilere bakmadan tanımlanabilecek diğer dönüşümleri tanımlayabilirsiniz.
Buna karşılık, TensorFlow Transform, önceden bilinmeyen değerleri hesaplamak için veriler üzerinden tam geçiş gerektiren dönüşümler için tasarlanmıştır. Örneğin, kelime dağarcığı oluşturma, veriler üzerinden tam bir geçiş gerektirir.
Apache Beam kullanarak değerleri hesaplamaya ek olarak, TensorFlow Transform, kullanıcıların bu değerleri daha sonra eğitim grafiğine yüklenebilecek bir TensorFlow grafiğine gömmelerine olanak tanır. Örneğin, özellikleri normalleştirirken, tft.scale_to_z_score
işlevi bir özelliğin ortalamasını ve standart sapmasını ve ayrıca ortalamayı çıkaran ve standart sapmaya bölen işlevin bir TensorFlow grafiğindeki temsilini hesaplayacaktır. TensorFlow Transform, yalnızca istatistik değil, bir TensorFlow grafiği de yayınlayarak, ön işleme işlem hattınızı yazma sürecini basitleştirir.
Ön işleme bir grafik olarak ifade edildiğinden, sunucuda gerçekleşebilir ve eğitim ile sunum arasında tutarlı olması garanti edilir. Bu tutarlılık, bir eğitim/servis çarpıklığını ortadan kaldırır.
TensorFlow Transform, kullanıcıların ön işleme boru hattını TensorFlow kodunu kullanarak belirtmelerine olanak tanır. Bu, bir işlem hattının bir TensorFlow grafiğiyle aynı şekilde oluşturulduğu anlamına gelir. Bu grafikte yalnızca TensorFlow operasyonları kullanılmış olsaydı, ardışık düzen, girdi yığınlarını kabul eden ve toplu çıktıları döndüren saf bir harita olurdu. Böyle bir ardışık düzen, tf.Estimator
API'sini kullanırken bu grafiği input_fn
içine yerleştirmeye eşdeğer olacaktır. Hesaplama nicelikleri gibi tam geçiş işlemlerini belirtmek için TensorFlow Transform, analyzers
operasyonları gibi görünen, ancak aslında Apache Beam tarafından yapılacak ertelenmiş bir hesaplamayı ve çıktıyı grafiğe bir devamlı. Sıradan bir TensorFlow işlemi, girdi olarak tek bir toplu işi alırken, yalnızca bu toplu iş üzerinde bazı hesaplamalar gerçekleştirip bir toplu iş yayınlarken, bir analyzer
tüm toplu işler üzerinde (Apache Beam'de uygulanan) küresel bir indirgeme gerçekleştirecek ve sonucu döndürecektir.
Kullanıcılar, sıradan TensorFlow operasyonlarını ve TensorFlow Transform analizörlerini birleştirerek verilerini önceden işlemek için karmaşık boru hatları oluşturabilir. Örneğin, tft.scale_to_z_score
işlevi bir giriş tensörü alır ve bu tensörü ortalama 0
ve varyans 1
olacak şekilde normalize edilmiş olarak döndürür. Bunu, grafikte giriş tensörünün ortalamasına ve varyansına eşit sabitleri etkili bir şekilde üretecek olan başlık altındaki mean
ve var
analizörlerini çağırarak yapar. Ardından, ortalamayı çıkarmak ve standart sapmaya bölmek için TensorFlow işlemlerini kullanacaktır.
TensorFlow Dönüşümü preprocessing_fn
TFX Transform bileşeni, verileri okuma ve yazma ile ilgili API çağrılarını işleyerek ve SavedModel çıktısını diske yazarak Transform kullanımını basitleştirir. Bir TFX kullanıcısı olarak, yalnızca preprocessing_fn
adlı tek bir işlev tanımlamanız gerekir. preprocessing_fn
, tensörlerin çıkış diktesini üretmek için tensörlerin giriş diktesini işleyen bir dizi fonksiyon tanımlarsınız. TensorFlow Transform API'de scale_to_0_1 ve compute_and_apply_vocabulary gibi yardımcı işlevleri bulabilir veya aşağıda gösterildiği gibi normal TensorFlow işlevlerini kullanabilirsiniz.
def preprocessing_fn(inputs):
"""tf.transform's callback function for preprocessing inputs.
Args:
inputs: map from feature keys to raw not-yet-transformed features.
Returns:
Map from string feature key to transformed feature operations.
"""
outputs = {}
for key in _DENSE_FLOAT_FEATURE_KEYS:
# If sparse make it dense, setting nan's to 0 or '', and apply zscore.
outputs[_transformed_name(key)] = transform.scale_to_z_score(
_fill_in_missing(inputs[key]))
for key in _VOCAB_FEATURE_KEYS:
# Build a vocabulary for this feature.
outputs[_transformed_name(
key)] = transform.compute_and_apply_vocabulary(
_fill_in_missing(inputs[key]),
top_k=_VOCAB_SIZE,
num_oov_buckets=_OOV_SIZE)
for key in _BUCKET_FEATURE_KEYS:
outputs[_transformed_name(key)] = transform.bucketize(
_fill_in_missing(inputs[key]), _FEATURE_BUCKET_COUNT)
for key in _CATEGORICAL_FEATURE_KEYS:
outputs[_transformed_name(key)] = _fill_in_missing(inputs[key])
# Was this passenger a big tipper?
taxi_fare = _fill_in_missing(inputs[_FARE_KEY])
tips = _fill_in_missing(inputs[_LABEL_KEY])
outputs[_transformed_name(_LABEL_KEY)] = tf.where(
tf.is_nan(taxi_fare),
tf.cast(tf.zeros_like(taxi_fare), tf.int64),
# Test if the tip was > 20% of the fare.
tf.cast(
tf.greater(tips, tf.multiply(taxi_fare, tf.constant(0.2))), tf.int64))
return outputs
preprocessing_fn girdilerini anlama
preprocessing_fn
, tensörler (yani, Tensor
s, SparseTensor
s veya RaggedTensor
s) üzerinde bir dizi işlemi açıklar. preprocessing_fn
doğru bir şekilde tanımlamak için, verilerin tensörler olarak nasıl temsil edildiğini anlamak gerekir. preprocessing_fn
girdisi şema tarafından belirlenir. Bir Schema
protosu sonunda veri ayrıştırma için kullanılan bir "özellik belirtimine" (bazen "ayrıştırma özelliği" olarak adlandırılır) dönüştürülür, dönüştürme mantığı hakkında daha fazla ayrıntıya buradan bakın.
Dize etiketlerini işlemek için TensorFlow Transform'u kullanma
Genellikle kişi, hem bir kelime dağarcığı oluşturmak hem de bu kelime dağarcığını dizeleri tam sayılara dönüştürmek için uygulamak için TensorFlow Transform'u kullanmak ister. Bu iş akışını takip ederken, modelde oluşturulan input_fn
, tamsayılaştırılmış dizenin çıktısını verecektir. Bununla birlikte, etiketler bir istisnadır, çünkü modelin çıktı (tamsayı) etiketlerini dizelere geri eşleyebilmesi için modelin, etiketin olası değerlerinin bir listesiyle birlikte bir dizi etiketi çıkarması için input_fn
ihtiyacı vardır. Örneğin, etiketler cat
ve dog
ise, input_fn
çıktısı bu ham dizeler olmalıdır ve ["cat", "dog"]
anahtarlarının bir parametre olarak tahmin ediciye iletilmesi gerekir (aşağıdaki ayrıntılara bakın).
Dize etiketlerinin tam sayılara eşlenmesini işlemek için, bir sözcük dağarcığı oluşturmak üzere TensorFlow Transform'u kullanmalısınız. Bunu aşağıdaki kod parçacığında gösteriyoruz:
def _preprocessing_fn(inputs):
"""Preprocess input features into transformed features."""
...
education = inputs[features.RAW_LABEL_KEY]
_ = tft.vocabulary(education, vocab_filename=features.RAW_LABEL_KEY)
...
Yukarıdaki ön işleme işlevi, (ön işleme işlevinin çıktısının bir parçası olarak da döndürülecek olan) ham girdi özelliğini alır ve bunun üzerinde tft.vocabulary
çağırır. Bu, modelde erişilebilen education
için bir kelime dağarcığının oluşmasına neden olur.
Örnek ayrıca bir etiketin nasıl dönüştürüleceğini ve ardından dönüştürülen etiket için bir sözlük oluşturmayı gösterir. Özellikle ham etiket education
alır ve etiketi bir tamsayıya dönüştürmeden ilk 5 etiket (sıklığa göre) hariç tümünü UNKNOWN
dönüştürür.
Model kodunda, sınıflandırıcıya, label_vocabulary
argümanı olarak tft.vocabulary
tarafından üretilen kelime dağarcığı verilmelidir. Bu, önce bu sözlüğü yardımcı işlevi olan bir liste olarak okuyarak yapılır. Bu, aşağıdaki pasajda gösterilmiştir. Örnek kodun yukarıda tartışılan dönüştürülmüş etiketi kullandığına dikkat edin, ancak burada ham etiketi kullanmak için kodu gösteriyoruz.
def create_estimator(pipeline_inputs, hparams):
...
tf_transform_output = trainer_util.TFTransformOutput(
pipeline_inputs.transform_dir)
# vocabulary_by_name() returns a Python list.
label_vocabulary = tf_transform_output.vocabulary_by_name(
features.RAW_LABEL_KEY)
return tf.contrib.learn.DNNLinearCombinedClassifier(
...
n_classes=len(label_vocab),
label_vocabulary=label_vocab,
...)
Dönüşüm öncesi ve dönüşüm sonrası istatistikleri yapılandırma
Yukarıda bahsedildiği gibi, Transform bileşeni, hem dönüşüm öncesi hem de dönüşüm sonrası istatistikleri hesaplamak için TFDV'yi çağırır. TFDV girdi olarak isteğe bağlı bir StatsOptions nesnesi alır. Kullanıcılar, belirli ek istatistikleri (örn. NLP istatistikleri) etkinleştirmek veya doğrulanan eşikleri (örn. minimum / maksimum belirteç frekansı) ayarlamak için bu nesneyi yapılandırmak isteyebilir. Bunu yapmak için modül dosyasında bir stats_options_updater_fn
tanımlayın.
def stats_options_updater_fn(stats_type, stats_options):
...
if stats_type == stats_options_util.StatsType.PRE_TRANSFORM:
# Update stats_options to modify pre-transform statistics computation.
# Most constraints are specified in the schema which can be accessed
# via stats_options.schema.
if stats_type == stats_options_util.StatsType.POST_TRANSFORM
# Update stats_options to modify post-transform statistics computation.
# Most constraints are specified in the schema which can be accessed
# via stats_options.schema.
return stats_options
Dönüşüm sonrası istatistikler genellikle bir özelliğin ön işlenmesi için kullanılan kelime bilgisinden yararlanır. Yol eşleme için sözcük adı, TFT tarafından üretilen her sözcük dağarcığı için StatsOptions'a (ve dolayısıyla TFDV'ye) sağlanır. Ek olarak, harici olarak oluşturulan sözlükler için eşlemeler, (i) StatsOptions içindeki vocab_paths
sözlüğünü doğrudan değiştirerek veya (ii) tft.annotate_asset
kullanılarak eklenebilir.