Yardım Kaggle üzerinde TensorFlow ile Büyük Bariyer Resifi korumak Meydan Üyelik

Tensorflow Veri Doğrulaması ile başlayın

Tensorflow Veri Doğrulaması (TFDV), eğitim ve sunum verilerini şu amaçlarla analiz edebilir:

Çekirdek API, üstte oluşturulan ve dizüstü bilgisayarlar bağlamında çağrılabilen kolaylık yöntemleriyle her bir işlevsellik parçasını destekler.

Tanımlayıcı veri istatistiklerini hesaplama

TFDV tanımlayıcı hesaplayabilir istatistik mevcut özellikleri açısından ve bunların değer dağılımları şekillerde verilerin hızlı bir bakış sağlar. Gibi araçları Façetalar Bakış kolay tarama için bu istatistiklerin bir özlü görselleştirme sağlayabilir.

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

    stats = tfdv.generate_statistics_from_tfrecord(data_location=path)

Döndürülen değeri olan DatasetFeatureStatisticsList protokol tamponu. Örnek dizüstü kullanarak istatistiklerin bir görselleştirme içeren Fasetler Bakış :

    tfdv.visualize_statistics(stats)

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

Bir önceki örnekte veriler saklanır varsayar TFRecord dosyası. TFDV, diğer yaygın formatlar için genişletilebilirlik ile CSV giriş formatını da destekler. Kullanılabilir veri kod çözücüleri bulabilirsiniz burada . Buna ek olarak, TFDV içerir tfdv.generate_statistics_from_dataframe bir pandalarıyla DataFrame olarak temsil bellek verileriyle kullanıcılar fayda fonksiyonu.

TFDV, varsayılan veri istatistikleri kümesini hesaplamaya ek olarak, anlamsal etki alanları (örneğin, resimler, metin) için istatistikleri de hesaplayabilir. 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ıştırma

Dahili olarak, TFDV kullanan Apache Işın büyük veri fazla istatistik hesaplama ölçek 'in veri paralel işlem çerçevesi. TFDV ile derin entegre etmek isteyen uygulamalar için (örneğin, bir veri nesil boru hattının sonundaki istatistikleri nesil takmak özel formatta veri için istatistikler oluşturmak ), API ayrıca istatistik üretimi için bir Işın PTransform ortaya çıkarır.

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ı aşağıdaki gibi geçerli dizine indirin:

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

Aşağıdaki snippet, Google Cloud'da TFDV'nin örnek bir kullanımını göstermektedir:


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 proto için yazılmış bir TFRecord dosyada saklanır GCS_STATS_OUTPUT_PATH .

Herhangi ararken NOT tfdv.generate_statistics_... fonksiyonları (örn tfdv.generate_statistics_from_tfrecord Google Cloud üzerine), bir sağlamalıdır output_path . Hiçbirinin belirtilmesi bir hataya neden olabilir.

Veriler üzerinden bir şema çıkarımı

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

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

Kısacası şema, "doğru" veriler için beklentileri tanımlar ve bu nedenle verilerdeki hataları tespit etmek için kullanılabilir (aşağıda açıklanmıştır). Dahası, aynı şema ayarlamak için kullanılabilir Tensorflow Transform veri dönüşümleri için. Şemanın oldukça statik olmasının beklendiğini unutmayın; örneğin, birkaç veri kümesi aynı şemaya uyabilir, oysa istatistikler (yukarıda açıklanmıştır) 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 iş olabileceğinden, TFDV, tanımlayı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 fazla uydurmaktan kaçınmak için istatistiklerden kararlı veri özelliklerini çıkarmak için muhafazakar buluşsal yöntemler kullanır. Kuvvetle anlaşılmaktadır şemayı gözden geçirmek ve TFDV en sezgisel kaçırmış olabileceği veriler hakkında herhangi bir alan bilgisine yakalamak için, gerektiği gibi rafine için tavsiye edilir.

Varsayılan olarak, tfdv.infer_schema infers eğer gerekli her özelliğin şekli, value_count.min eşittir value_count.max özellik için. Set infer_feature_shape devre dışı şekil çıkarsama False argüman.

Şema kendisi olarak depolanır Şema protokolü tamponu ve böylece standart bir protokol-tamponu API kullanarak düzenlenebilir / güncellenebilir. TFDV de sağlamaktadır birkaç yardımcı program yöntemleri bu güncellemeler kolaylaştırmak için. Örneğin, şema gerekli dize özelliği tanımlamak için aşağıdaki dörtlük içerdiğini varsayalım payment_type tek bir değeri alır:

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 belirtmek için:

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

Örnek dizüstü her bir özelliği ve şemada kodlanmış olarak ana karakteristiklerini listeleyen bir tablo olarak şemanın basit görselleştirme içerir.

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

Hatalar için verileri kontrol etme

Bir şema göz önüne alındığında, şemada ayarlamanızı beklentilerine bir veri kümesi uygundur herhangi mevcut olup olmadığının kontrol etmek mümkündür veri anomalileri . (a) veri kümesinin istatistiklerini şemayla eşleştirerek veya (b) örnek bazında hataları kontrol ederek tüm veri kümesi genelinde toplu olarak hata olup olmadığını 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ç bir örneğidir Anomaliler protokol tampon ve istatistik şema kabul etmiyorsanız hataları açıklar. Örneğin, veri varsayalım other_path özelliği değerleriyle örnekler içerir payment_type şemada belirtilen alanın dışından.

Bu bir anomali üretir

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

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

Bu bekleniyorsa, şema aşağıdaki gibi 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 temel alınan veriler düzeltilmelidir.

