神經網路加速訓練應避免的問題

2021-10-14 15:14:56 字數 1054 閱讀 2568

目前衡量模型複雜度的通用指標是flops,注意這裡的s是小寫,與flops區分,flops是floating-point operations per second的簡寫,即每秒所能夠進行的浮點運算數目,是乙個衡量gpu效能的指標。而衡量模型複雜度的指標是flops是floating-point operations的簡寫指浮點運算數,理解為計算量。可以用來衡量演算法/模型的複雜度。在**中常用gflops(1 gflops = 10^9 flops)。

flops在卷積中的計算公式為

其中的cin是指卷積層輸入tensor的通道數,cout指的是卷積層輸出tensor的通道數。k指的是卷積核大小。

去掉常數項,簡化操作

但是相同flops的模型在運算速度上可能存在差異,模型的記憶體使用量對於模型的速度同樣重要。

這裡c1是指輸入特徵的通道數,c2是指輸出特徵的通道數,這個指標的直觀含義就是記憶體訪問消耗的時間。

由**:shufflenet v2: practical guidelines for efficient cnn architecture design

連線:文章連線

同等通道大小最小化記憶體使用量,即當輸入通道和輸出通道相同時可以使記憶體使用量減小,網路訓練速度加快。

過量使用分組卷積會增加記憶體使用量,即使用過多的分組卷積會使網路的訓練速度下降,像mobilenet、shufflenet、xception其實都借鑑了卷積的group操作來加速模型,這是因為group操作可以大大減少flops,因此即便適當加寬網路也不會使得flops超過原來不帶group的卷積操作,但是網路模型的訓練時間大大增加了,這就是因為mac增大了。

網路模型分支越少,訓練的速度越快。模型支路越多對於平行計算越不利,這樣帶來的影響就是模型速度變慢。

element-wise對網路訓練速度有影響。網路中元素級操作越多,網路的訓練速度就會越慢,在網路訓練中的元素級操作有relu,add等。雖然他們並不會增大flops,但是會增大mac,網路訓練的速度也會變慢。

所以在網路訓練過程中應該盡量避免同一卷積操作中通道數的改變,對於分組卷積設定合理的分組數,網路分支不要太多,合理利用元素級操作

Pytorch教程 加速神經網路訓練

torch and numpy 變數 variable 激勵函式 關係擬合 回歸 區分型別 分類 快速搭建法 批訓練加速神經網路訓練 optimizer優化器 卷積神經網路 cnn 卷積神經網路 rnn lstm rnn 迴圈神經網路 分類 rnn 迴圈神經網路 回歸 自編碼 autoencoder...

優化神經網路的方法,加速訓練

1.bgd法。batch gradient descent批梯度下降 2.sgd法。stochastic gradient descent隨機梯度下降,也稱mbgd minibatch gradient descent 3.momentum法。模擬動量 4.nesterov momentum法,對3...

神經網路訓練

學習了bp神經網路演算法,剛開始最終要的一點不明白的就是前一層和後一層 這裡指的只有三層,輸入層,隱藏層,輸出層 的權重,其實神經網路演算法中,前一層的每乙個節點和後一層的每乙個節點都有連線權重,初始權重是隨機的。而更新權重是通過輸出層的值來反向更新的。基本過程如下 1.輸入第乙個訓練樣本 對應的就...