Zephyrnet Logosu

Görüntü Tanıma ve Doğal Dil İşleme için Transfer Öğrenimi

Tarih:

Bu makalenin 1. Kısmını okuma şansınız olduysa, Transfer Öğrenimi'nin bir görevde kullanılan bir modelden elde edilen bilgilerin uygulanmasının başka bir görev için temel noktası olarak yeniden kullanılabileceği bir makine öğrenme yöntemi olduğunu hatırlayacaksınız.

Eğer fırsatınız olmadıysa ve Transfer Learning'i çok iyi bilmiyorsanız, bir okuyun, bu makaleyi çok daha iyi anlamanıza yardımcı olacaktır. 

Görüntü Tanıma

 
O halde önce Görüntü Tanıma'nın ne olduğuna bakalım. Görüntü Tanıma, bir görüntü veya videodaki bir nesneyi veya özelliği algılayıp analiz edebilmek için bilgisayar teknolojisine atanan görevdir. Kalıpları tanımak üzere tasarlandıkları için derin sinir ağlarının sihirlerini kullandığı ana alandır. 

Sinir ağlarının nasıl analiz edildiğini ve görüntüleri nasıl anladıklarını görmek istiyorsanız, bir göz atın. okuyun. Bu, alt düzey katmanların düşük düzeyli özellikleri öğrenmeye nasıl konsantre olduğunu ve üst düzey katmanların daha yüksek düzeyli özellikleri öğrenmeye nasıl uyum sağladığını gösterir.

Bu makalenin 1. bölümünde ağın kedi ve köpekler üzerinde eğitilmesinden belli belirsiz bahsetmiştik, bunun hakkında daha fazla konuşalım. İnsan beyni nesneler arasındaki farkı tanıyabilir ve ayırt edebilir. Görüntü tanımanın da insan beynine benzer bir yeteneğe sahip olması, ayrıca görüntüdeki nesneler arasındaki farkı tanımlayabilmesi ve tespit edebilmesi amaçlanıyor. 

Görüntü tanıma tarafından kullanılan algoritma, bir girdi görüntüsü alan ve görüntünün içerdiğini çıkaran bir görüntü sınıflandırıcıdır. Bu algoritma, algıladığı nesneler arasındaki farkları öğrenmek için eğitilmelidir. Görüntü sınıflandırıcının kedileri ve köpekleri tanımlaması için, görüntü sınıflandırıcının kedi ve köpekleri de içermeyen binlerce kedi ve köpek görüntüsüyle birlikte eğitilmesi gerekir. Bu nedenle, bu görüntü sınıflandırıcıdan elde edilen veriler daha sonra uygulanabilir ve diğer görevlerde kedi ve köpeklerin tespitinde kullanılabilir. 

Peki önceden eğitilmiş görüntü modellerini nerede bulabilirsiniz?

 
Dışarıda çok sayıda önceden eğitilmiş model var, bu nedenle probleminizi çözmek için doğru olanı bulmak biraz araştırma gerektirecektir. Senin için biraz araştırma yapacağım. hakkında konuşarak başlayacağım keras. Keras, aktarım öğrenimi, özellik çıkarma, ince ayar ve tahmin için kullanılabilecek çok çeşitli önceden eğitilmiş modeller sunar. Bunların bir listesini bulabilirsiniz okuyun.

Keras uygulamasının bir örneği, yukarıda kısaca bahsettiğim Xception mimarisidir. ImageNet'te Xception'ı bu şekilde başlatabilirsiniz.

tf.keras.applications.Xception( include_top=True, ağırlıklar = "imagenet", input_tensor = Yok, input_shape = Yok, havuzlama = Yok, sınıflar = 1000, classifier_activation = "softmax", )

Keras hakkında konuşurken, TensorFlow Hub'ı da unutmayalım. TensorFlow, Google tarafından geliştirilen, makine öğrenimi ve derin öğrenmeyi destekleyen açık kaynaklı bir kitaplıktır. TensorFlow Hub, görüntü, metin, video ve ses sınıflandırması gibi önceden eğitilmiş, dağıtıma hazır çeşitli modellere sahiptir. 

