semantic segmentationのloss functionで完全に迷子になったので復習.
回帰用
torch.nn.L1Loss()
これで学習すると重みがsparseになりやすいことが知られている.torch.nn.MSELoss
分類用
個のクラスに分類する.
torch.nn.CrossEntropyLoss
NLLとsoftmaxを合成したloss.
minibatch として,その元は次元のベクトルで,成分がクラスに分類されるスコアであるとする.スコアはによって確率に変換される.
をが分類されるべきクラス,をがに分類される確率とすると,
pytorchでは,入力は
input: のtensor. 行は.
target: のtensor,torch.nn.NLLLoss
Cross Entropy Lossとほとんど同じ. softmaxを噛ませるか噛ませないか.
torch.nn.PoissonNLLLoss
略torch.nn.NLLLoss2d
NLLLossの画像版で,inputのピクセルごとにNLLLossを計算する.
input: のtensor. とりあえずmini-batchの次元は無視するとして,の成分に対応する要素をとすると,
がinputのピクセルがクラスに属するスコアであって,をそれが属すべき真のクラスとすると
targetはというtensorで,成分は,
torch.nn.KLDivLoss
KL-divergenceによるloss. inputは確率分布だから,総和は1になる.
torch.nn.BCELoss
, binary cross entropy criterion
不安定なので,BCEWithLogitsLoss
が提案されている.BCEWithLogitsLoss
auto-encoderに使われるらしい. が必ず成立するようにする.
Semantic segmentationでは複雑なloss functionを自分で書いて実装することになる・・・