SIG TFX-Addons topluluğuna katılın ve TFX'in daha da iyi olmasına yardımcı olun!
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Tensorflow Veri Doğrulamayı kullanmaya başlayın

Tensorflow Data Validation (TFDV) eğitimi analiz edebilir ve aşağıdakilere veri sunabilir:

Temel API, her bir işlevsellik parçasını, üstüne inşa edilen ve dizüstü bilgisayarlar bağlamında çağrılabilen kolaylık yöntemleriyle destekler.

Tanımlayıcı veri istatistiklerinin hesaplanması

TFDV, mevcut özellikler ve değer dağılımlarının şekilleri açısından verilere hızlı bir genel bakış sağlayan tanımlayıcı istatistikleri hesaplayabilir. Facets Overview gibi araçlar, kolay göz atma için bu istatistiklerin kısa ve öz bir görselleştirmesini sağlayabilir.

Örneğin, varsayalım path bir dosyaya noktaları TFRecord (tip kayıtlarını tutan biçiminde tensorflow.Example ). Aşağıdaki kod parçası, TFDV kullanılarak istatistiklerin hesaplanmasını göstermektedir:

    stats = tfdv.generate_statistics_from_tfrecord(data_location=path)

Döndürülen değer bir DatasetFeatureStatisticsList protokol arabelleğidir. Örnek defter , Özelliklere Genel Bakış kullanılarak istatistiklerin görselleştirilmesini içerir:

    tfdv.visualize_statistics(stats)

İstatistik görselleştirmenin ekran görüntüsü

Önceki örnek, verilerin bir TFRecord dosyasında depolandığını varsayar. TFDV, diğer yaygın formatlar için genişletilebilirlik ile CSV giriş formatını da destekler. Mevcut veri kod çözücülerini burada bulabilirsiniz . Ek olarak, TFDV, pandas DataFrame olarak gösterilen bellek içi verilere sahip kullanıcılar için tfdv.generate_statistics_from_dataframe yardımcı programı işlevi sağlar.

Varsayılan bir veri istatistikleri kümesini hesaplamaya ek olarak, TFDV semantik alanlar için istatistikleri de hesaplayabilir (örneğin, görüntüler, metin). Semantik alanı istatistiklerinin hesaplanması etkinleştirmek için bir geçiş tfdv.StatsOptions nesneyi enable_semantic_domain_stats için True olarak ayarlanmış tfdv.generate_statistics_from_tfrecord .

Google Cloud'da çalışıyor

Dahili olarak TFDV, büyük veri kümeleri üzerinde istatistik hesaplamasını ölçeklendirmek için Apache Beam'in veri paralel işleme çerçevesini kullanır. TFDV ile daha derin entegre etmek isteyen uygulamalar için (örneğin, bir veri oluşturma ardışık düzeninin sonunda istatistik üretimini eklemek , özel formatta veriler için istatistik oluşturmak), API ayrıca istatistik üretimi için bir Beam PT dönüşümü sunar.

TFDV'yi Google Cloud'da çalıştırmak için, TFDV tekerlek dosyası indirilmeli ve Dataflow çalışanlarına sağlanmalıdır. Tekerlek dosyasını mevcut dizine aşağıdaki şekilde indirin:

pip download tensorflow_data_validation \
  --no-deps \
  --platform manylinux2010_x86_64 \
  --only-binary=:all:

Aşağıdaki kod parçası, Google Cloud'da örnek bir TFDV kullanımını gösterir:


import tensorflow_data_validation as tfdv
from apache_beam.options.pipeline_options import PipelineOptions, GoogleCloudOptions, StandardOptions, SetupOptions

PROJECT_ID = ''
JOB_NAME = ''
GCS_STAGING_LOCATION = ''
GCS_TMP_LOCATION = ''
GCS_DATA_LOCATION = ''
# GCS_STATS_OUTPUT_PATH is the file path to which to output the data statistics
# result.
GCS_STATS_OUTPUT_PATH = ''

PATH_TO_WHL_FILE = ''


# Create and set your PipelineOptions.
options = PipelineOptions()