Sıralı bir model, düz bir katman yığını için kullanmak için iyidir, bu, her katmanın bir giriş ve bir çıkış tensörüne sahip olmasını gerektirir. 

Örnek 1:

model = tf.keras.Sequential([ yerleştirme, tf.keras.layers.Dense(16, aktivasyon = "relu"), tf.keras.layers.Dense (1, aktivasyon = "sigmoid"), ])

Örnek 2:

m = tf.keras.Sequential([ hub.KerasLayer("https://tfhub.dev/google/imagenet/inception_v1/classification/5") ]) m.build([Yok, 224, 224, 3]) # Toplu giriş şekli.

Derin öğrenme içinde, bazı stratejiler kişinin önceden eğitilmiş modellerden maksimum fayda sağlamasına izin verebilir. 
 
 

Özellik çıkarma

 
Bahsedeceğim ilk strateji, Özellik Çıkarma. Esasen önceden eğitilmiş modeli, yeni bir sınıflandırıcı eğitmek için istenen özellikleri kullanarak sabit bir özellik çıkarıcı olarak çalıştırırsınız. Modelin giriş katmanına daha yakın olan evrişimsel katmanlar, görüntü tanımada kenarlar ve çizgiler gibi düşük seviyeli özellikleri öğrenir. Katmanlar ilerledikçe, eldeki sınıflandırma görevi olan çıktıya daha yakın belirli özellikleri yorumlayabilmek için daha karmaşık özellikleri öğrenmeye başlarlar. Görevimizi sınıflandırmak için modelin bölümlerini kullanarak farklı katman seviyelerini ayrı bir özellik çıkarma entegrasyonu olarak kullanabiliriz. 

Örneğin, görev, önceden eğitilmiş modelin yaptığı bir görüntüdeki nesneleri sınıflandırmaktan farklıysa, çıktıyı önceden eğitilmiş model birkaç katmandan geçtikten sonra kullanmak daha uygun olacaktır. Bu nedenle yeni bir modele girdi olarak istenen katmanın yeni çıktısını besleyecek yeni sınıflandırıcıya geçmek ve eldeki görevi çözebilmek için gerekli özellikleri kazanmış olur. 

Genel olarak, fikir, görevinizi çözmek için hangi özelliklerin yararlı olduğunu belirlemek için özellik çıkarmayı kullanarak önceden eğitilmiş modelden yararlanmaktır, ancak ağın çıktısını çok göreve özgü olduğu için kullanmayacaksınız. Ardından, görevinize özel olması için modelin son bölümünü oluşturmanız gerekecektir. 

İnce ayar

 
İkinci strateji, İnce ayar veya ağ cerrahisi olarak adlandırmayı sevdiğim şeydir. Performansı daha da iyileştirmek için istenen çıktıyı elde etmek için bir süreçte "ince" ayarlamalar yapmak üzerine kurulu olan İnce ayar hakkında yukarıda konuştuk. İnce ayar, Özellik Çıkarmanın bir sonraki adımı olarak da görülüyor. İnce ayarda, belirli katmanları dondurur ve doğruluğunu artırmak için bazılarını seçici olarak yeniden eğitiriz, daha düşük bir öğrenme hızında daha yüksek bir performans elde ederiz ve daha az eğitim süresi gerektirir. 

Temel modelden verimli özellik gösterimi elde edebilmek ve böylece elinizdeki görevi daha iyi karşılayabilmek istiyorsanız, ince ayar hayati önem taşır. 

Örnek: Keras'ta önceden eğitilmiş bir görüntü modeli nasıl kullanılır?

 
Şimdi bir örneğe bakalım. Kediler ve köpekler hakkında bu kadar çok konuştuğumuza göre, onlar üzerinde bir Görüntü tanıma örneği yapalım. 

Verileri yükle

 
O halde öncelikle ihtiyacımız olan kütüphaneleri içe aktardığımızdan ve Verileri yüklediğimizden emin olalım.

numpy'yi np olarak içe aktar tensorflow'tan tensorflow'u tf olarak içe aktar keras'ı içe aktar tensorflow_datasets'i tfds olarak içe aktar

