Kedi ve köpeğin tanınma doğruluğu Kaggle Top% 2 ile savaşır ve size Keras'ta nasıl derin bir CNN oluşturacağınızı öğretir

Xinzhiyuan önerilir

Bu makalenin içerdiği tüm kodlar buradan indirilebilir: https://github.com/ypwhs/dogs_vs_cats

Xinzhiyuan 327 Teknoloji Konferansı iqiyi tekrar video bağlantısı, orijinal metni okumak için lütfen tıklayın.

Bu makale, Udacity Zhihu Kurum Numarası, yazar Yang Peiwen, Udacity makine öğrenimi proje yorumcusu tarafından yeniden basılmak üzere yetkilendirilmiştir, teşekkür ederiz!

Kedi ve köpek kavgası

Veri seti kaggle'daki bir yarışmadan geliyor: Köpeklere Karşı Kediler Yarısı kedi ve köpek olmak üzere 25.000 eğitim seti var. Test seti 12.500 yapraktır ve kedi veya köpek olarak kalibre edilmemiştir.

Aşağıda eğitim setinin bazı örnekleri verilmiştir:

Veri ön işleme

Veri kümemizin dosya adı cat.0.jpg gibi type.num.jpg gibi adlandırıldığından, ancak Keras'ın ImageDataGenerator uygulamasını kullanmak farklı türde resimlerin farklı klasörlere bölünmesini gerektirir, bu nedenle ihtiyacımız var Veri kümesini önceden işleyin. Burada aldığımız fikir, resmi bir kez kopyalamak zorunda kalmamak ve gereksiz yer kaplamak avantajına sahip bir sembol bağlantısı oluşturmaktır.

Klasör yapısını aşağıdan görebiliriz .. train2'de kedi ve köpek olmak üzere iki klasör vardır.Her klasör 12.500 resim içerir.

Özellik vektörünü dışa aktar

Bu konu için önceden eğitilmiş ağların kullanılması en iyisidir. Önceki testlerden sonra ResNet50 gibi farklı ağları test ettik, ancak sıralamalar yüksek değil.Şimdi sadece bir veya iki yüz isim var gibi görünüyor, bu yüzden biz Model performansımızı iyileştirmemiz gerekiyor. Yani etkili bir yöntem, iyi sonuçlar elde etmek için farklı modelleri sentezlemektir. Tam bağlantımızı doğrudan devasa bir ağın arkasına eklersek, 10 neslin eğitimi büyük ağı on kez çalıştırmayı gerektirir ve evrişimli katmanlarımız eğitilemez, o zaman bu hesaplama boşa gider. Bu nedenle, daha sonraki eğitim için birden fazla farklı ağ çıktısının özellik vektörlerini kaydedebiliriz.Bunun avantajı, özellik vektörlerini kaydettikten sonra, sıradan dizüstü bilgisayarlarda bile kolayca eğitebilmemizdir.

