Makine öğreniminin sıfır temeli mi? Bir görüntü tanıma sistemi oluşturmak için TensorFlow'u nasıl kullanacağınızı öğretin (3) |

Lei Feng'e göre: Bu makale, bir görüntü tanıma sistemi oluşturmak için TensorFlow'un kullanımını tanıtmanın üçüncü bölümüdür. İlk iki bölümde, CIFAR-10 veri setinden görüntüleri etiketlemek için bir softmax sınıflandırıcı oluşturduk ve yaklaşık% 25-30 doğruluk elde ettik. Farklı olasılıklara sahip 10 kategori olduğu için rastgele etiketlenmiş görsellerin doğruluğunun% 10 olmasını bekliyoruz. % 25-30 sonuç, rastgele etiketleme sonucundan çok daha iyidir, ancak yine de iyileştirme için çok yer vardır. Bu makalede yazar Wolfgang Beyer, aynı görevi yerine getiren bir sinir ağının nasıl kurulacağını anlatacak. Tahmin doğruluğunun ne kadar iyileştirilebileceğini görün! Leifeng.com tam metni derler ve izinsiz olarak yeniden basamaz.

İlk iki bölüm için lütfen "Makine Öğreniminin Sıfır Temeli? TensorFlow "(1) ve (2) ile nasıl bir görüntü tanıma sistemi oluşturacağınızı öğretin.

Nöral ağlar

Nöral ağ, biyolojik beynin çalışma prensibine göre tasarlanmıştır ve birçok yapay nörondan oluşur.Her nöron birden fazla giriş sinyalini işler ve tek bir çıkış sinyali döndürür ve ardından çıkış sinyali diğer nöronların giriş sinyali olarak kullanılabilir. Şuna benzeyen tek bir nörona bir bakalım:

Yapay nöron: Çıktısı, girdilerinin ağırlıklı toplamının ReLU fonksiyon değeridir.

Tek bir nöronda olan, softmax sınıflandırıcısında olana çok benzer. Bir nöronun bir girdi değerleri vektörü ve bir ağırlık değerleri vektörü vardır Ağırlık değerleri nöronun dahili parametreleridir. Giriş vektörü ve ağırlık değeri vektörü aynı sayıda değeri içerir, bu nedenle bunlar ağırlıklı toplamı hesaplamak için kullanılabilir.

WeightedSum = giriş1 × w1 + giriş2 × w2 + ...

Şimdiye kadar softmax sınıflandırıcıyla tamamen aynı hesaplamayı yapıyoruz. Bundan sonra, bazı farklı işlemler yapmalıyız: ağırlıklı toplamın sonucu pozitif olduğu sürece, nöronun çıktısı bu değerdir; ancak ağırlıklı toplam negatif ise Değer, negatif değer göz ardı edilir ve nöron tarafından üretilen çıktı 0'dır. Bu işleme düzeltilmiş doğrusal birim (ReLU) denir.

F (x) = max (0, x) ile tanımlanan doğrultulmuş doğrusal birim

ReLU kullanmanın nedeni, doğrusal olmayan özelliklere sahip olmasıdır, bu nedenle nöronların çıktısı, girdilerin katı bir doğrusal kombinasyonu (yani, ağırlıklı bir toplam) değildir. Artık tek bir nörona değil de tüm ağa baktığımızda, doğrusal olmamanın yararlı olduğunu bulacağız.

Yapay sinir ağlarındaki nöronlar genellikle birbirine rastgele bağlı değildir, çoğu zaman katmanlar halinde düzenlenirler:

Yapay sinir ağının iki katmanı vardır: bir gizli katman ve bir çıktı katmanı.

Girdi, bir katman olarak işlem görmez çünkü yalnızca verileri (dönüştürmeden) ilk uygun katmana besler.

wikimedia

