Önceden eğitilmiş bir CNN sınıflandırıcı kullanarak ve farklı bir görüntü veri kümesine uygulayın


11

Nasıl olur optimize bir ön eğitimli neural network ayrı probleme uygulamak için? Önceden eğitilmiş modele daha fazla katman ekler ve veri kümenizde test eder misiniz?

Örneğin, görev duvar kağıdı gruplarını sınıflandırmak için bir CNN kullanmaksa , her ikisi de görüntü sınıflandırıcıları olmasına rağmen, görüntü kedileri ve köpekleri üzerinde eğitilmiş önceden eğitilmiş bir ağı doğrudan sınıflandırmak için işe yaramayacağından eminim .

Yanıtlar:


15

Okumak - Transfer Öğrenimi Dezavantajlı Olduğunda? (@Media sayesinde) (bana çok bilgilendirici görünüyor, bu yüzden bu cevabı eksiksiz bir cevap vermek için buraya eklendi ...)

Sorunuzun Cevabı .. (buradan başlar)

Transfer Öğrenimi Aradığın Şey ..

  • Diyelim ki, bir görüntü veri kümesi üzerinde bir Evrimsel Sinir Ağı (Covnet) eğitimi içeren bir Derin Öğrenme görevi verildiğinde, ilk içgüdümüz ağı sıfırdan eğitmek olacaktır. Bununla birlikte, uygulamada, Covnet gibi derin sinir ağlarının, genellikle milyonlarca aralıkta çok sayıda parametresi vardır. Covnet'i küçük bir veri kümesinde (parametre sayısından daha küçük olan) eğitmek, Covnet'in genelleme yeteneğini büyük ölçüde etkiler, genellikle aşırı sığmaya neden olur.

  • Bu nedenle, daha sık uygulamada, ImageNet (1.2M etiketli görüntüler) gibi büyük bir veri kümesi üzerinde eğitilen mevcut ağlara, daha küçük veri kümesinde eğitmeye devam ederek (yani, geri yayılım çalıştırarak) ince ayar yapılabilir. Veri setimizin orijinal veri setine (ör. ImageNet) göre büyük ölçüde farklı olmaması koşuluyla, önceden eğitilmiş model zaten kendi sınıflandırma sorunumuzla ilgili öğrenilmiş özelliklere sahip olacaktır.

Modeller ne zaman ince ayar yapılır?

  • Genel olarak, veri setimiz, önceden eğitilmiş modelin eğitildiği veri setinden bağlamda büyük ölçüde farklı değilse, ince ayar yapmalıyız. ImageNet gibi büyük ve çeşitli bir veri kümesinde önceden eğitilmiş ağ, sınıflandırma sorunlarının çoğuyla ilgili ve kullanışlı olan erken katmanlarında eğriler ve kenarlar gibi evrensel özellikleri yakalar.

  • Tabii ki, veri setimiz, örneğin tıbbi görüntüler veya Çince el yazısı karakterler gibi çok spesifik bir alanı temsil ediyorsa ve bu alandaki önceden eğitilmiş ağların bulunamaması durumunda, ağı sıfırdan eğitmeyi düşünmeliyiz.

  • Diğer bir endişe, veri setimiz küçükse, önceden eğitilmiş ağın küçük bir veri setinde ince ayarının yapılması, özellikle VGG ağında olduğu gibi, özellikle ağın son birkaç katmanı tamamen bağlı katmanlarsa aşırı sığmaya yol açabilir. Deneyimlerimden bahsetmişken, birkaç bin ham örneğimiz varsa, ortak veri güçlendirme stratejileri uygulandığında (çeviri, rotasyon, çevirme, vb.), İnce ayar genellikle daha iyi bir sonuç verecektir.

  • Veri setimiz gerçekten küçükse, örneğin bin örnekten azsa, tam olarak bağlı katmanlardan önce ara katman çıktısını özellikler (darboğaz özellikleri) olarak almak ve doğrusal bir sınıflandırıcıyı (örn. SVM) eğitmek daha iyi bir yaklaşımdır. o. SVM, özellikle küçük bir veri kümesinde karar sınırları belirleme konusunda iyidir.

İnce Ayar Teknikleri

Aşağıda, ince ayar uygulaması için bazı genel yönergeler verilmiştir:

  • Ortak uygulama, önceden eğitilmiş ağın son katmanını (softmax katmanı) kesip kendi problemimizle ilgili yeni softmax katmanımızla değiştirmektir. Örneğin, ImageNet'teki önceden eğitilmiş ağ, 1000 kategoriye sahip bir softmax katmanıyla birlikte gelir.

  • Görevimiz 10 kategoride bir sınıflandırma ise, ağın yeni softmax katmanı 1000 kategori yerine 10 kategoriden oluşacaktır. Daha sonra, önceden eğitilmiş ağırlıkların ince ayarını yapmak için ağda yayılımı geri çalıştırırız. Ağın genelleme yapabilmesi için çapraz doğrulamanın yapıldığından emin olun.

  • Ağı eğitmek için daha düşük bir öğrenme oranı kullanın. Önceden eğitilmiş ağırlıkların rastgele başlatılan ağırlıklara kıyasla zaten oldukça iyi olmasını beklediğimizden, onları çok hızlı ve çok fazla deforme etmek istemiyoruz. Yaygın bir uygulama, başlangıç ​​öğrenme oranını sıfırdan eğitim için kullanılandan 10 kat daha küçük yapmaktır.

  • Önceden eğitilmiş ağın ilk birkaç katmanının ağırlıklarının dondurulması da yaygın bir uygulamadır. Bunun nedeni, ilk birkaç katmanın yeni problemimizle de ilgili olan eğriler ve kenarlar gibi evrensel özellikleri yakalamasıdır. Bu ağırlıkları olduğu gibi tutmak istiyoruz. Bunun yerine, ağı sonraki katmanlardaki veri kümesine özgü özellikleri öğrenmeye odaklayacağız.

Bu durumda onları tekrar eğitmem gerekiyor, sanki yanılmıyorsam, duvar kağıtları Image-net modellerin bir sınıfı değil .. Bunu yapmak için sıfırdan bir model oluşturmak zor olmayacak (tercihen daha sığ bir model olacak) burada da yapın ..)

Cevabımın kaynağı bu harika kursların çevirisidir.

Daha Fazla Okuma için,


Yalnızca katman çıkarımı yapıyorsanız, katmanlardan herhangi birinde ince ayar yapmamanız gibi. Son yoğun katmanı doğrusal bir sınıflandırıcıyla değiştirmek için bir neden var mı? Neden yeni bir yoğun katman olarak tutmuyorsunuz ve tüm alt katmanları donmuş halde tutarken yeniden eğitmiyorsunuz? Doğrusal bir sınıflandırıcıyı eğitmek yeni yoğun bir katmanı eğitmekten daha hızlı olacağı için mi?
CMCDragonkai

1
Özellik çıkarma için katman eklemeye gerek yoktur ancak Havuzlama ve Şekil yeniden boyutlandırma gibi birkaç katman, kararmaları eşleştirmek ve muhtemelen ara değerleri azaltmak için eklenir; Elbette, doğrusal bir modeli NN'den daha hızlı eğitmek daha hızlıdır, ancak her ikisini de deneyebilir ve kullanım durumunuz için neyin en iyi olduğunu görebilirsiniz; Son yoğun katmanı çöz ve eldeki probleme uyacak birkaç ek katmanla yeniden eğitim yapmak yaygın bir uygulamadır
Aditya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.