Layer sayisinin belirlenmesinde floor division kullanimi, neden?


#1

Building your deep neural network odevinde karslastigim bir kullanim var. Neden boyle bir sey kullanildigini anlayamadim. Amacini izah edebilir misiniz? Iki yerde kullanilmis, bir forward propagation’in sonunda bir de agirliklari guncellerken. Neden parametrelerin uzunlugunun ‘floor division’ 2’sini aliyoruz? number of layers dedigimiz sey zaten bizim tarafimizdan belirlenen bir hyperparameter degil mi? dogrudan arguman olarak girsek ya?


#2

@evrim burada önceki örnekte 2 katmanlı olan örnek çok katmanlı, layer_dims her katmanda değişiyor.
en başta parameters = {} gösterilmiş ve her katman sonucu çıkan işlemer de içine kaydedilmiş
L = len(layer_dims) olarak verilmiş, yani L de katman sayısını bilmediğimiz için değişiyor.
Bu güncelleme basamağında da parametre uzunluğunu güncelliyoruz ama güncellediğimiz uzunluk tam belli değil o yüzden len(parameters) değeri var ne kadar parametre girdisi olduysa hepsi. Neden 2 ye bölüyor çünkü hem W hem de b ile yapılan işlemlerde parameters kaydı var yani parameters*2 kere kayıt var parameters in içine değil uzunluğuna baktığı için bölüyor… bunlar 1000 olsaydı 1000’e bölerdi.
Burada L katmanlı ve L’si değişen bir ağ tanımlıyor. Katman sayısı belli ağda dediğiniz gibi yapılabilir ve bu ödevden önceki ödevde nasıl yapıldığını gösteriyor.


#3

belki sorumu guzel soramadim. sunu demek istemistim:

bir network dizayn ederken;

  • kac katman olacak
  • her bir katmanda ayri ayri kac hucre olacak
    en basindan itibaren, daha dizayn asamasindayken biliyoruz. diyoruz ki, ornegin, ben 5 katmanli ilk iki katmaninda 10’ar; 3 ve 4. katmanlarinda 5’er ve son katmaninda da tek hucreli bir yapi dizayn edecegim:
    layers_dims = [10, 10, 5, 5, 1]

hal boyleyken neden L degiskeni icin:
L = len(layers_dims) kullanmak yerine,
L = len(parameters) // 2 diye bir tanim kullanma geregi hissediyoruz?

L katmanli genel bir dizayn icin (yaptigimiz ornekte de boyle, asagida resimi var.) bile bir “layers_dims” tanimlamak zorundayiz. O yuzden kulagi kolay yoldan tutmak varken, boyle elimizi dolandirarak tutmanin amaci nedir?

asagidaki resimde de (son haftanin son odevi: derin sinir agi uygulamasi) onceden hazirladigimiz fonksiyonlari modelimizin icerisine yerlestiriyor ve modeli calistiriyoruz. Modeli calistirabilmek icin girdi olarak verdigimiz degerlerden biri de layers_dims.


#4

@evrim dediğiniz gibi de olur, ama bu ödev kapsamında dediğiniz gibi bir kısıt belirlenmemiş önceki ödeve dayandırılarak genişletme yapılmış eğer layers_dims girdi olarak belirli ve tanımlı olmuş olsaydı olurdu.


#5

Kusura bakmayin bunu anlamadim. Yukarida ornek olsun diye resimde gonderip highlight ettim:
layers_dims = [12288, 20, 7, 5, 1] olarak tanimlanmis ve yanina da 4 layer oldugu not olarak comment out edilmis. Ki bu durumda L = len(layers_dims)-1 olarak dizayn edilebiliyor olmali. bilgisayar basinda degilim animsayamadim hangi fonksiyon oldugunu, ancak bir evvelki odevde ilgili fonksiyonun icerisine L tanimini bu sekilde yapmak yeterli olmuyor mu?

Kusuruma bakmayin, uzattim, ya ben sizin isaret ettiginiz bir seyi gormedim/anlayamiyorum ya da aklima takilani mi ifade edemiyorum bilmiyorum


#6

@evrim dediğiniz şekilde tanımlanırsa olur, ödev içinde L’yi doğru tanımlarsanız olur.


#7

:+1:
tamam o zaman. L = len(parameters) // 2 kullaniminin ozel bir nedeni yoktu diye varsayiyorum.

tesekkurler