Giriş görüntüsünün piksel değeri, ağın ilk katmanındaki nöronun girdisidir. İlk katmandaki nöronların çıktısı, ikinci katmandaki nöronların girdisidir ve sonraki katmanlar arasında böyle devam eder. Her katman için ReLU yoksa, sadece bir dizi ağırlıklı toplam alırız ve yığılmış ağırlıklı toplamlar tek bir ağırlıklı toplamda birleştirilebilir.Bu şekilde, birden çok katmanın tek katmanlı bir ağ üzerinde herhangi bir gelişimi olmaz. Doğrusal olmamanın önemli nedeni budur. ReLU doğrusal olmama yukarıdaki sorunları çözer, her ek katmanın gerçekten ağa bazı iyileştirmeler eklemesini sağlar.

Bizim ilgilendiğimiz şey, ağın son katmanının çıktısı olan görüntü kategorisinin puanıdır. Bu ağ mimarisinde, her nöron bir önceki katmandaki tüm nöronlara bağlıdır, bu nedenle bu ağa tamamen bağlı bir ağ denir. Bu eğitimin 3. Bölümünde bundan farklı olan diğer bazı durumları göreceğiz.

Bu, sinir ağı teorisine kısa girişin sonucudur. Gerçek bir sinir ağı kurmaya başlayalım!

Kod savaşı

Bu örneğin tam kodu Github'da mevcuttur. TensorFlow ve CIFAR-10 veri kümesi gerektirir (Lei Feng.com'daki önceki makalede bahsedilmiştir).

Önceki blog yazımı incelediyseniz, sinir ağı sınıflandırıcısının kodunun softmax sınıflandırıcısının koduna çok benzediğini göreceksiniz. Kodun modeli tanımlayan kısmını değiştirmenin yanı sıra, TensorFlow'un aşağıdakileri yapmasını sağlamak için bazı küçük özellikler de ekledim:

  • Düzenlilik : Bu, modelin aşırı uymasını önlemek için çok yaygın bir tekniktir. Optimizasyon sırasında bir reaksiyon kuvveti uygulayarak çalışır ve amacı modeli basit tutmaktır.

  • Modeli görselleştirmek için TensorBoard kullanın : TensorBoard, modele ve model tarafından oluşturulan verilere dayalı olarak tablolar ve grafikler oluşturmanıza olanak tanıyan TensorFlow'u içerir. Bu, modelinizin analiz edilmesine yardımcı olur ve özellikle hata ayıklama için kullanışlıdır.

  • kontrol noktası : Bu işlev, modelin mevcut durumunu daha sonra kullanmak üzere kaydetmenize olanak tanır. Bir modeli eğitmek önemli miktarda zaman alabilir, bu nedenle gereklidir ve modeli tekrar kullanmak istediğinizde sıfırdan başlamanız gerekmez.

Bu sefer kod iki dosyaya bölünmüştür: tanım modeli two_layer_fc.py ve çalışan model run_fc_model.py (ipucu: 'fc' tamamen bağlı demektir).

İki katmanlı, tamamen bağlı sinir ağı

Önce modelin kendisine bakalım ve ardından bazı çalıştırma ve eğitim işlemleri gerçekleştirelim. two_layer_fc.py aşağıdaki işlevleri içerir:

  • çıkarım Bizi giriş verilerinden sınıf puanlarına getirir.

  • kayıp , Sınıf puanından kayıp değerini hesaplayın.

  • Eğitim Tek bir eğitim adımı gerçekleştirmek için.

  • değerlendirme , Ağın doğruluğunu hesaplayın.

Sınıf puanı oluşturun: çıkarım

Çıkarım, ağ üzerinden ileriye doğru geçişi tanımlar. Peki, giriş görüntüsünden sınıf puanı nasıl hesaplanır?

İmages parametresi, gerçek görüntü verilerini içeren bir TensorFlow yer tutucusudur. Sonraki üç parametre, ağın şeklini veya boyutunu tanımlar. image_pixels, her girdi görüntüsündeki piksel sayısıdır, sınıflar farklı çıktı etiketlerinin sayısıdır, hidden_units, ağın ilk katmanındaki veya gizli katmanındaki nöronların sayısıdır.