# For Cloud execution, set the Cloud Platform project, job_name,
# staging location, temp_location and specify DataflowRunner.
google_cloud_options = options.view_as(GoogleCloudOptions)
google_cloud_options.project = PROJECT_ID
google_cloud_options.job_name = JOB_NAME
google_cloud_options.staging_location = GCS_STAGING_LOCATION
google_cloud_options.temp_location = GCS_TMP_LOCATION
options.view_as(StandardOptions).runner = 'DataflowRunner'

setup_options = options.view_as(SetupOptions)
# PATH_TO_WHL_FILE should point to the downloaded tfdv wheel file.
setup_options.extra_packages = [PATH_TO_WHL_FILE]

tfdv.generate_statistics_from_tfrecord(GCS_DATA_LOCATION,
                                       output_path=GCS_STATS_OUTPUT_PATH,
                                       pipeline_options=options)

Bu durumda, oluşturulan istatistik protokolü, GCS_STATS_OUTPUT_PATH'ye yazılan bir TFRecord dosyasında GCS_STATS_OUTPUT_PATH .

NOT Google Cloud'da tfdv.generate_statistics_... işlevlerinden herhangi birini (ör. tfdv.generate_statistics_from_tfrecord ) tfdv.generate_statistics_from_tfrecord , bir output_path sağlamanız gerekir. Yok seçeneğinin belirlenmesi bir hataya neden olabilir.

Veriler üzerinden bir şema çıkarmak

Şema , verilerin beklenen özelliklerini açıklar. Bu özelliklerden bazıları şunlardır:

  • hangi özelliklerin mevcut olması bekleniyor
  • onların tipi
  • her örnekteki bir özellik için değer sayısı
  • tüm örneklerde her özelliğin varlığı
  • özelliklerin beklenen alanları.

Kısaca, şema "doğru" veriler için beklentileri açıklar ve bu nedenle verilerdeki hataları tespit etmek için kullanılabilir (aşağıda açıklanmıştır). Ayrıca, veri dönüşümleri için Tensorflow Transform'u ayarlamak için aynı şema kullanılabilir. Şemanın oldukça statik olması beklendiğini unutmayın; örneğin, birkaç veri kümesi aynı şemaya uyabilirken, istatistikler (yukarıda açıklanan) veri kümesine göre değişebilir.

Bir şema yazmak, özellikle çok sayıda özelliğe sahip veri kümeleri için sıkıcı bir görev olabileceğinden, TFDV, açıklayıcı istatistiklere dayalı olarak şemanın ilk sürümünü oluşturmak için bir yöntem sağlar:

    schema = tfdv.infer_schema(stats)

Genel olarak TFDV, şemayı belirli veri kümesine aşırı uydurmaktan kaçınmak için istatistiklerden kararlı veri özelliklerini çıkarmak için konservatif buluşsal yöntemler kullanır. TFDV'nin buluşsal yöntemlerinin kaçırmış olabileceği verilerle ilgili herhangi bir alan bilgisini yakalamak için , çıkarsanan şemayı gözden geçirmeniz ve gerektiği şekilde iyileştirmeniz şiddetle tavsiye edilir.

Varsayılan olarak, tfdv.infer_schema , özellik için value_count.min değerine eşitse, gerekli her bir özelliğin şeklini value_count.max . Şekil çıkarımını devre dışı bırakmak için infer_feature_shape bağımsız değişkenini False olarak ayarlayın.

Şemanın kendisi bir Şema protokol tamponu olarak depolanır ve bu nedenle standart protokol-arabellek API kullanılarak güncellenebilir / düzenlenebilir. TFDV, bu güncellemeleri kolaylaştırmak için birkaç yardımcı yöntem de sağlar. Örneğin, şemanın, tek bir değer alan gerekli bir payment_type dize özelliğini açıklamak için aşağıdaki kütüğü içerdiğini varsayalım:

feature {
  name: "payment_type"
  value_count {
    min: 1
    max: 1
  }
  type: BYTES
  domain: "payment_type"
  presence {
    min_fraction: 1.0
    min_count: 1
  }
}

Özelliğin örneklerin en az% 50'sinde doldurulması gerektiğini işaretlemek için:

    tfdv.get_feature(schema, 'payment_type').presence.min_fraction = 0.5

