1.網絡代碼怎么來的?
我想要實現一個功能,這個功能是輸入一張圖像,返回一個類別結果。
所以很明確就有三個部分,一個是接受圖像輸入,一個是處理圖像得到處理結果,一個是對處理結果判斷生成結果。
現在想要使這個功能更好更精確,所以需要改善中間的圖像處理部分,更夠更加精細的,更加準確的處理方法,以至于出現了數據預處理,特征提取,特征增強,特征融合,模型訓練等多個模塊。
這些模塊有機組合,就構成了一個神經網絡。與之對應的代碼就是網絡代碼。
必須要說明的是,網絡模塊與代碼是一一對應的。
2.怎么去讀代碼?
第一步要做的是弄清楚那一塊代碼對應哪一個模塊,輸入從哪里進,最后結果從哪里出,而不是直接上手,硬啃。一般而言,網上的代碼雖然注釋少,但基本大模塊的歸屬還是會標出來的。
第二步就是熟悉一些基本的python語言,比如要熟悉pytorch和tensorflow構建網絡的方法格式;還有像numpy的數據處理,tensor的格式轉換;if,for,while等語句使用方法。
第三步,生啃。這是必須經歷的事情,想要了解所有,就必須盡力一切。好在現在又ChatGPT等工具的幫助,可以快速的幫你完成這個過程。把所有不知道的地方給放到ChatGPT中,自己給代碼做一遍注釋。
3.運行代碼
即使你能看懂代碼了,代碼仍然存在很多問題或者bug。數據路徑,安裝包版本,日志存儲,等等。
在這個過程中,你要知道輸入的數據在那個地方處理,又進入到哪一個模塊,經過什么變化,得到什么結果。如果你能盯著數據在模型中走一遍,那么這段代碼對你來說,即使可以用了。
有一個技巧,就是用print打印你的數據,時刻觀察。當然也可以用Dbug,但不會用,你可以自己琢磨。
4.掌握
你可以想象得到,你的數據是怎么被處理,中間的過程,可視化一樣出現在你的腦海中。預處理部分怎么被剪切,然后縮放;特征提取中卷積怎么提取,池化怎么擴大感受野;特征增強怎么進行,注意力權重怎么提取,兩個矩陣怎么相乘;怎么把一個二維數據展成一維,怎么減少通道數,怎么歸一化;結果怎么輸出,損失函數怎么處理,網絡參數怎么更新。如果你能夠想象到這些,那么這個網絡你算是弄清楚了。就可以開始自己嘗試構建其他網絡或者自己更改模塊。