Her nöron, önceki katmandaki tüm değerleri girdi olarak alır ve tek bir çıktı değeri üretir. Bu nedenle, gizli katmandaki her nöronun image_pixels girdisi vardır ve katman bir bütün olarak hidden_units çıktısını üretir. Ardından, her biri bir puana sahip sınıf çıktı değerleri oluşturmak için bunları çıktı katmanındaki sınıf nöronlarına girin.

reg_constant, düzenlileştirme sabitidir. TensorFlow, hesaplamaların çoğunu otomatik olarak işleyerek ağa çok kolay bir şekilde düzenleme eklememizi sağlar. Kayıp işlevi kullanıldığında, daha fazla ayrıntıya gireceğim.

Sinir ağı 2 benzer katmana sahip olduğundan, her katman için ayrı bir aralık tanımlanacaktır. Bu, her kapsamda değişken adlarını yeniden kullanmamızı sağlar. Değişken önyargılar, bilinen tf.Variable yolla tanımlanır.

Ağırlıklar değişkeninin tanımı burada daha fazla yer alacaktır. tf.get_variable, düzenlilik eklememize izin verir. Ağırlıklar, boyut olarak hidden_units (girdi vektör boyutu çıktı vektör boyutu ile çarpılır) içeren bir resim_ piksel matrisidir. Başlangıç parametresi, ağırlık değişkeninin başlangıç değerini tanımlar. Şimdiye kadar ağırlık değişkenini 0 olarak başlattık, ancak burada çalışmayacak. Tek bir katmandaki nöronlarla ilgili olarak, hepsi aynı girdi değerini alırlar, eğer hepsi aynı dahili parametrelere sahipse, aynı hesaplamayı yapacak ve aynı değeri çıkaracaktır. Bu durumdan kaçınmak için, başlangıç ağırlıklarının rastgele hale getirilmesi gerekir. Ağırlıkları normal olarak dağıtılan değerlere göre başlatarak, genellikle iyi çalışan bir başlatma şeması kullandık. Ortalamadan 2'den fazla standart sapma olan değerleri atın ve standart sapmayı giriş piksel sayısının karekökünün tersine ayarlayın. Neyse ki, TensorFlow tüm bu ayrıntıları bizim için ele aldı, yukarıdaki işi tamamlamak için yalnızca truncated_normal_initializer çağrısını belirtmemiz gerekiyor.

Ağırlıklar değişkeninin son parametresi düzenleyicidir. Şimdi yapmamız gereken, TensorFlow'a ağırlık değişkeni için L2-düzenlileştirmeyi kullanmasını söylemektir. Burada normalleştirmeyi tartışacağım.

İlk katmanın çıktısı, ağırlık matrisi artı bisa değişkeniyle çarpılan görüntü matrisine eşittir. Bu, önceki blog gönderisindeki softmax sınıflandırıcıyla tamamen aynıdır. Sonra tf.nn.relu uygulayın ve gizli katmanın çıktısı olarak ReLU işlevinin değerini alın.

İkinci katman birinci katmana çok benzer, girdi değeri hidden_units ve çıktı değeri sınıflardır, bu nedenle ağırlık matrisinin boyutu evettir. Bu, ağımızın son katmanı olduğu için artık ReLU'ya ihtiyaç yoktur. Girdiyi (gizli) ağırlıklarla ve artı sapma ile çarparak, sınıf puanları (logit'ler) elde edilebilir.

tf.histogram_summary, TensorBoard ile daha sonraki analizler için logits değişkeninin değerini kaydetmemizi sağlar. Bu nokta daha sonra tanıtılacaktır.