Örnek not defteri , şemada kodlanmış olarak her bir özelliği ve ana özelliklerini listeleyen bir tablo olarak şemanın basit bir görselleştirmesini içerir.

Şema görselleştirmenin ekran görüntüsü

Verilerde hata olup olmadığını kontrol etme

Bir şema verildiğinde, bir veri kümesinin şemada belirlenen beklentilere uygun olup olmadığını veya herhangi bir veri anormalliği olup olmadığını kontrol etmek mümkündür. Verilerinizi hatalar için (a) veri kümesinin istatistiklerini şemayla eşleştirerek veya (b) hataları örnek bazında kontrol ederek kontrol edebilirsiniz.

Veri kümesinin istatistiklerini bir şemayla eşleştirme

Toplamdaki hataları kontrol etmek için TFDV, veri kümesinin istatistiklerini şemayla eşleştirir ve tüm tutarsızlıkları işaretler. Örneğin:

    # Assume that other_path points to another TFRecord file
    other_stats = tfdv.generate_statistics_from_tfrecord(data_location=other_path)
    anomalies = tfdv.validate_statistics(statistics=other_stats, schema=schema)

Sonuç, Anormallikler protokol arabelleğinin bir örneğidir ve istatistiklerin şemayla uyuşmadığı tüm hataları açıklar. Örneğin, other_path verilerin, şemada belirtilen etki payment_type dışında payment_type özelliği için değerlere sahip örnekler içerdiğini varsayalım.

Bu bir anormallik üretir

   payment_type  Unexpected string values  Examples contain values missing from the schema: Prcard (<1%).

özellik değerlerinin <% 1'inde istatistiklerde alan dışı bir değer bulunduğunu belirtir.

Bu bekleniyorsa, şema şu şekilde güncellenebilir:

   tfdv.get_domain(schema, 'payment_type').value.append('Prcard')

Anormallik gerçekten bir veri hatasını gösteriyorsa, eğitim için kullanılmadan önce temeldeki veriler düzeltilmelidir.

Bu modül tarafından tespit edilebilecek çeşitli anormallik türleri burada listelenmiştir.

Örnek not defteri , anormalliklerin bir tablo olarak basit bir görselleştirmesini, hataların tespit edildiği özellikleri listeleyen ve her hatanın kısa bir açıklamasını içerir.

Anormalliklerin ekran görüntüsü

Örnek bazında hataları kontrol etme

TFDV, veri kümesi genelindeki istatistikleri şemayla karşılaştırmak yerine, verileri örnek bazında doğrulama seçeneği de sağlar. TFDV, verileri örnek bazında doğrulamak ve ardından bulunan anormal örnekler için özet istatistikler oluşturmak için işlevler sağlar. Örneğin:

   options = tfdv.StatsOptions(schema=schema)
   anomalous_example_stats = tfdv.validate_examples_in_tfrecord(
       data_location=input, stats_options=options)

anomalous_example_stats bu validate_examples_in_tfrecord döner a, DatasetFeatureStatisticsList Her veri kümesi, belirli bir anomali sergileyen örneklerde grubu oluştuğu protokol tamponu. Veri kümenizdeki belirli bir anormalliği sergileyen örneklerin sayısını ve bu örneklerin özelliklerini belirlemek için bunu kullanabilirsiniz.

Şema Ortamları

Varsayılan olarak, doğrulamalar bir ardışık düzen içindeki tüm veri kümelerinin tek bir şemaya bağlı olduğunu varsayar. Bazı durumlarda, etiket olarak kullanılan özellikler eğitim sırasında gereklidir (ve doğrulanmalıdır), ancak sunum sırasında eksiktir.

Ortamlar , bu tür gereksinimleri ifade etmek için kullanılabilir. Özellikle, şemadaki özellikler, default_environment, in_environment ve not_in_environment kullanılarak bir dizi ortamla ilişkilendirilebilir.

