深度學習中的常見問題彙總(一)

2022-08-24 09:15:10 字數 1657 閱讀 5256

**在深度學習基礎網路不斷進化的過程中,可以發現新的模型不僅效能有極大地提公升,網路的複雜度通常也會更低。深度學習網路模型的複雜度直接關係到其實際應用中的速度與可行性,因此這裡總結一下 cnn 複雜度的含義與計算方式。

通常,我們假設計算機執行一行基礎**需要一次運算,那麼模型的時間複雜度即為模型的運算次數,用浮點運算次數 flops(floating-point operations) 表示。首先來看乙個最簡單的單層卷積的時間複雜度。

其中,而特徵圖的尺寸 m 又與輸入矩陣大小 x,卷積核尺寸 k,padding 和步長 stride 有關,其計算公式為:

m = (x - k + 2 * padding )/stride + 1
注:為了方便說明,上述所提到的卷積核尺寸 k 與輸入矩陣大小 x 均為正方形;

且為了簡潔,省略了模型中的偏置 bias。

對於整體的卷積網路而言,其時間複雜度的計算方式為各層複雜度的累加。其計算方式如下:

其中,在深度學習中,空間複雜度一般指的是訪存量,包括兩個部分:參數量,輸出特徵圖。

參數量:模型所有帶引數的層的權重引數總量(即模型體積,下式左半部分)。

特徵圖:模型在實時執行過程中,每層輸出的特徵圖大小(下式右半部分)。

注:實際上有些層(例如 relu)其實是可以通過原位運算完成的,此時就不用統計輸出特徵圖了。

感受野是深度學習中最為重要的概念之一,定義為:在卷積神經網路cnn中,決定某一層輸出結果中乙個元素所對應的輸入層的區域大小,被稱作感受野(receptive field)。通俗來說就是卷積層輸出的乙個點對映到輸入矩陣上的區域大小。感受野的大小直接影響到模型的輸出特徵,如對於目標檢測模型,不同尺寸的目標所適配的感受野大小也不同,因此為了讓模型能夠適應多尺度的目標檢測,通常會借助影象金字塔,或融合多個卷積層的特徵,以獲得最佳的檢測效能。

為了更直觀的理解感受野,可以借助如下的示意圖(為了方便,將二維簡化成一維)。這是乙個三層的 cnn 網路,每一層卷積核的 kernel_size=3, stride=1 ,那麼最上層的特徵所對應的感受野為7x7。

其中 rf 表示特徵感受野大小, l 表示層數,l=0 表示輸入層, 此時 rf0=1 , feature_stride_0=1 。

根據感受野的計算公式可以得到每一層的感受野大小:

第一層

第二層第三層

但如果有dilated conv的話,計算公式為

深度學習的模型訓練通常採用梯度更新的方法,且一般層數越深,就可以處理更為複雜的問題。但是隨之也帶了許多弊端,如梯度消失與梯度**。

神經網路的反向傳播是逐層對函式偏導相乘,因此當神經網路層數非常深的時候,最後一層產生的偏差就因為乘了很多的小於1的數而越來越小,最終就會變為0,從而導致層數比較淺的權重沒有更新,這就是梯度消失。

產生的原因:

梯度**與梯度消失類似,當每層的偏導數值都大於1時,經過多層的權重更新之後,梯度就會以指數形式增加,即為梯度**。

產生原因:

深度學習中常見問題

1.cai之前遇到乙個事情就是 無論輸入的是什麼,結果都是一樣的,並且同乙個生成的多個框的類別也都是一樣的 錯誤原因 test的網路沒有進行caffemodel的初始化 之前在實驗室跑deeplab 也出現過類似問題,因為test的prototxt中有一層的名字和caffemodel中的不一樣,導致...

vue常見問題彙總(一)

解決方法 修改一下config下面的index.js中bulid模組匯出的路徑 module.exports assetspublicpath預設的是 也就是根目錄。而我們的index.html和static在同一級目錄下面。所以要改為 再次執行 npm run build 解決方法 修改biuld...

深度學習基礎的常見問題

傾向於 一定範圍內 1 在神經元數量相同的情況下,更深的網路結構具有較大的容量,劃分組合增加了指數級的表達空間,能夠組合更多不同型別的子結構。也就意味著更容易學習和表達各種特徵。2 隱藏層的增加則意味著由啟用函式帶來的非線性變換的巢狀層數更多,可以構造更複雜的對映關係。超引數 超引數就是在學習過程之...