Sonuç olarak, tüm çıkarım işlevi girdi görüntüsünü alır ve sınıf puanını döndürür. İyi eğitilmiş bir sınıflandırıcının yapması gereken şey budur, ancak iyi eğitilmiş bir sınıflandırıcı elde etmek için önce bu sınıf puanlarının ne kadar iyi performans gösterdiğini ölçmeniz gerekir.Bu, kayıp fonksiyonunun işidir.

Kaybı hesaplayın: kayıp

İlk olarak, logit'ler (modelin çıktısı) ve etiketler (eğitim veri setinden doğru etiketler) arasındaki çapraz entropiyi hesaplıyoruz.Bu, softmax sınıflandırıcı için zaten tüm kayıp fonksiyonumuzdur, ancak bu sefer normalleştirmeyi kullanmak istiyoruz, Bu nedenle kayıplara başka bir terim eklenmelidir.

Bunu bir kenara bırakalım ve regülasyonu kullanarak nelerin başarılabileceğini görelim.

Aşırı uyum ve düzenleme

Yakalanan verilerdeki rastgele gürültünün istatistiksel modeli, gerçek veri temeli yerine verilerle eğitildiğinde buna aşırı uyum denir.

Kırmızı ve mavi daireler iki farklı sınıfı temsil eder. Yeşil çizgi fazla uyan bir modeli temsil eder ve siyah çizgi iyi uyan bir modeli temsil eder.

wikipedia

Yukarıdaki resimde mavi ve kırmızı dairelerle temsil edilen iki farklı sınıf bulunmaktadır. Yeşil çizgi, aşırı uygun sınıflandırıcıdır. Tamamen eğitim verilerini takip eder, ancak aynı zamanda büyük ölçüde eğitim verilerine dayanır ve bilinmeyen verilerle uğraşırken normalleştirilmiş modeli temsil eden siyah çizgiden daha kötü performans gösterebilir. Bu nedenle, düzenleme hedefimiz gereksiz karmaşıklık olmadan basit bir model elde etmektir. Bunu başarmak için L2 regülasyonunu seçiyoruz L2 regülasyonu, ağdaki tüm ağırlıkların kare toplamını kayıp fonksiyonuna ekler. Model büyük bir ağırlık kullanıyorsa, ağır bir cezaya karşılık gelir ve model küçük bir ağırlık kullanıyorsa, o zaman küçük bir ceza.

Bu yüzden ağırlığı tanımlarken düzenleyici parametresini kullandık ve ona bir l2_regularizer atadık. Bu, TensorFlow'a l2_regularizer değişkeninin L2 düzenleme terimlerini izlemesini (ve bunları reg_constant parametresiyle ağırlıklandırmasını) söyler. Tüm düzenleme öğeleri, kayıp işlevi-tf.GraphKeys.REGULARIZATION_LOSSES tarafından erişilebilen bir koleksiyona eklenir. Modelimizin toplam kaybını elde etmek için tüm düzenlenme kayıplarının toplamını önceden hesaplanan çapraz entropiye ekleyin.

Optimizasyon değişkeni: eğitim

global_step, gerçekleştirilen eğitim yinelemelerinin sayısını izleyen skaler bir değişkendir. Modeli eğitim döngümüzde tekrar tekrar çalıştırırken, döngünün yineleme değişkeni olan bu değeri zaten biliyoruz. Bu değeri doğrudan TensorFlow grafiğine eklemenin nedeni, modelin anlık görüntülerini alabilmektir.Bu anlık görüntüler, kaç eğitim adımının gerçekleştirildiği hakkında bilgi içermelidir.

Gradyan iniş optimize edicinin tanımı basittir. Öğrenme oranını sağlıyoruz ve optimize ediciye hangi değişkeni en aza indirmesi gerektiğini söylüyoruz. Ek olarak, optimize edici her yinelemede global_step parametresini otomatik olarak artıracaktır.

Ölçüm performansı: değerlendirme

