mert-kurttutan / torchview

torchview: visualize pytorch models
https://torchview.dev
MIT License
817 stars 37 forks source link

Feature Request: Hide Submodules #59

Closed kadirnar closed 1 year ago

kadirnar commented 1 year ago

Note: If, for some reason, you want to learn the content of this issue, and Google translate does not work, you can ask for translation :)

Merhaba Mert,

Mimari geliştirirken Torchview kütüphanesi çok işime yarıyor. Çok fazla block ve residual yapısı kullandığımda ana yapıyı torchview üzerinden anlamak daha karışık oluyor. Block modullerin içini göstermeyecek bir modül var mı?

Örnek: https://github.com/WongKinYiu/ScaledYOLOv4/blob/main/figure/scaled-yolov4.png

Çok fazla block yapısı oldugu durumlar da .pdf çıktısı çok uzun oluyor. Acaba bu çıktıyı yatay alma gibi bir özellik ekleyebilir misin?

Teşekkürler.

mert-kurttutan commented 1 year ago

Selamlar Kadir :)

Yatay sekilde gosterim bi sonraki versiyon cikacak. Hatta, buradaki issue onunla ilgili #56

Block yapisi ile ilgili, depth parametresi var. Dokumanda yazildigi gibi (dokumanda (e.g. docstring of draw_graph function) her parametreyi olabildigince aciklamaya calistim), depth parametresi gorsel cikan en buyuk depth icin ust limit kuruyor. Bir modulun depth i ise nested module hierarchy sindeki depth i ne karsilik geliyor. Mesela depth=2 (default depth=3), en fazla 2. sub module displayde gozukuyor onun icindekiler gozukmuyor.

Typo lar icin ozur, yazidigim klavye ingilizce :)

mert-kurttutan commented 1 year ago

Eger belli modulleri depth inden bagimsiz olarak kapatmak istiyorsan orasi baska. Cunku bu durum depth parametresinden cok daha fazla customization gerekiyor. Bu durumda aklima gelen plan, draw_graph a bi config setting verip bu config settings to modulleri belirtmek. Ama bu draw_graph fonksiyonun asiri compleks yapar, ki bunu pek istemiyorum.

Eger baska bi planin varsa aklinda onu da duymak isterim.

mert-kurttutan commented 1 year ago

Bi de mumkunse ingilizce devam edelim. Cunku bu durumda baska birisinin gorup tavsiye vermesi/anlamasi daha olanakli oluyor, ki bunu gecmis tecrube ettim :)

kadirnar commented 1 year ago

Ben bool ile ilgili parametreleri test etmiştim. Depth dediğiniz gibi işime yaradı. Block çıktılarını görüp ona göre düzenleme yapmak çok işime yarıyor. Görselleştirme kodlarına formatını bilmiyorum fakat daha düzenli bir çıktı mümkünse bunun iyileştirmesini talep edebilirim.

FPN + GhostBottleneck kullanarak tasarladığım yapı: https://drive.google.com/file/d/17DuijhDP5ILzo70LCbf2OKmXumm2WuCi/view?usp=share_link

Anlatmak istediğim biraz karışık olduğu için ingilizce anlamakta zor olur diye Türkçe yazdım. İngilizce konusunda haklısın. İstersen konu başlığını değiştirebilirsin. Cevaplar ve kod kalitesi için teşekkür ederim. Konuyu da kapatabilirsin.

mert-kurttutan commented 1 year ago

Daha duzenli bir cikti derken, tam olarak ne kastediyorsun? (Mesela node larin goreceli pozisyonlari ?) Duzenli kelimesi bircok manaya karsilik gelebilir :)

kadirnar commented 1 year ago

Daha duzenli bir cikti derken, tam olarak ne kastediyorsun? (Mesela node larin goreceli pozisyonlari ?) Duzenli kelimesi bircok manaya karsilik gelebilir :)

Haklısın. Mesela tasarladığım mimari bu diyebilirim. image

Torchview çıktısı ile baktığımda daha karışık geliyor. Torchview ile böyle bir çıktı almak zordur fakat daha anlaşılabilir olabilirse harika olacağını düşünüyorum. Belki pozisyonlarla ilgili bir şey yaparsan oklar birbirine girmiş gibi gözükmeyebilir. Görselleştirme modulunü bilmediğim için yorum pek yapamıyorum.

mert-kurttutan commented 1 year ago

Demek istedigini anladim, algoritmik bir cozumu var gibi. Ama tam kesin olmak icin, gosterdigin figurde birkac graph node u eksik gibi, mesela MaxPool2d, add (from maxpool2d ve singleConvBlock) Bunlari da ekleyip gosterirsen tam emin olabilirim.

mert-kurttutan commented 1 year ago

Su anlik en iyi cozum asagidaki gibi. graphviz (1) Buradak yaptigim tek sey depth ayni olan node lari ayni seviyeye koyman (buna expand_nested=True ile ulasabilirsin.)

Gosterdigin ghost block yapisi, bence, iyi bir cozum degil (bu yapi ilk denemelerimden biriydi). Bunu kullanirken gosterilen sekil modulun nested yapisini iyi yansitmiyor. Sanki ghost block input alip output cikartiyor gibi, ardindan onun submodulleri tekrardan forward prop yapiyor. Bunun yerine expand_nested=True gorsel olarak modulun yapisini daha iyi yansitiyor. Cunku hangi submodulun hangi module ait oldugunu gorebiliyorsun

kadirnar commented 1 year ago

UpConv gitmeden + simgesiyle yeni bir conv göstermem gerekiyordu. Gösterim de hata yapmışım. Teşekkür ederim. Öyle UpConv iletiyorum.Maxpool veya başka bir işlem yok. Orada hata yapmışım. Aslında Torchview kütüphanesinin gelişmesi bu yüzden çok önemli :)

Demek istediğini pek anlamadım. Fakat kodları daha clean hale getirdiğimde daha iyi sonuç alacağım diye düşünüyorum. 1-2 hafta yoğunluğumdan sonra daha güzel bir şekilde deneyeceğim. Test için mimari kodlarını paylaşacağım. Yapabilirsem farklı kütüphanelerle karşılaştırma yapacağım. İlgin için teşekkür ederim.

mert-kurttutan commented 1 year ago

Pardon, ben daha once gosterdigin LDC model ini kullandigini dusundum. Ghost ile ilgimi yorumumu tamamen gormezden gelebilirsin :)