Ne kadar veriyle çalıştığınızı anlamak ve resimlere bir göz atmak için eğitiminiz ve testiniz için örnek boyutunuzu yazdırmak her zaman iyidir, böylece hangi verilerle çalıştığınıza bir göz atabilirsiniz. 

Görüntü Tanıma ve Doğal Dil İşleme için Transfer Öğrenimi


 

Görüntülerin boyutlarının değişmesi nedeniyle, sinir ağı için iyi ve tutarlı bir girdi olduğundan, sabit görüntü boyutunu standartlaştırmak iyi bir yaklaşımdır. 

Veri ön işleme

 
Şimdi Data Augmentation'a geçelim. Daha küçük bir veri kümesiyle çalışırken, yatay çevirme gibi eğitim görüntülerine rastgele dönüşüm uygulamak iyi bir uygulamadır. Çevirme, bir görüntüyü dikey veya yatay eksende döndürmek anlamına gelir. Bu, modelin eğitim verilerinin farklı açılarına ve yönlerine maruz kalmasına yardımcı olacak ve fazla uydurmayı azaltacaktır. 

tensorflow'tan keras'ları tensorflow.keras'tan içe aktar katmanları data_augmentation = keras.Sequential( [layers.RandomFlip("horizontal"), katmanlar.RandomRotation(0.1),] )

Seçilen mimariden bir base_model oluşturma (Xception)

 
Bir sonraki adım, modeli oluşturmaktır. İlk önce bir temel modeli somutlaştırarak başlayacağız, istisna, ve önceden eğitilmiş ağırlıkların içine yüklenmesi. Bu örnekte ImageNet kullanıyoruz. Ardından temel modeldeki tüm katmanları dondurma işlemine geçiyoruz. Dondurma, antrenman sırasında ağırlıkların güncellenmesini önlemeye yardımcı olur.