Model doğruluğunun hesaplanması softmax durumundakiyle aynıdır: modelin tahmini gerçek etiketle karşılaştırılır ve doğru tahmin sıklığı hesaplanır. Doğruluğun zaman içinde nasıl geliştiğiyle de ilgileniyoruz, bu nedenle doğruluğu izleyen bir özet işlem ekledik. Bu, TensorBoard bölümünde tanıtılacaktır.

Şimdiye kadar yaptıklarımızı özetlemek için, 4 işlevi kullanan 2 katmanlı yapay bir sinir ağının davranışını tanımladık: çıkarım, ağ üzerinden ileri bir geçiş oluşturur ve sınıf puanını döndürür. Kayıp, tahmin edilen ve gerçek sınıf puanlarını karşılaştırır ve bir kayıp değeri oluşturur. eğitim, eğitim adımlarını yürütür ve modelin dahili parametrelerini optimize eder. Değerlendirme, modelin performansını ölçer.

Sinir ağını çalıştırın

Artık sinir ağı tanımlandığına göre, run_fc_model.py'nin modeli nasıl çalıştırdığını, eğittiğini ve değerlendirdiğini görelim.

Zorunlu içe aktarmanın ardından, model parametreleri harici işaretler olarak tanımlanır. TensorFlow, Python argparse etrafında küçük bir paket olan kendi komut satırı parametre modülüne sahiptir. Burada kolaylık sağlamak için kullanılır, ancak argparse doğrudan da kullanılabilir.

Komut satırı parametreleri, kodun ilk iki satırında tanımlanır. Her bayrağın parametresi, bayrağın adıdır (varsayılan değeri ve kısa bir açıklama). Dosyayı -h bayrağıyla çalıştırmak bu açıklamaları görüntüleyecektir. İkinci kod bloğu, komut satırı parametrelerini gerçekten ayrıştıran işlevi çağırır ve ardından tüm parametrelerin değerlerini ekrana yazdırır.

Her görüntünün piksel sayısını (32 x 32 x 3) ve farklı görüntü kategorilerinin sayısını tanımlamak için sabitleri kullanın.

Çalışma süresini kaydetmek için bir saat kullanın.

Eğitim süreci hakkında bazı bilgileri kaydetmek ve bu bilgileri görüntülemek için TensorBoard'u kullanmak istiyoruz. TensorBoard, her çalışmanın günlüğünün ayrı bir dizinde bulunmasını gerektirir, bu nedenle tarih ve saat bilgilerini günlük dizininin adına ve adresine ekleriz.

load_data, CIFAR-10 verilerini yükler ve bağımsız eğitim ve test veri kümelerini içeren bir sözlük döndürür.

TensorFlow grafiği oluştur

TensorFlow yer tutucularını tanımlayın. Gerçek hesaplamalar yapıldığında, bunlar eğitim ve test verileriyle doldurulacaktır.

images_placeholder, her bir görüntüyü, piksel boyutuyla çarpılan belirli bir boyutta gruplar. Toplu iş boyutunu "Yok" olarak ayarlamak, resmi çalıştırırken istediğiniz zaman boyutu ayarlamanıza olanak tanır (ağı eğitmek için kullanılan toplu iş boyutu komut satırı parametreleri aracılığıyla ayarlanabilir, ancak test için tüm test kümesini bir toplu iş olarak ele alırız).

tags_placeholder, her görüntü için doğru sınıf etiketini içeren bir tam sayı değerleri vektörüdür.

Burada daha önce two_layer_fc.py'de tanımladığımız işleve bir referans var.

  • Çıkarım bizi girdi verilerinden sınıf puanlarına götürür.

  • Kayıp, sınıf puanından kayıp değerini hesaplar.

  • eğitim, tek bir eğitim adımı gerçekleştirir.

  • Değerlendirme, ağın doğruluğunu hesaplar.

TensorBoard için bir özet işlem işlevi tanımlayın.

Modelin durumunu kontrol noktasında kaydetmek için bir kaydetme nesnesi oluşturun.