Kodu yeniden kullanmak için, bir fonksiyon yazmanın çok gerekli olduğunu düşünüyorum, daha sonra fonksiyonumuzun modeli, giriş resminin boyutunu ve Ön işleme işlevi , Hem Xception hem de Inception V3'ün verileri (-1, 1) aralığıyla sınırlaması gerektiğinden ve daha sonra, her etkinleştirme haritası çıktısının evrişimli katman tarafından doğrudan ortalamasını almak için GlobalAveragePooling2D'yi kullanırız, aksi takdirde çıktı dosyası çok büyük olur ve Üstüne takılması kolaydır. Daha sonra iki üreteci tanımladık ve öznitelik vektörünü türetmek için model.predict_generator işlevini kullandık.Son olarak, ResNet50, Xception ve Inception V3 olmak üzere üç modeli seçtik (ilgileniyorsanız, VGG'nin öznitelik vektörünü de dışa aktarabilirsiniz). Her modelin dışa aktarım süresi oldukça uzundur, muhtemelen aws p2.xlarge üzerinde kullanılması gerekir On dakika ila yirmi dakika . Her üç model de ImageNet Yukarıda önceden eğitilmiştir, bu nedenle her modelin iyi test edildiği söylenebilir.Bu üç eski sürücüden türetilen öznitelik vektörleri sayesinde, bir resmin ne içerdiğini yüksek oranda özetlemek mümkündür.

Son olarak dışa aktarılan h5 dosyası üç uyuşmuş dizi içerir:

  • tren (25000, 2048)

  • test (12500, 2048)

  • etiket (25000,)

Özellik vektörünü kendiniz hesaplamak istemiyorsanız, dışa aktarılan dosyayı doğrudan buradan indirebilirsiniz: GitHub sürümleri (

Referans malzemeleri:

  • ResNet 15.12

  • Başlangıç v315.12

  • Xception 16.10

Özellik vektörünü yükle

Yukarıdaki koddan sonra, üç özellik vektör dosyası elde ettik, yani:

  • gap_ResNet50.h5

  • gap_InceptionV3.h5

  • gap_Xception.h5

Bu özellik vektörlerini yüklememiz ve bunları bir özellik vektöründe birleştirmemiz ve sonra X ve y'yi karıştırmayı unutmamalıyız, aksi takdirde daha sonra validation_split'i ayarladığımızda sorunlar olacaktır. Burada, numpy'nin rastgele sayı tohumu, herkesin bu kodu çalıştırabilmesini ve çıktının aynı olmasını sağlayan 2017'ye ayarlanmıştır.

Model oluştur

Modelin yapımı çok basit, sadece bırakın ve sonra sınıflandırın.

Modeli de görselleştirebiliriz:

Eğitim modeli

Model bileşenleri tamamlandıktan sonra eğitime başlayabiliriz Burada doğrulama seti boyutunu% 20 olarak belirledik, bu da eğitim setinin 20.000 resim ve doğrulama setinin 5.000 resim olduğu anlamına gelir.

Eğitim sürecinin çok hızlı geçtiğini, eğitimin on saniyeden daha kısa sürede tamamlanabildiğini ve doğruluk oranının da çok yüksek olduğunu görebiliyoruz.Doğrulama setindeki en yüksek doğruluk oranı% 99.6'dır ki bu bin resim için sadece 4 yanlış fotoğrafa eşdeğerdir. , Benden daha güçlü olduğu söylenebilir.

Tahmin test seti

Model eğitildikten sonra, test seti üzerinde tahminler yapabilir ve ardından nihai sonuçları görmek için onu kaggle'a gönderebiliriz.

Burada tahmin etmek için küçük bir numara kullanıyoruz. Öngörülen her değeri bir aralıkla sınırlıyoruz. Nedeni basit. Kaggle'ın resmi değerlendirme standardı LogLoss. Doğru tahmin eden örnekler için 0.995, 1 ile hemen hemen aynı, ancak tahmin hataları için Örnekte 0 ile 0,005 arasındaki fark çok büyüktür, bu 15 ile 2 arasındaki farktır. LogLoss'un sonsuzluk problemini nasıl ele aldığına bakın Aşağıdaki ifade, ikili sınıflandırma probleminin LogLoss tanımıdır.

$$ \ textrm {LogLoss} = - \ frac {1} {n} \ sum_ {i = 1} ^ n \ left $$

Bahsetmeye değer bir diğer şey de, test setinin dosya adlarının 1, 2, 3 olarak değil, aşağıdaki sırada düzenlenmiş olmasıdır:

Bu nedenle, her dosya adını işlememiz, onu df'ye atamamız ve son olarak bir csv dosyası olarak dışa aktarmamız gerekir.

sonuç olarak

Yukarıdaki şekilden de görebileceğimiz gibi, model ilk on örnek için çok olumlu bir tahmin verdi.Kaggle'a gönderildikten sonra, puan da harika, 0.04141, bu da küresel sıralamada 20/1314 olarak sıralanabilir. Model performansını optimize etmeye devam etmek istiyorsak, özellik vektörlerini türetmek veya önceden eğitilmiş modellere ince ayar yapmak (ince ayar yapmak) veya veri büyütme vb. Gerçekleştirmek için daha önceden eğitilmiş modeller kullanabiliriz.

Daha fazla teknik öğrenme bilgisi için Udacity'yi takip etmek için QR koduna uzun basın

Bu sonbahar birini bekle, el ele seyahat etmek için
önceki
2.0 güç 1.6 yakıt tüketimi! T'li bu SUV'lar başlamaya değer
Sonraki
Rusya'nın Çin'e uçakla nakit göndermesinin ardından, Rus buğdayı ihracatı artırabilir ve Rus çiftçiler daha fazla RMB almayı bekliyor
İnternet ünlülerinin en çirkin sahnesi: vatan güzel ama bazı insanlar buna layık değil
Tanrı'nın geri dönüşü Polis memuru, soğuk gecede atlayan adamı kurtardı, ancak karaya çıktıktan sonra onu kelepçeledi ...
Yol polisle karşılaştığında kaçtı.
Patron, hayal kırıklığına uğramış iyi çalışanları görmezden gelme
ABD doları hızla yükseldi, altın düştü, dolar döngüsü teorisinin sözcüsü: 6 yıl sonra, 2 dolar sadece 1 euro ile değiştirilebilir
Seul, 3-80 yaş arası kızların yaşadığı bir şehir
Pazarlama için bunlar olmadan yarın yok
1 Ocak'tan itibaren Fuliang İlçesindeki bu alanlarda havai fişek ve havai fişeklerin yerleştirilmesi yasaklanacak!
Açıkçası, motor gücü daha güçlü olmak için sıkıştırılabilir, üreticiler bunu neden yapmıyor?
Uçan felaketlerden muzdarip olan Uber'in insansız sürüşü durma noktasına geldi ve otonom sürüşün gelişimi daha da hayal kırıklığına uğradı
Kalbini ısıt! Jingdezhen: Temizlik işçileriyle ilgileniyoruz
To Top