base_model = keras.applications.Xception(weights="imagenet", # ImageNet'te önceden eğitilmiş ağırlıklar. input_shape=(150, 150, 3), include_top=False, ) base_model.trainable = False

Üst katmanı eğitin

 
Bir sonraki adım, donmuş katmanların üzerinde, eski özellikler hakkındaki bilgisini öğrenecek ve bunu yeni veri kümesindeki tahminleri belirlemek için kullanacak yeni bir katman oluşturmaktır. Bu, transfer öğrenme adımlarında daha fazla açıklandığı gibi faydalıdır, önceden eğitilmiş modeldeki mevcut çıktının ve modelinizden istediğiniz çıktının farklı olma olasılığı yüksektir, bu nedenle yeni katmanlar eklemek modeli genel olarak iyileştirecektir. 

# En iyi girişlerde yeni bir model oluşturun = keras.Input(shape=(150, 150, 3)) x = data_augmentation(inputs) # Rastgele veri artırma uygulayın


 

Görüntü Tanıma ve Doğal Dil İşleme için Transfer Öğrenimi


 

İnce ayar

 
Bu nedenle, modeli donmuş katmanlarla çalıştırdıktan sonra, modeli dondurulmamış temel modeller ile çalıştırmamız gerekir, bu da modeli daha düşük bir öğrenme oranıyla geliştirir. Fazla takma miktarını azaltmak istiyorsunuz, bu yüzden bu adımı yavaşça atalım ve temel modeli çözelim.

base_model.trainable = Doğru

Şimdi modeli tekrar derleme zamanı.

model.compile( optimizer=keras.optimizers.Adam(1e-5), # Düşük öğrenme oranı kaybı=keras.losses.BinaryCrossentropy(from_logits=True), metrics=[keras.metrics.BinaryAccuracy()], ) epochs = 10 model.fit(train_ds, dönemler=dönemler, validation_data=validation_ds)

Görüntü Tanıma ve Doğal Dil İşleme için Transfer Öğrenimi


 

Daha fazla incelemek isterseniz, tıklayarak yapabilirsiniz. okuyun Colab not defterini görüntülemek için 
 
 

Doğal Dil İşleme

 
Görüntü sınıflandırma hakkında biraz konuştuk, şimdi Doğal Dil İşleme'ye (NLP) bakalım. Peki NLP nedir? NLP, bir bilgisayarın, tıpkı biz insanlar gibi konuşma ve metin yoluyla insan dilini algılama ve anlama yeteneğidir. 

İnsan dili, konuşmayı ve metni doğru bir şekilde algılayabilen yazılımlar oluşturmada zorluklara neden olan birçok belirsizlik içerir. Örneğin, alaycılık, dilbilgisi ve sesteş sözcükler, ancak bunlar insan dilini öğrenmede yalnızca birkaç darbedir. 

NLP örnekleri, Konuşma Tanıma ve Duygu Analizidir. NLP kullanım durumları, spam algılama gibi şeylerdir. Biliyorum, NLP'nin spam tespitine dahil edilmesini hiç düşünmemiş olabilirsiniz, ama öyle. NLP'nin metin sınıflandırması, e-postaları tarama ve spam veya kimlik avı olabileceğini belirten dili algılama yeteneğine sahiptir. Bunu, kötü dilbilgisinin aşırı kullanımını, tehditleri, finansal terminolojinin aşırı kullanımını ve daha fazlasını analiz ederek yapar. 

Peki NLP'de Transfer Öğrenme nasıl çalışır? Temelde Görüntü Tanıma ile aynı şekilde çalışır. Doğal bir dil modeli eğitiminin fiyatı oldukça yüksek olabilir, çok fazla veri gerektirir ve süslü donanımlarda çok fazla eğitim süresi alır. Ancak iyi haber şu ki, tıpkı görüntü tanıma gibi, bu önceden eğitilmiş modelleri ücretsiz olarak indirebilir ve özel veri kümenizde çalışacak şekilde ince ayar yapabilirsiniz.

Bu önceden eğitilmiş modelleri nerede bulabilirsin, soruyorsun? 

 
Keras, yalnızca Görüntü tanıma için önceden eğitilmiş modeller sunmakla kalmaz, aynı zamanda NLP için mimariler de sağlar. bir göz atabilirsin okuyun

SarılmaYüz

 
bakalım SarılmaYüz. HuggingFace, onu kullanıcı dostu hale getirmek için harika bir iş çıkaran açık kaynaklı bir doğal dil işleme (NLP) sağlayıcısıdır. 

Transformers kitaplıkları, metin sınıflandırma ve soru yanıtlama gibi NLP görevlerini gerçekleştiren BERT gibi mimariler sağlayan python tabanlı bir kitaplıktır. Tek yapmanız gereken, önceden eğitilmiş modellerini sadece birkaç satır kodla yüklemek ve denemeye başlamaya hazırsınız. Transformers'ı kullanmaya başlamak için onu yüklemeniz gerekecek.

Aşağıda, bir metin parçasında ifade edilen bir görüşü tanımlayabilme yeteneği olan duygu analizini kullanmanın bir örneği verilmiştir.

! trafolardan pip kurulum transformatörleri import boru hattı sınıflandırıcı = boru hattı('duygu-analiz') sınıflandırıcı('Transfer öğrenme ile ilgili makaleyi çok faydalı buluyorum.')

Çıktı:

[{'etiket': 'POZİTİF', 'puan': 0.9968850016593933}]

Önceden eğitilmiş modelinizi ince ayar ile geliştirmek, Trainer API'sini kullanarak HuggingFace ile bir seçenektir. Transformers, önceden eğitilmiş modelinize ince ayar yapmanıza yardımcı olan bir Eğitmen sınıfına ayrıcalık tanıdı. Bu adım, verilerinizi işledikten sonra gelir ve TrainingArguments'ı içe aktarmanızı gerektirir.

trafolardan TrainingArguments'ı içe aktar

HuggingFace hakkında daha fazla bilgi edinmek için bunu takip edebilirsiniz. Link

Kelime Gömme

 
Kelime Gömmeye ne dersiniz? Bu da ne? Kelime yerleştirme, benzer kelimelerin benzer bir kodlamaya sahip olduğu bir temsildir. Bir belgedeki bir kelimeyi tespit edebilir ve onun ilişkisini diğer kelimelerle ilişkilendirebilir. 

Bunun bir örneği, metinleri vektör kodlamasıyla işleyen iki katmanlı bir sinir ağı olan Word2Vec'dir. 

Word2Vec, kelime temsilini öğrenmek için iki yöntem kullandı:

  1. Sürekli Kelime Torbası – kaynak kelimelere (komşu kelimeler) dayanarak hedef kelimeyi (orta kelime) tahmin etmeye çalışan bir model mimarisidir. Bağlamdaki kelimelerin sırası mutlaka önemli değildir, mimariye 'kelime çantası' denmesinin nedeni
  2. Sürekli Atlama gramı – Kelime Torbasının tam tersi olan bir model mimarisidir. Hedef kelimeye (orta kelime) verilen kaynak kelimeleri (komşu kelimeleri) tahmin etmeye çalışır.

Özellik çıkarma, üzerinde çalışmaya çalıştığınız NLP görevi türü için yararlı olan özellik temsillerini algıladığı ve ürettiği Word Gömme'de kullanılan bir stratejidir. Özellik çıkarmada, parçalar (cümleler veya kelimeler), her kelimeden verilen her kelimenin temsilini içeren bir matrise çıkarılır. Ağırlıklar değişmez ve modelin sadece üst katmanı kullanılır. 

Bununla birlikte, ince ayar önceden eğitilmiş modelin ağırlıklarını değiştirir, bu da yöntem ayarlama aşamasında, ağırlıkların değişmesi nedeniyle kelimelerde kayıplara neden olabileceğinden ve bir kez öğrenilenlerin artık hafızada olmamasından dolayı zararlı olabilir. . Bu 'felaket müdahale' olarak bilinir. 

Örnek: Keras'ta önceden eğitilmiş bir NLP modeli nasıl kullanılır?

 
Biz sadece Word Gömme hakkında konuşuyorduk, o yüzden bir örneğe bakalım. Kelime Gömmenin ne olduğunu hızlıca özetlemek gerekirse: benzer kelimelerin benzer kodlamaya sahip olduğu bir temsildir. Bir belgedeki bir kelimeyi tespit edebilir ve onun ilişkisini diğer kelimelerle ilişkilendirebilir. Öyleyse bunun nasıl çalıştığını görelim.

Verileri Yükle

 
Bu örnekte, film incelemelerine bakacağız. Yukarıda yaptığımız örneği hatırlarsanız, duygu analizi kullanarak bize ne kadar olumlu olduğunu belirleyen bir çıktı üretti. Bu film incelemeleri ile olumlu ve olumsuz, bu nedenle bu ikili sınıflandırmadır. 

url = "https://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz" veri kümesi = tf.keras.utils.get_file("aclImdb_v1.tar.gz", url, untar=True, önbellek_dir='.', önbellek_subdir='') dataset_dir = os.path.join(os.path.dirname(dataset), 'aclImdb') os.listdir(dataset_dir)

Aşağıdaki görselde 0 negatif ve 1 pozitif olmak üzere farkı görebilirsiniz.

Görüntü Tanıma ve Doğal Dil İşleme için Transfer Öğrenimi


 

Daha sonra pozitif tam sayıları sabit boyutlu yoğun vektörlere dönüştürmek için Keras'tan Gömme Katmanı kullanmaya başladım. Gömme için ağırlıklar rastgele başlatılır ve geri yayılım sırasında ayarlanır. Bilgi bir kez öğrenildiğinde, kelime yerleştirmeleri öğrendikleri kelimelerle daha önce öğrendikleri kelimeler arasındaki benzerlikleri kodlayacaktır.

# 1,000 kelimelik bir kelime hazinesini 5 boyuta gömün. embedding_layer = tf.keras.layers.Gömme(1000, 5)

Metin ön işleme

 
Metin ön işleme aşamasında, film incelemelerini vektörleştirmek için istenen parametrelerle bir TextVectorization katmanı başlatacağız. Metin vektörleştirme katmanı, film incelemelerinden dizeleri tam sayılara ayırmaya ve eşlemeye yardımcı olacaktır. 

# Bölünecek metin vektörleştirme katmanı ve dizeleri tam sayılarla eşleyin. vectorize_layer = TextVectorization( standardize=custom_standardization, max_tokens=vocab_size, output_mode='int', output_sequence_length=sequence_length)

Bir model oluşturun

 
Yukarıdaki ön işlemeden gelen vectorize_layer, dizeleri kelime indekslerine dönüştürdüğü için modele ilk katman olarak uygulanacaktır. Dönüştürülen dizeleri Gömme katmanına besleyecektir. 

Gömme katmanı daha sonra bu kelime indekslerini alır ve model eğitirken öğrendikleri her kelime indeksi için vektörü tarar. 

model = Sıralı([ vektörize_katman, Gömme(vocab_size, gömme_dim, isim=embedding"), GlobalAveragePooling1D(), Yoğun(16, aktivasyon='relu'), Yoğun(1) ])

Bu örnekte, kullanacağız Tensör Kartı, örneğin kayıp ve doğruluk gibi makine öğrenimi iş akışını gösteren görselleştirmeler sağlamak için bir araçtır. 

Modeli Derleyin

 
Adam optimizer ve BinaryCrossentropy kaybını kullanarak modeli derleyeceğiz.

model.compile(optimizer='adam', kayıp=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['doğruluk'])

Görüntü Tanıma ve Doğal Dil İşleme için Transfer Öğrenimi


 

Model metriklerini görselleştiren TensorBoard'dan bahsetmiştim ve bunu aşağıda görebilirsiniz.

Görüntü Tanıma ve Doğal Dil İşleme için Transfer Öğrenimi


 

Önceden eğitilmiş bir kelime yerleştirme modeli kullanarak bir NLP modelinin nasıl eğitileceğini ve test edileceğini gördünüz. Colab not defterine daha yakından bakmak isterseniz, bunu yapabilirsiniz. . 
 
 

Transfer öğrenimiyle ilgili en iyi uygulamalar nelerdir?

  1. Önceden eğitilmiş modeller – Farklı alanları kapsadıkları için hedef görevinizi çözmenize yardımcı olabilecek bu önceden eğitilmiş açık kaynak modellerden yararlanın. Sıfırdan bir model oluştururken size çok zaman kazandırabilir.
  2. Kaynak modeli – Hem kaynak göreviniz hem de hedef göreviniz ile uyumlu bir model bulmak önemlidir. Kaynak modeliniz hedefinizden çok uzaktaysa ve çok az bilgi aktarılabiliyorsa, hedef modele ulaşmak daha uzun süreceği için bu daha fazla zaman alıcı olacaktır. 
  3. Aşırı uyum gösterme – Kaynak görev ile hedef görevin çok benzer olduğu, küçük bir veri örneğine sahip görevleri hedefleyin; bu, fazla uyum sağlamaya neden olabilir. Kurs modelindeki katmanları dondurmak ve öğrenme oranını ayarlamak, modelinizdeki aşırı uyumu azaltmanıza yardımcı olabilir. 

Umarım bu makale, Makine Öğrenimi türleri aracılığıyla aktarım öğrenimini nasıl uygulayacağınız konusunda size daha iyi bir anlayış kazandırmıştır. Kendiniz deneyin!

 
 
Nişa Arya Veri Bilimcisi ve serbest teknik yazardır. Özellikle Veri Bilimi kariyer tavsiyesi veya öğreticiler ve Veri Bilimi hakkında teoriye dayalı bilgiler sağlamakla ilgilenmektedir. Ayrıca Yapay Zekanın insan yaşamının uzun ömürlü olmasına fayda sağladığı/yararlayabileceği farklı yolları keşfetmek istiyor. Başkalarına rehberlik ederken teknik bilgisini ve yazma becerilerini genişletmeye çalışan hevesli bir öğrenci.

Kaynak: https://www.kdnuggets.com/2022/01/transfer-learning-image-recognition-natural-language-processing.html

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?