1. 程式人生 > >深度學習torch之三(神經網路的前向傳播和反向傳播以及損失函式的基本操作)

深度學習torch之三(神經網路的前向傳播和反向傳播以及損失函式的基本操作)

1.神經網路的前向傳播和反向傳播

require'image';
input=torch.rand(1,32,32)
itorch.image(input)
隨即生產一張照片,1通道,32x32畫素的。為了直觀像是,匯入image包,然後用itorch.image()方法顯示生成的圖片,就是隨即的一些點。
output=model:forward(input)
用之前建立好的神經網路model呼叫forward()方法輸入隨即生成的圖片得到輸出的結果,如打印出來的形式,model最後是10個輸出節點,這裡輸出了10個值。注意,這是前向傳播,網路裡面的權重是隨即分佈的,這是BP演算法之前需要做的運算。
model:zeroGradParameters();
grandInput=model:backward(input,rand(10))
print(#grandInput)
model:zeroGrandParameters()是將網路裡面的梯度快取設定為0,model:backward是網路model的反向傳播方法,第一個引數是輸入的圖片,這裡應與forward()方法裡面輸入的圖片一致,第二個引數在這裡的意思是訓練用的分類標籤,注意不是預測出來的標籤,是訓練樣本的真實的標籤,即需要擬合的標籤。最後返回的是需要輸入的梯度,即進行梯度下降演算法是需要的那個梯度

2.損失函式的基本操作

criterion評價準則,

這是用來定義損失函式的。當你想讓你的神經網路學習一些東西時,你就要給他一些反饋,告訴他怎麼做是對的。損失函式能夠形式化的衡量你的神經網路的好壞。

criterion = nn.ClassNLLCriterion()
還是在nn這個包裡面有很多的評測函式,在這裡我選擇了ClassNLLCriterion()這種方法,這是用來多分類的方法。
err = criterion:forward(output,10)
損失函式的實現也有正向和反向兩個操作。就這個例子來說我們定義是適合對分類的損失函式,呼叫他的前向傳播方法並輸入的引數分別為預測的類訓練樣本所屬的類。這裡執行後會有一個返回值,即他們的誤差err。
gradients=criterion:backward(output,10)
執行完損失函式的前向操作後,再進行反向操作,backward()方法裡面的引數同forward()函式裡的引數,返回值是損失函式的梯度。
gradInput=model:backward(input,gradients)
model:updateParameters(0.01)
呼叫神經網路model的backward()方法輸入訓練集和其對應的損失函式梯度。然後,使用神經網路model的updateParameters()更新權重,該方法的輸入值為學習率,即完成了訓練。注意,gradInput這個返回值可寫可不寫不影響我們的訓練。