Bir TensorFlow oturumu başlatın ve tüm değişkenleri hemen başlatın. Daha sonra günlük bilgilerini düzenli olarak diske kaydetmek için bir özet düzenleyici oluşturuyoruz.

Bu satırlar, toplu girdi verilerinin oluşturulmasından sorumludur. 10 toplu iş boyutuna sahip 100 eğitim resmimiz olduğunu varsayalım. Softmax örneğinde, her yineleme için yalnızca 10 rastgele resim seçtik. Bu, 10 yinelemeden sonra her görüntünün ortalama olarak bir kez seçileceği anlamına gelir. Ancak aslında, bazı resimler birden çok kez seçilecek ve bazı resimler herhangi bir partiye eklenmeyecektir. Ancak tekrar sayısı yeterince sık olduğu sürece, tüm resimlerin rastgele farklı gruplara bölünmesi durumu iyileştirilecektir.

Bu sefer örnekleme sürecini iyileştirmek istiyoruz. Yapılması gereken, ilk önce eğitim veri setinin 100 görüntüsünü rastgele karıştırmaktır. Karıştırılan verilerin ilk 10 görüntüsü ilk grubumuz olarak kullanılır, sonraki 10 resim bizim ikinci grubumuzdur ve aşağıdaki gruplar analoji ile çıkarılabilir. 10 gruptan sonra, veri setinin sonunda, başlangıç adımlarıyla tutarlı bir şekilde karıştırma işlemini tekrarlayın ve toplu olarak sırayla 10 resim çekin. Bu, hiçbir görüntünün diğer görüntülerden daha sık alınmamasını sağlarken, görüntülerin döndürülme sırasının rastgele olmasını sağlar.

Bunu başarmak için data_helpers'daki gen_batch işlevi, her değerlendirmede bir sonraki grubu döndüren bir Python oluşturucu döndürür. Jeneratör ilkesinin ayrıntıları bu makalenin kapsamı dışındadır (burada iyi bir açıklama var). Python'un yerleşik zip işlevini kullanarak bir tuple listesi oluşturun ve ardından bunu oluşturma işlevine aktarın.

next (toplu iş) sonraki veri kümesini döndürür. Hala formda olduğu için, önce resmi etiketten ayırmak için sıkıştırmayı açmanız ve ardından feed_dict'i doldurmanız gerekir. Sözlük, tek bir eğitim verisi grubuyla doldurulmuş TensorFlow yer tutucuları içerir.

Her 100 yinelemeden sonra modelin mevcut doğruluğu değerlendirilir ve ekrana yazdırılır. Ek olarak, özet işlemi çalışıyor ve sonuç, özeti diske yazmaktan sorumlu olan summary_writer'a ekleniyor (bu bölüme bakın).

