Transform TFX Ardışık Düzen Bileşeni

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.