TensorFlow'un veri artırma yöntemlerini uygulayarak aşırı uydurmayı önleyin ve makine öğrenimi modelinizin doğruluğunu artırın.

Veri artırma, eğitim verilerine çeşitli dönüşümler uygulama sürecidir. Veri kümesinin çeşitliliğini artırmaya ve fazla uydurmayı önlemeye yardımcı olur. Fazla uydurma çoğunlukla, modelinizi eğitmek için sınırlı veriye sahip olduğunuzda ortaya çıkar.

Burada, veri kümenizi çeşitlendirmek için TensorFlow'un veri artırma modülünü nasıl kullanacağınızı öğreneceksiniz. Bu, orijinal verilerden biraz farklı olan yeni veri noktaları oluşturarak fazla uydurmayı önleyecektir.

Kullanacağınız Örnek Veri Kümesi

Şu adresteki kediler ve köpekler veri setini kullanacaksınız: Kaggle. Bu veri seti, kedi ve köpeklerin yaklaşık 3.000 görüntüsünü içerir. Bu görüntüler eğitim, test ve doğrulama kümelerine ayrılmıştır.

1.0 etiketi bir köpeği, 0.0 etiketi ise bir kediyi temsil eder.

Veri artırma tekniklerini uygulayan tam kaynak kodu ve bir sürümde bulunmayan kaynak kodu GitHub deposu.

TensorFlow'u Yükleme ve İçe Aktarma

instagram viewer

Takip etmek için bir temel Python anlayışı. Ayrıca temel makine öğrenimi bilgisine de sahip olmalısınız. Bilgi tazelemeye ihtiyacınız varsa, bazılarını takip etmeyi düşünebilirsiniz. makine öğrenimi ile ilgili öğreticiler.

Açık Google İşbirliği. Çalışma zamanı türünü GPU olarak değiştirin. Ardından, ortamınıza TensorFlow'u yüklemek için ilk kod hücresinde aşağıdaki sihirli komutu yürütün.

!pip yükleme tensorflow

TensorFlow'u ve ilgili modüllerini ve sınıflarını içe aktarın.

içe aktarmak tensör akışı gibi tf
itibaren tensorflow.keras.preprocessing.image içe aktarmak ImageDataGenerator
itibaren tensorflow.keras.models içe aktarmak Ardışık
itibaren tensorflow.keras.layers içe aktarmak Conv2D, MaxPooling2D, Düzleştirme, Yoğunlaştırma, Bırakma

bu tensorflow.keras.preprocessing.image veri kümenizde veri büyütme gerçekleştirmenizi sağlayacaktır.

ImageDataGenerator Sınıfının Örneklerini Oluşturma

örneğini oluşturun ImageDataGenerator tren verileri için sınıf. Eğitim verilerini ön işlemek için bu nesneyi kullanacaksınız. Model eğitimi sırasında gerçek zamanlı olarak yığınlarca artırılmış görüntü verisi üretecektir.

Bir görüntünün kedi mi köpek mi olduğunu sınıflandırma görevinde saygısız, rasgele genişlik, rasgele yükseklik, rasgele parlaklık ve yakınlaştırma veri artırma tekniklerini kullanabilirsiniz. Bu teknikler, gerçek dünya senaryolarını temsil eden orijinal verilerin varyasyonlarını içeren yeni veriler üretecektir.

# eğitim için görüntü verisi üretecini tanımlayın
train_datagen = ImageDataGenerator (yeniden ölçeklendirme=1./255,
yatay_flip=Doğru,
genişlik_kaydırma_aralığı=0.2,
height_shift_range=0.2,
parlaklık_aralığı=[0.2,1.0],
yakınlaştırma_aralığı=0.2)

Başka bir örneğini oluştur ImageDataGenerator test verileri için sınıf. ihtiyacınız olacak yeniden ölçeklendirmek parametre. Eğitim sırasında kullanılan biçime uyması için test görüntülerinin piksel değerlerini normalleştirir.

# test için görüntü verisi üretecini tanımlayın
test_datagen = ImageDataGenerator (yeniden ölçeklendirme=1./255)

Son bir örneğini oluşturun ImageDataGenerator doğrulama verileri için sınıf. Doğrulama verilerini, test verileriyle aynı şekilde yeniden ölçeklendirin.

# doğrulama için görüntü verisi üreticisini tanımlayın
validation_datagen = ImageDataGenerator (yeniden ölçeklendirme=1./255)

Diğer artırma tekniklerini test ve doğrulama verilerine uygulamanız gerekmez. Bunun nedeni, modelin test ve doğrulama verilerini yalnızca değerlendirme amacıyla kullanmasıdır. Orijinal veri dağılımını yansıtmalıdırlar.

Verilerinizi Yükleme

Oluşturmak DizinYineleyici eğitim dizininden nesne. Artırılmış görüntü yığınları oluşturacaktır. Ardından, eğitim verilerini depolayan dizini belirtin. Resimleri sabit bir boyuta yeniden boyutlandırın 64x64 piksel. Her toplu işin kullanacağı görüntü sayısını belirtin. Son olarak, kullanılacak etiket türünü belirtin. ikili (yani, kedi veya köpek).

# eğitim dizinini tanımlama
train_data = train_datagen.flow_from_directory (dizin=r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
hedef_size=(64, 64),
parti_boyutu=32,
class_mode='ikili')

Başka bir tane yarat DizinYineleyici test dizininden nesne. Parametreleri, eğitim verileriyle aynı değerlere ayarlayın.

# test dizinini tanımlama
test_data = test_datagen.flow_from_directory (dizin="/content/drive/MyDrive/cats_and_dogs_filtered/test",
hedef_size=(64, 64),
parti_boyutu=32,
class_mode='ikili')