Bu modül ile tespit edilebilir çeşitli anomali tipleri listelenmektedir burada .

Örnek dizüstü hatalar saptandığında özellikleri ve her hatanın kısa bir açıklama listeleyen bir tablo olarak anomaliler basit görselleştirme içerir.

Anomalilerin 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 sunar. TFDV, örnek bazında verileri 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. Bunu, veri kümenizde belirli bir anomali sergileyen örneklerin sayısını ve bu örneklerin özelliklerini belirlemek için kullanabilirsiniz.

TFDV ayrıca aşağıdakileri sağlar validate_instance bir şemayla eşleştirildiklerinde bağımsız bir örnek anomaliler sergiler olmadığının belirlenmesi için fonksiyon. Bu işlevi kullanmak için örnek, özellik değerlerinin numpy dizilerine bir dikt eşleme özellik adları olmalıdır. Sen dekoder kullanabileceğiniz tfx_bsl için kod çözme tefrika tf.train.Example bu biçime s. Örneğin:

   import tensorflow_data_validation as tfdv
   import tfx_bsl
   import pyarrow as pa
   decoder = tfx_bsl.coders.example_coder.ExamplesToRecordBatchDecoder()
   example = decoder.DecodeBatch([serialized_tfexample])
   options = tfdv.StatsOptions(schema=schema)
   anomalies = tfdv.validate_instance(example, options)

Olduğu gibi validate_statistics , sonuç bir örneği olup Anomaliler örneği belirtilen şemaya kabul etmez hataları açıklar protokol tamponu.

Şema Ortamları

Varsayılan olarak doğrulamalar, bir işlem hattındaki tüm veri kümelerinin tek bir şemaya bağlı olduğunu varsayar. Bazı durumlarda, küçük şema varyasyonlarının tanıtılması gereklidir, örneğin etiket olarak kullanılan özellikler eğitim sırasında gereklidir (ve doğrulanmalıdır), ancak sunum sırasında eksiktir.

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

Örneğin, ipuçları özelliği sunan verilerdeki eğitiminde etiket olarak kullanılır, ancak eksik olup olmadığını. Ortam belirtilmeden, 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)

Anormallikleri sunmanın 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' olacak şekilde ayarlamamız ve 'ipuçları' özelliğini HİZMET ortamından çıkarmamız gerekiyor.

    # 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 eğriliğini ve kaymasını kontrol etme

TFDV, bir veri kümesinin şemada belirlenen beklentilere uyup uymadığını kontrol etmenin yanı sıra şunları tespit etmek için işlevler de sağlar:

  • eğitim ve sunum verileri arasında çarpıklık
  • eğitim verilerinin farklı günleri arasında sürüklenme

TFDV, şemada belirtilen sapma/skew karşılaştırıcılarına dayalı olarak farklı veri kümelerinin istatistiklerini karşılaştırarak bu kontrolü gerçekleştirir. Örneğin, eğitim ve sunum veri kümesi içindeki 'ö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)

Bir veri kümesi şemada belirlenen beklentilere uygun olup olmadığını kontrol ile aynı, sonuç da bir örneği olup Anomaliler protokol tampon ve eğitim ve hizmet veren veri setleri arasında herhangi çarpıklık açıklar. Örneğin, hizmet veri özelliği ile önemli ölçüde daha fazla örnekler içerir varsayalım payement_type değeri olan Cash , bu eğri anomali üretir

   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 gerçekten eğitim ve veri sunma arasında bir çarpıklık gösteriyorsa, model performansı üzerinde doğrudan bir etkisi olabileceğinden daha fazla araştırma yapılması gerekir.

Örnek dizüstü çarpık tabanlı anomaliler kontrol basit bir örnek içerir.

Eğitim verilerinin farklı günleri arasındaki kaymanı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)

Ö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 biçiminiz bu listede yoksa, giriş verilerini okumak için özel bir veri bağlayıcısı yazmanız ve veri istatistiklerini hesaplamak için bunu TFDV çekirdek API'sine bağlamanız gerekir.

TFDV istatistik veri işlem için çekirdek API a, Işın PTransform giriş örnekleri toplu bir PCollection (giriş örneklerinin bir toplu bir şekilde temsil edilir alır Ok RecordBatch) ve tek ihtiva eden bir PCollection çıktılar DatasetFeatureStatisticsList protokolü tamponu.

Eğer özel veri konektörü uyguladıktan sonra bir Ok RecordBatch da girdi örnekleri toplu, sen ile bağlamak için gereken tfdv.GenerateStatistics veri istatistiklerini hesaplamak için API. Al TFRecord ait tf.train.Example örneğin s'. Biz sağlamak DecodeTFExample veri konektörü ve aşağıda ile bağlamak için nasıl bir örnektir tfdv.GenerateStatistics API.

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 üzerinden istatistikleri hesaplamak için yapılandırılabilir. Dilimleme bir ok almak dilimleme fonksiyonları sağlayan etkinleştirilebilir RecordBatch ve çıkış biçiminin dizilerini bir dizisini (slice key, record batch) . TFDV için kolay bir yol sağlar özelliği değeri göre dilimleme fonksiyonları oluşturmak parçası olarak sağlanabilir tfdv.StatsOptions istatistikleri hesaplanırken.

Dilimleme etkinleştirildiğinde, çıkış DatasetFeatureStatisticsList proto birden içeren DatasetFeatureStatistics Protos, her dilim için bir tane. Her dilim olarak ayarlanan bir eşsiz adıyla tanımlanır DatasetFeatureStatistics proto veri kümesi adı . Varsayılan olarak TFDV, yapılandırılmış 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])