Skip to content

1.4. Verilerin Yüklenmesi

ayyüce kızrak edited this page May 20, 2019 · 9 revisions

Çiçek resimleri veri seti ile çalışacağız. Amaç, onları 5 çiçek türüne ayırmayı öğrenmektir. Veri yükleme tf.data.Dataset API kullanılarak gerçekleştirilir. İlk önce API'yi tanıyalım. Lütfen aşağıdaki not defterini açın, hücreleri çalıştırın (Shift-ENTER) ve "ÇALIŞMA İÇİN GEREKLİ" etiketini gördüğünüz her yerde talimatları izleyin.

Uygulama:Fun with tf.data.Dataset (playground).ipynb Fun with tf.data.Dataset (playground).ipynb

Ek bilgi

"Çiçekler" veri kümesi hakkında

Veri kümesi 5 klasörde düzenlenmiştir. Her klasör bir tür çiçek içerir. Klasörler ayçiçeği, papatya, karahindiba, lale ve gül olarak adlandırılır. Veriler, Google Cloud Storage'daki genel bir kovada barındırılıyor.

Alıntı:

gs://flowers-public/sunflowers/5139971615_434ff8ed8b_n.jpg
gs://flowers-public/daisy/8094774544_35465c1c64.jpg
gs://flowers-public/sunflowers/9309473873_9d62b9082e.jpg
gs://flowers-public/dandelion/19551343954_83bb52f310_m.jpg
gs://flowers-public/dandelion/14199664556_188b37e51e.jpg
gs://flowers-public/tulips/4290566894_c7f061583d_m.jpg
gs://flowers-public/roses/3065719996_c16ecd5551.jpg
gs://flowers-public/dandelion/8168031302_6e36f39d87.jpg
gs://flowers-public/sunflowers/9564240106_0577e919da_n.jpg
gs://flowers-public/daisy/14167543177_cd36b54ac6_n.jpg

Neden tf.data.Dataset?

Keras ve Tensorflow, tüm eğitim ve değerlendirme fonksiyonlarında Veri Kümelerini kabul eder. Bir Veri Kümesinde veri yükledikten sonra API, sinir ağı eğitimi verileri için faydalı olan tüm ortak fonksiyonları sunar:

dataset = ... # bir veri yükle (aşağıdaki gibi)
dataset = dataset.shuffle(1000) # Veri setini 1000 buffer karıştır
dataset = dataset.cache() # veri kümesini RAM veya diskte önbelleğe al
dataset = dataset.repeat() # veri setini süresiz olarak tekrarlayın
dataset = dataset.batch(128) # veri kümelerini 128 parçahalinde toplu alır
dataset = dataset.prefetch(-1) # eğitim sırasında sonraki kümeleri önceden al

Bu makalede performans ipuçlarını ve Veri Kümesi en iyi uygulamalarını bulabilirsiniz. Referans belgeler burada.

tf.data.Dataset temelleri

Veri genellikle birden fazla dosya halinde gelir, burada görüntüler. Aşağıdakileri arayarak bir dosya adı veri kümesi oluşturabilirsiniz:

filenames_dataset = tf.data.Dataset.list_files('gs://flowers-public/*/*.jpg')
# The parameter is a "glob" pattern that supports the * and ? wildcards.

Daha sonra, tipik olarak dosyayı bellekteki gerçek verilere yükleyip deşifre edecek her dosya adına bir fonksiyonu "eşlersiniz/haritalandırırsınız":

def decode_jpeg(filename):
  bits = tf.read_file(filename)
  image = tf.image.decode_jpeg(bits)
  return image

image_dataset = filenames_dataset.map(decode_jpeg)
# bu şimdi kodu çözülmüş görüntülerin bir veri kümesidir (uint8 RGB format)

tf.data.Dataset ve eager modu

Tensorflow'un "eager" ve "graph" modu olmak üzere iki yürütme modu vardır. Burada yeni "eager execution" hakkında daha fazla bilgi edinebilirsiniz, ancak Veri Kümesi API'si için temel avantajı, normal bir Python döngüsünü kullanarak bir Veri Kümesinde yineleme yapmanıza ve bunlara .numpy () öğesini çağırarak tek tek veri öğesini görmenize olanak sağlamasıdır:

for data in my_dataset:
  print(data.numpy())

Eager modu, Tensorflow 2.0'da varsayılan olacaktır ancak o zamana kadar, bu kodu betiğinizin başına ekleyerek etkinleştirilir:

import tensorflow as tf
tf.enable_eager_execution()

Non-eager modda bir Veri Kümesinden okumak biraz daha karmaşıktır. Dizüstü bilgisayarın sonunda bir örnek verilmiştir, ancak bugün bu tür bir kodu yazmanız istenmeyecektir.

Tuples veri kümeleri

Denetimli öğrenme tekniklerinde, bir eğitim veri seti tipik olarak eğitim verileri çiftlerinden ve doğru cevaplardan oluşur. Buna izin vermek için kod çözme işlevi, perdeleri döndürebilir. Daha sonra bir veri tuples veri setine sahip olacaksınız ve yineleme yaptığınızda tuples döndürülecektir. Dönen değerler, modeliniz tarafından tüketilmeye hazır Tensorflow tensörleridir. Tensorflow'un "eager execution" modunda, değerlerini görmek için üzerlerinde .numpy () yöntemini çağırabilirsiniz:

def decode_jpeg_and_label(filename):
  bits = tf.read_file(filename)
  image = tf.image.decode_jpeg(bits)
  label = ... # çiçek ismini klasör isminden al
  return image, label

image_dataset = filenames_dataset.map(decode_jpeg)
# bu şimdi (resim, etiket) çiftlerinin bir veri kümesidir

for image, label in dataset:
  print(image.numpy().shape, label.numpy())

Sonuç: görüntüleri tek tek yüklemek yavaştır!

Bu veri setini tekrarlarken, saniyede 1-2 resim gibi bir şey yükleyebileceğinizi göreceksiniz. Bu çok yavaş! Eğitim için kullanacağımız donanım hızlandırıcıları bu oranın çoğunu koruyabilir. Bunu nasıl başaracağımızı görmek için bir sonraki bölüme gidin.

Çözüm

İşte çözüm defteri. Sıkışmışsanız kullanabilirsiniz.

Fun with tf.data.Dataset (solution).ipynb Fun with tf.data.Dataset (solution).ipynb

Neleri öğrendik?

✔️🤔 tf.data.Dataset.list_files

✔️🤔 tf.data.Dataset.map

✔️😀 eager modundaki veri kümeleri

✔️😓 eager olmayan modda veri kümeleri

Lütfen bu kontrol listesine göz atmak için bir dakikanızı ayırın.


→ Gelecek Bölüm: 1.5. Verilerin Hızlı Yüklenmesi

Clone this wiki locally