使用keras舉例說明:
網路結構如下:
loss定義如下:
model.compile(loss="categorical_crossentropy",optimizer=opt,metrics=["accuracy"],
loss_weights=
網路具有兩個輸出,分別都要計算loss,那麼在計算梯度反向傳播的時候,就會有以下問題:
整個網路進行幾次梯度更新,1次還是2次?
vgg網路部分會受到aux_out的梯度更新影響嗎?
concat操作之前的三個cnn網路,梯度是如何計算的?也就是說,網路有concat操作的時候,梯度更新如何作用於cancat之前的網路部分?
首先給出結論:在反向傳播的時候,梯度更新只進行1次。
因為keras是基於計算圖構建的網路,並且只有1個optimizer,optimizer也是計算圖的一部分,所以最終loss計算是統一進行的,像上面的具有兩個輸出的網路,loss計算公式如下:
loss = (main_weight * main_loss) + (aux_weight * aux_loss) #you choose the weights in model.compile
其中
網路所有的梯度計算仍然遵循最基本的∂(loss)/∂(weight_i)
因此,梯度更新只進行1次,計算方式如上所示。
concat是由三個cnn網路的輸出拼接而成的,在反向傳播的時候,會找到彼此的對應部分,有點像pooling操作的反向傳播。
假設三個cnn輸出的特徵圖尺寸完全相同,都是(h,w,c),concat後特徵圖為(h,w,3c),在反向傳播計算到concat層的時候
反向傳播和梯度消失
統計機器學習演算法由模型 策略和演算法三個要素構成,當選擇了一種演算法模型後,下一步就要考慮選擇什麼樣的策略或準則來最優化模型 損失函式是機器學習中用於衡量模型一次 結果好壞的目標函式 常用的損失函式有 1 0 1損失函式 非凸函式,只關心 值和真實值是否相同,沒有關係他們之間的距離或誤差,有很多不...
pytorch梯度累加反向傳播
傳統的訓練函式,乙個batch是這麼訓練的 for i,images,target in enumerate train loader 1.input output images images.cuda non blocking true target torch.from numpy np.arr...
Tensorflow 卷積的梯度反向傳播
我們分兩種不同的情況討論valid卷積的梯度 第一種情況,在已知卷積核的情況下,對未知張量求導 即對張量中每乙個變數求導 第二種情況,在已知張量的情況下,對未知卷積核求導 即對卷積核中每乙個變數求導 1.已知卷積核,對未知張量求導 我們用乙個簡單的例子理解valid卷積的梯度反向傳播。假設有乙個3x...