Bir final oluştur DizinYineleyici doğrulama dizininden nesne. Parametreler, eğitim ve test verileriyle aynı kalır.

# doğrulama dizinini tanımlama
validation_data = validation_datagen.flow_from_dizin (dizin="/content/drive/MyDrive/cats_and_dogs_filtered/validation",
hedef_size=(64, 64),
parti_boyutu=32,
class_mode='ikili')

Dizin yineleyicileri, doğrulama ve test veri kümelerini artırmaz.

Modelinizi Tanımlama

Sinir ağınızın mimarisini tanımlayın. Kullanın Evrişimli Sinir Ağı (CNN). CNN'ler, görüntülerdeki kalıpları ve özellikleri tanımak için tasarlanmıştır.

model = Sıralı()

# 3x3 boyutunda 32 filtreli evrişimli katman
model.add (Dönş2D(32, (3, 3), aktivasyon='relu', girdi_şekli=(64, 64, 3)))

# havuz boyutu 2x2 olan maksimum havuzlama katmanı
model.add (MaxPooling2D(pool_size=(2, 2)))

# 3x3 boyutunda 64 filtreli evrişimli katman
model.add (Dönş2D(64, (3, 3), aktivasyon='relu'))

# havuz boyutu 2x2 olan maksimum havuzlama katmanı
model.add (MaxPooling2D(pool_size=(2, 2)))

# evrişim ve havuzlama katmanlarından çıktıyı düzleştirin
model.add (Düzleştir())

# 128 birim ve ReLU aktivasyonu ile tamamen bağlı katman
model.add (Yoğun(128, aktivasyon='relu'))

# aşırı uyumu önlemek için birimlerin %50'sini rastgele bırakın
model.add (Bırakma(0.5))

# sigmoid aktivasyonlu çıktı katmanı (ikili sınıflandırma)
model.add (Yoğun(1, aktivasyon="sigmoid"))

İkili kullanarak modeli derleyin çapraz entropi kayıp fonksiyonu. İkili sınıflandırma problemlerinde yaygın olarak kullanılır. Optimize edici için şunu kullanın: Adam iyileştirici. Uyarlanabilir bir öğrenme hızı optimizasyonu algoritmasıdır. Son olarak, modeli doğruluk açısından değerlendirin.

model.derleme (kayıp="binary_crossentropy", iyileştirici='adam', metrikler=['kesinlik'])

Modelin mimarisinin bir özetini konsola yazdırın.

model.özet()

Aşağıdaki ekran görüntüsü, model mimarisinin görselleştirmesini göstermektedir.

Bu size model tasarımınızın nasıl göründüğüne dair bir genel bakış sunar.

Modelinizi Eğitmek

kullanarak modeli eğitin. yerleştirmek() yöntem. Çağ başına adım sayısını eğitim örneklerinin sayısı bölü olacak şekilde ayarlayın. Parti boyutu. Ayrıca, doğrulama verilerini ve doğrulama adımlarının sayısını ayarlayın.

# Modeli eğitim verileri üzerinde eğitin
geçmiş = model.fit (train_data,
step_per_epoch=train_data.n //train_data.batch_size,
çağlar=50,
validation_data=validation_data,
validation_steps=validation_data.n // validation_data.batch_size)

bu ImageDataGenerator class, eğitim verilerine gerçek zamanlı olarak veri büyütme uygular. Bu, modelin eğitim sürecini yavaşlatır.

Modelinizi Değerlendirmek

Modelinizin performansını test verileri üzerinde değerlendirin. değerlendirmek() yöntem. Ayrıca test kaybını ve doğruluğunu konsola yazdırın.

test_loss, test_acc = model.evaluate (test_data,
adımlar=test_data.n // test_data.batch_size)
Yazdır(f'Test kaybı: {test_kayıp}')
Yazdır(f'Test doğruluğu: {test_acc}')

Aşağıdaki ekran görüntüsü modelin performansını göstermektedir.

Model, hiç görülmemiş veriler üzerinde oldukça iyi bir performans sergiliyor.

Veri büyütme tekniklerini uygulamayan bir kod çalıştırdığınızda, model eğitim doğruluğu 1'dir. Bu da aşırıya kaçtığı anlamına gelir. Ayrıca daha önce hiç görmediği veriler üzerinde kötü performans gösterir. Bunun nedeni, veri setinin özelliklerini öğrenmesidir.

Veri Büyütme Ne Zaman Yararlı Olmaz?

  • Veri kümesi zaten çeşitli ve büyük olduğunda: Veri artırma, bir veri kümesinin boyutunu ve çeşitliliğini artırır. Veri kümesi zaten büyük ve çeşitliyse, veri artırma yararlı olmayacaktır.
  • Veri kümesi çok küçük olduğunda: Veri artırma, orijinal veri kümesinde bulunmayan yeni özellikler oluşturamaz. Bu nedenle, modelin öğrenmesi gereken özelliklerin çoğundan yoksun olan küçük bir veri kümesini telafi edemez.
  • Veri artırma türü uygun olmadığında: Örneğin, nesnelerin yönünün önemli olduğu durumlarda görüntüleri döndürmek yardımcı olmayabilir.

TensorFlow Ne Yapabilir?

TensorFlow, çeşitli ve güçlü bir kitaplıktır. Karmaşık derin öğrenme modellerini eğitme yeteneğine sahiptir ve akıllı telefonlardan sunucu kümelerine kadar çeşitli cihazlarda çalışabilir. Makine öğreniminden yararlanan güçlü bilgi işlem cihazlarına yardımcı oldu.