Örneğin, ipuçları özelliği eğitimde etiket olarak kullanılıyorsa ancak sunum verilerinde eksikse. Ortam belirtilmezse, bir anormallik olarak görünecektir.

    serving_stats = tfdv.generate_statistics_from_tfrecord(data_location=serving_data_path)
    serving_anomalies = tfdv.validate_statistics(serving_stats, schema)

Anormalliklerin sunulmasıyla ilgili ekran görüntüsü

Bunu düzeltmek için, tüm özellikler için varsayılan ortamı hem 'EĞİTİM' hem de 'HİZMET' olarak ayarlamalı ve 'ipuçları' özelliğini SERVING ortamından çıkarmalıyız.

    # All features are by default in both TRAINING and SERVING environments.
    schema.default_environment.append('TRAINING')
    schema.default_environment.append('SERVING')

    # Specify that 'tips' feature is not in SERVING environment.
    tfdv.get_feature(schema, 'tips').not_in_environment.append('SERVING')

    serving_anomalies_with_env = tfdv.validate_statistics(
        serving_stats, schema, environment='SERVING')

Veri çarpıklığını ve kaymasını kontrol etme

TFDV, bir veri setinin şemada belirlenen beklentilere uygun olup olmadığını kontrol etmenin yanı sıra şunları tespit etmek için işlevler de sağlar:

  • eğitim ve sunum verileri arasındaki çarpıklık
  • farklı eğitim günleri arasında sapma

TFDV, şemada belirtilen sapma / çarpıklık karşılaştırıcılarına dayalı olarak farklı veri kümelerinin istatistiklerini karşılaştırarak bu denetimi gerçekleştirir. Örneğin, eğitim ve sunum veri kümesindeki "ödeme_türü" özelliği arasında herhangi bir çarpıklık olup olmadığını kontrol etmek için:

    # Assume we have already generated the statistics of training dataset, and
    # inferred a schema from it.
    serving_stats = tfdv.generate_statistics_from_tfrecord(data_location=serving_data_path)
    # Add a skew comparator to schema for 'payment_type' and set the threshold
    # of L-infinity norm for triggering skew anomaly to be 0.01.
    tfdv.get_feature(schema, 'payment_type').skew_comparator.infinity_norm.threshold = 0.01
    skew_anomalies = tfdv.validate_statistics(
        statistics=train_stats, schema=schema, serving_statistics=serving_stats)

NOT sayısal özellikler için çarpık algılamak bir belirtmek için jensen_shannon_divergence eşiğini yerine bir infinity_norm içinde eşiğini skew_comparator .

Bir veri kümesinin şemada belirlenen beklentilere uyup uymadığını kontrol etmekle aynı şekilde, sonuç aynı zamanda Anormallikler protokol arabelleğinin bir örneğidir ve eğitim ile hizmet veri kümeleri arasındaki herhangi bir çarpıklığı açıklar. Örneğin, sunum verilerinin Cash değerine sahip payement_type özellikleriyle önemli ölçüde daha fazla örnek içerdiğini varsayalım, bu çarpık bir

   payment_type  High L-infinity distance between serving and training  The L-infinity distance between serving and training is 0.0435984 (up to six significant digits), above the threshold 0.01. The feature value with maximum difference is: Cash

Anormallik, eğitim ve sunum verileri arasında gerçekten bir çarpıklık olduğunu gösteriyorsa, bunun model performansı üzerinde doğrudan bir etkisi olabileceğinden daha fazla araştırma yapılması gerekir.

Örnek not defteri , çarpıklık temelli anormalliklerin kontrol edilmesinin basit bir örneğini içerir.

Farklı eğitim günleri arasındaki sapmanın tespiti benzer şekilde yapılabilir.

    # Assume we have already generated the statistics of training dataset for
    # day 2, and inferred a schema from it.
    train_day1_stats = tfdv.generate_statistics_from_tfrecord(data_location=train_day1_data_path)
    # Add a drift comparator to schema for 'payment_type' and set the threshold
    # of L-infinity norm for triggering drift anomaly to be 0.01.
    tfdv.get_feature(schema, 'payment_type').drift_comparator.infinity_norm.threshold = 0.01
    drift_anomalies = tfdv.validate_statistics(
        statistics=train_day2_stats, schema=schema, previous_statistics=train_day1_stats)