Bu satır, train_step işlemini çalıştırır (daha önce değişkenleri optimize etmek için gerçek talimatları içeren two_layer_fc.training'i çağırmak olarak tanımlanmıştır).

Bir modeli eğitmek uzun zaman aldığında, ilerlemenizin anlık görüntüsünü kaydetmenin kolay bir yolu vardır. Bu, daha sonra geri dönmenize ve modeli tamamen aynı durumda geri yüklemenize olanak tanır. Tek yapmanız gereken bir tf.train.Saver nesnesi (daha önce yaptığımız) oluşturmak ve ardından her anlık görüntü almak istediğinizde kaydetme yöntemini çağırmaktır. Restorasyon modeli de çok basittir, sadece kurtarıcının geri yüklemesini çağırın. Kod örneği için, lütfen gitHub deposundaki restore_model.py dosyasına bakın.

Eğitim tamamlandıktan sonra, nihai model test setinde değerlendirilir (test setinin modelin şu ana kadar görmediği verileri içerdiğini ve modelin yeni verilere genişletilip genişletilemeyeceğine karar vermemize izin verdiğini unutmayın).

sonuç

Modeli varsayılan parametrelerle "python run_fc_model.py" üzerinden çalıştıralım. Çıktım şöyle görünüyor:

Eğitimin doğruluğunun beklediğimiz rastgele tahmin düzeyinde (seviye 10- > Doğru olanı seçme şansı% 10). İlk yaklaşık 1000 yinelemede, doğruluk yaklaşık% 50'ye yükselir ve sonraki 1000 yinelemede bu değer civarında dalgalanır. Test doğruluğunun% 46'sı eğitim doğruluğundan daha düşük değildir. Bu, modelimizin çok fazla uygun olmadığını gösteriyor. Softmax sınıflandırıcısının performansı yaklaşık% 30'dur, bu nedenle% 46'lık iyileşme yaklaşık% 50'dir. Fena değil!

TensorBoard ile görselleştirin

TensorBoard, TensorFlow grafiklerini farklı yönlerden görselleştirmenize olanak tanır ve ağda hata ayıklama ve iyileştirme için çok kullanışlıdır. TensorBoard ile ilgili koda bir göz atalım.

Two_layer_fc.py'de aşağıdaki kodu görebiliyorum:

Bu üç satırın her biri bir özet işlem oluşturur. TensorFlow'a, bir özet işlemi tanımlayarak belirli tensörlerin özet bilgilerini (bu durumda günlükler, kayıp ve doğruluk) toplamasını söyleyin. Özet işleminin diğer parametreleri, özete eklemek istediğiniz bazı etiketlerdir.

Farklı türlerde özet işlemleri vardır. İlgili skaler (vektör olmayan) değerleri kaydetmek için scalar_summary ve ilgili çoklu değer dağıtım bilgilerini toplamak için histogram_summary kullanın (çeşitli özet işlemler hakkında daha fazla bilgi TensorFlow belgelerinde bulunabilir).

Run_fc_model.py'de TensorBoard görselleştirmesiyle ilgili bazı kodlar bulunur:

TensorFlow'daki bir işlem kendi başına çalışmaz, onu doğrudan aramanız veya ona bağlı başka bir işlemi aramanız gerekir. Özet bilgi toplamak istediğimizde her özet işlemini ayrı ayrı çağırmak istemediğimizden, tüm özetleri çalıştıran tek bir işlem oluşturmak için tf.merge_all_summaries kullanırız.

TensorFlow oturumunun başlatılması sırasında, özet verilerin gerçekten diske yazılmasından sorumlu olan bir özet yazıcı oluşturulur. Özet yazarının yapıcısında, logdir, günlüğün yazıldığı adrestir. İsteğe bağlı grafik parametresi, TensorBoard'a tüm TensorFlow grafiklerini oluşturmasını ve görüntülemesini söyler. Her 100 yinelemede birleştirilmiş özet işlemini gerçekleştirip sonuçları diske yazması için özet yazıcısına besliyoruz. Sonuçları görüntülemek için TensorBoard'u "tensorboard --logdir = tf_logs" ile çalıştırıyoruz ve localhost: 6006'yı bir web tarayıcısında açıyoruz. "Olaylar" sekmesinde, ağ kaybının nasıl azaldığını ve doğruluğunun zaman içinde nasıl arttığını görebiliriz.

Tensorboard grafiği, eğitim sırasında modelin kaybını ve doğruluğunu gösterir.

"Grafikler" sekmesi, tatmin olana kadar etkileşimli olarak yeniden düzenleyebileceğiniz tanımlanmış bir görselleştirilmiş tensorflow grafiği görüntüler. Aşağıdaki resmin ağ yapımızın çok iyi olduğunu gösterdiğini düşünüyorum.

Tensorboard1, Tensorboard görüntülerini etkileşimli görselleştirmede görüntüler

"Dağıtım" ve "histogram" sekmeleri hakkında bilgi için, tf.histogram_summary işlemi hakkında daha fazla bilgi edinebilirsiniz. Burada daha ayrıntılı bir analiz yapılmaz. Daha fazla bilgi, resmi tensorflow dosyasının ilgili bölümünde bulunabilir.

Takip iyileştirme

Belki de sinir ağlarından çok daha az hesaplama süresine sahip bir softmax sınıflandırıcısı eğitmeyi düşünüyorsunuz. Aslında durum budur, ancak softmax sınıflandırıcıyı eğitme süresi sinir ağını eğitmek için kullanılan süre kadar uzatılsa bile, ilki sinir ağıyla aynı performansı elde edemez. Performans artışı neredeyse yok denecek kadar azdır. Bunu sinir ağında da doğruladık.Ek eğitim süresi doğruluğu önemli ölçüde artırmayacak, ancak yapabileceğimiz başka şeyler var.

Seçilen varsayılan parametre değerlerinin performansı oldukça iyidir, ancak yine de iyileştirme için yer vardır. Gizli katmandaki nöron sayısı veya öğrenme oranı gibi parametreleri değiştirerek, modelin doğruluğu iyileştirilmelidir Modelin daha fazla optimizasyonu, test doğruluğunu% 50'den fazla olası kılar. Bu model% 65 veya daha fazlasına ayarlanabilirse, oldukça şaşırırdım. Ancak bunu nispeten kolay bir şekilde gerçekleştirebilecek başka bir ağ yapısı daha var: Tamamen bağlı olmayan bir tür sinir ağları olan Evrişimli Sinir Ağları Bunun yerine, girdilerindeki yerel özellikleri anlamaya çalışırlar ve bu da görüntüleri analiz etmek için çok yararlıdır. işe yarıyor. Uzamsal bilgi elde etmek için görüntüleri yorumlarken çok sezgisel hale getirir. Bu dizinin bir sonraki bölümünde, evrişimli sinir ağlarının nasıl çalıştığını ve kendi sinir ağınızı nasıl inşa edeceğinizi göreceğiz.

Leifeng.com bir sonraki bölümde evrişimli sinir ağlarının tanıtımına dikkat edecek, bu yüzden bizi izlemeye devam edin.

wolfib aracılığıyla, Leifeng.com tarafından derlenmiştir

Hunan Radyo ve Televizyon Bürosu bir il radyo ve televizyonu kamu hizmeti reklam çalışması konferansı düzenledi
önceki
1 milyarlık yatırımla, bir Hollywood gişe rekorları kıran bir film daha yakalandı ve Wu Jingin "Dünyayı Gezinmek" için rakibi burada!
Sonraki
Merhaba renk! Hisense World Cup Limited Edition TV E9 İncelemeleri
Lao Wang'ı ağlatan büyük kartal, nihayet nasıl yapıldığını anladım
Ekranı bilgisayara kaydetmenin süper kolay yolu nedir? Hafif iş yapıyorsun 201
Red Dragon Waijia PG saldırı modeli Mangheng Gundam olarak değiştirildi
Önerilen 10 komik komedi filmi, baskı altındayken onları arayabilirsin
İçerik mini programları, temettüsüz kalan WeChat resmi hesabının "ikinci baharını" başlatacak mı?
"Kung Fu 2" çekime başlayacak mı? Stephen Chow şahsen onayladı ve bir rol oynamayı düşünüyor!
1/144 orijinal ata Zaku takip tipi
Plotagraph +: Süper havalı! Fotoğrafları kısmen `` hareketli '' yapan gişe rekorları kıran düzeyde özel efektler oluşturun #iOS
Erkekleri Tutkulu Yapan 10 Film - Hangisi Senin Favorin
Unicom, ulusal numaraları birleştirmek için "Kart Numarası Bulutu" oluşturmak için Alibaba Cloud ile işbirliği yapıyor; Western Digital 14 TB helyum dolu sabit diskler bu yıl gönderilecek | Lei Feng
"Komedinin Yeni Kralı" gişede sokağa çıkıyor, Stephen Chow: Ben çoktan ölüyüm!
To Top