2019年4月6日 星期六

PyTorch - 損失函數 - loss function

在 Deep Learning with Python 中了解到 loss function 與 optimizer 的重要性,見MNIST練習
損失函數是指用於計算實際值和預測值之間差異的函數,在機器學習過程中,有多種損失函數可供選擇。
PyTorch 文檔中介紹了許多Loss function 可以使用,當然也可以自定義,後面高級用法再來練習。
PyTorch 的 Module, 各種 NN LayerLoss functionregularizationactivation function 幾乎都在 torch.nn 中可以找到用法。 也有中文版可以看。
以下來練習一些簡單的Loss function 實作。
首先先給個兩組假設的數組,其一假裝是預測值,另一個組則是實際值,去計算其誤差值。
import torch from torch.autograd import Variable import torch.nn as nn import torch.nn.functional as F y_pre = Variable(torch.ones(2,2)) a=torch.Tensor(2,2) a[0,0]=0 a[0,1]=1 a[1,0]=2 a[1,1]=3 y_target = Variable (a) #print出來看看 print(y_pre) print(y_target)
tensor([[1., 1.],
        [1., 1.]])
tensor([[0., 1.],
        [2., 3.]])
預測數組是[[1., 1.],[1., 1.]] 實際值是[[0., 1.],[2., 3.]]
接著來套用一些常用的loss function

1. class torch.nn.L1Loss(size_average=True)

公式如下:
criterion = nn.L1Loss() loss = criterion(y_pre, y_target) print(loss)
tensor(1.)
先計算絕對差總和:|0-1|+|1-1|+|2-1|+|3-1|=4;
然後再取平均:4/4=1。最後得到1。

2. class torch.nn.MSELoss(size_average=True)

公式如下:
這算是regression 常用的 loss function。
criterion = nn.MSELoss() loss = criterion(y_pre, y_target) print(loss)
tensor(1.5000)
計算過程就省略了,將值套進公式即可。
後續還有很多不同的Loss function
可以參考 pytorch 文檔
這邊就先練習到這,其實做法很簡單,兩行代碼就可以處理計算loss值。

沒有留言:

張貼留言