NOT sayısal özellikler için çarpık algılamak bir belirtmek için jensen_shannon_divergence eşiğini yerine bir infinity_norm içinde eşiğini drift_comparator .

Özel veri bağlayıcısı yazma

Hesaplamak veri istatistiklerinin için, TFDV birkaç sağlar elverişli yöntemler çeşitli biçimlerde giriş verilerini işlemek için (örneğin TFRecord ait tf.train.Example , CSV, vb.) Veri formatınız bu listede yoksa, giriş verilerini okumak için özel bir veri konektörü yazmanız ve veri istatistiklerini hesaplamak için TFDV çekirdek API'ye bağlamanız gerekir.

Veri istatistiklerini hesaplamak için TFDV çekirdek API'si , girdi örneklerinden oluşan bir gruptan oluşan bir PCollection alan (bir grup girdi örneği, bir Arrow RecordBatch olarak temsil edilir) ve tek bir DatasetFeatureStatisticsList protokol arabelleğini içeren bir PCollection çıktısı veren bir DatasetFeatureStatisticsList .

Giriş örneklerinizi bir Arrow RecordBatch içinde gruplayan özel veri bağlayıcısını uyguladıktan sonra, veri istatistiklerini hesaplamak için tfdv.GenerateStatistics API ile bağlamanız gerekir. Örneğin TFRecord ele tf.train.Example . DecodeTFExample veri bağlayıcısını sağlıyoruz ve aşağıda bunun tfdv.GenerateStatistics API ile nasıl bağlanacağına dair bir örnek var.

import tensorflow_data_validation as tfdv
import apache_beam as beam
from tensorflow_metadata.proto.v0 import statistics_pb2

DATA_LOCATION = ''
OUTPUT_LOCATION = ''

with beam.Pipeline() as p:
    _ = (
    p
    # 1. Read out the examples from input files.
    | 'ReadData' >> beam.io.ReadFromTFRecord(file_pattern=DATA_LOCATION)
    # 2. Convert examples to Arrow RecordBatches, which represent example
    #    batches.
    | 'DecodeData' >> tf_example_decoder.DecodeTFExample()
    # 3. Invoke TFDV `GenerateStatistics` API to compute the data statistics.
    | 'GenerateStatistics' >> tfdv.GenerateStatistics()
    # 4. Materialize the generated data statistics.
    | 'WriteStatsOutput' >> WriteStatisticsToTFRecord(OUTPUT_LOCATION))

Veri dilimleri üzerinden istatistik hesaplama

TFDV, veri dilimleri üzerindeki istatistikleri hesaplamak için yapılandırılabilir. Dilimleme, bir Arrow RecordBatch ve bir dizi form demeti (slice key, record batch) çıkaran dilimleme işlevleri sağlanarak etkinleştirilebilir. TFDV, istatistikleri tfdv.StatsOptions parçası olarak sağlanabilen özellik değeri tabanlı dilimleme işlevleri oluşturmak için kolay bir yol sağlar.

Dilimleme etkinleştirildiğinde, çıktı DatasetFeatureStatisticsList protokolü, her dilim için bir tane olmak üzere birden çok DatasetFeatureStatistics protosu içerir. Her dilim, DatasetFeatureStatistics protokolünde veri kümesi adı olarak ayarlanan benzersiz bir adla tanımlanır. Varsayılan olarak TFDV, yapılandırılan dilimlere ek olarak genel veri kümesi için istatistikleri hesaplar.

import tensorflow_data_validation as tfdv
from tensorflow_data_validation.utils import slicing_util

# Slice on country feature (i.e., every unique value of the feature).
slice_fn1 = slicing_util.get_feature_value_slicer(features={'country': None})

# Slice on the cross of country and state feature (i.e., every unique pair of
# values of the cross).
slice_fn2 = slicing_util.get_feature_value_slicer(
    features={'country': None, 'state': None})

# Slice on specific values of a feature.
slice_fn3 = slicing_util.get_feature_value_slicer(
    features={'age': [10, 50, 70]})

stats_options = tfdv.StatsOptions(
    slice_functions=[slice_fn1, slice_fn2, slice_fn3])