Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Performans ipuçları

Bu belge, TFDS'ye özgü performans ipuçları sağlar. TFDS'nin veri kümelerini tf.data.Dataset s olarak tf.data.Dataset , bu nedenle tf.data kılavuzundaki tavsiyelerin hala geçerli olduğunu unutmayın.

Karşılaştırma veri kümeleri

Herhangi bir tf.data.Dataset nesnesini karşılaştırmak için tfds.core.benchmark(ds) kullanın.

Sonuçları normalleştirmek için batch_size= değerini belirttiğinizden emin olun (örn. 100 iter / sec -> 3200 ex / sec).

ds = tfds.load('mnist', split='train').batch(32).prefetch()
# Display some benchmark statistics
tfds.core.benchmark(ds, batch_size=32)
# Second iteration is much faster, due to auto-caching
tfds.core.benchmark(ds, batch_size=32)

Küçük veri kümeleri (<GB)

Tüm TFDS veri kümeleri, diskteki verileri TFRecord biçiminde TFRecord . Küçük veri kümeleri için (örn. Mnist, Cifar, ...), .tfrecord okumak önemli ek .tfrecord ekleyebilir.

Bu veri kümeleri belleğe sığdığından, veri kümesini önbelleğe alarak veya önceden yükleyerek performansı önemli ölçüde artırmak mümkündür. TFDS'nin küçük veri kümelerini otomatik olarak önbelleğe aldığını unutmayın (ayrıntılar için sonraki bölüme bakın).

Veri kümesini önbelleğe alma

Görüntüleri normalleştirdikten sonra veri kümesini açıkça önbelleğe alan bir veri ardışık düzeni örneği.

def normalize_img(image, label):
  """Normalizes images: `uint8` -> `float32`."""
  return tf.cast(image, tf.float32) / 255., label


ds, ds_info = tfds.load(
    'mnist',
    split='train',
    as_supervised=True,  # returns `(img, label)` instead of dict(image=, ...)
    with_info=True,
)
# Applying normalization before `ds.cache()` to re-use it.
# Note: Random transformations (e.g. images augmentations) should be applied
# after both `ds.cache()` (to avoid caching randomness) and `ds.batch()` (for
# vectorization [1]).
ds = ds.map(normalize_img, num_parallel_calls=tf.data.experimental.AUTOTUNE)
ds = ds.cache()
# For true randomness, we set the shuffle buffer to the full dataset size.
ds = ds.shuffle(ds_info.splits['train'].num_examples)
# Batch after shuffling to get unique batches at each epoch.
ds = ds.batch(128)
ds = ds.prefetch(tf.data.experimental.AUTOTUNE)

Bu veri kümesi üzerinde yineleme yaparken, ikinci yineleme, önbelleğe alma sayesinde ilkinden çok daha hızlı olacaktır.

Otomatik önbelleğe alma

Varsayılan olarak TFDS, aşağıdaki kısıtlamaları karşılayan veri kümelerini otomatik olarak önbelleğe alır:

  • Toplam veri kümesi boyutu (tüm bölümler) tanımlanmıştır ve <250 MiB
  • shuffle_files devre dışı bırakılır veya yalnızca tek bir parça okunur

try_autocaching=False ileterek otomatik önbelleğe almayı devre dışı tfds.ReadConfig tfds.load . Belirli bir veri kümesinin otomatik önbellek kullanıp kullanmayacağını görmek için veri kümesi kataloğu belgelerine göz atın.

Tüm verileri tek bir Tensör olarak yükleme

Veri kümeniz belleğe sığarsa, tüm veri kümesini tek bir Tensor veya NumPy dizisi olarak da yükleyebilirsiniz. Bunu, tüm örnekleri tek bir tf.Tensor toplu hale getirmek için batch_size=-1 ayarlayarak yapmak mümkündür. Sonra kullanmak tfds.as_numpy gelen dönüşüm için tf.Tensor için np.array .

(img_train, label_train), (img_test, label_test) = tfds.as_numpy(tfds.load(
    'mnist',
    split=['train', 'test'],
    batch_size=-1,
    as_supervised=True,
))

Büyük veri kümeleri

Büyük veri kümeleri parçalanır (birden çok dosyaya bölünür) ve genellikle belleğe sığmadığı için önbelleğe alınmamaları gerekir.

Karıştırma ve eğitim

Eğitim sırasında verileri iyi karıştırmak önemlidir; zayıf karıştırılmış veriler, eğitim doğruluğunun düşmesine neden olabilir.

Kayıtları karıştırmak için ds.shuffle kullanmaya ek olarak, birden çok dosyaya bölünmüş daha büyük veri kümelerinde iyi karıştırma davranışı elde etmek için shuffle_files=True ayarlamanız gerekir. Aksi takdirde, çağlar parçaları aynı sırayla okur ve böylece veriler gerçekten rastgele hale getirilmez.

ds = tfds.load('imagenet2012', split='train', shuffle_files=True)

Ayrıca, shuffle_files=True olduğunda, TFDS, options.experimental_deterministic devre dışı bırakır ve bu da performans artışı sağlayabilir. Belirleyici karıştırma elde etmek için, tfds.ReadConfig ile bu özelliği devre dışı tfds.ReadConfig : read_config.shuffle_seed ayarlayarak veya read_config.options.experimental_deterministic üzerine read_config.options.experimental_deterministic .

Verilerinizi çalışanlar arasında otomatik olarak parçalayın

Birden fazla işçi üzerinde eğitim tfds.ReadConfig , input_context bağımsız değişkenini kullanabilirsiniz, böylece her işçi, verilerin bir alt kümesini okuyacaktır.

input_context = tf.distribute.InputContext(
    input_pipeline_id=1,  # Worker id
    num_input_pipelines=4,  # Total number of workers
)
read_config = tfds.ReadConfig(
    input_context=input_context,
)
ds = tfds.load('dataset', split='train', read_config=read_config)

Bu, subsplit API'yi tamamlayıcı niteliktedir. Önce alt bölme API'si uygulanır ( train[:50%] okunacak dosyaların listesine dönüştürülür), ardından bu dosyalara bir ds.shard() op uygulanır. Örnek: train[:50%] num_input_pipelines=2 ile num_input_pipelines=2 , 2 çalışanın her biri verilerin 1 / 4'ünü okuyacaktır.

shuffle_files=True , dosyalar bir işçi içinde karıştırılır, ancak çalışanlar arasında karıştırılmaz. Her işçi, dönemler arasında aynı dosya alt kümesini okuyacaktır.

Daha hızlı görüntü kod çözme

Varsayılan olarak TFDS, görüntülerin kodunu otomatik olarak çözer. Ancak, ile çözme görüntüyü atlamak için daha fazla ölçülebilir olabilir durumlar vardır tfds.decode.SkipDecoding ve manuel olarak uygulanacak tf.io.decode_image op:

  • Örnekler filtrelenirken ( ds.filter ), örnekler filtrelendikten sonra görüntülerin kodunu çözmek için.
  • Görüntüleri kırparken, kaynaşmış tf.image.decode_and_crop_jpeg op.

Her iki örnek için kod , kod çözme kılavuzunda mevcuttur .