pytorch loss总结与测试

xiaoxiao2025-11-16  6

pytorch loss

参考文献:

https://blog.csdn.net/zhangxb35/article/details/72464152?utm_source=itdadao&utm_medium=referral

loss 测试

import torch from torch.autograd import Variable ''' 参考文献: https://blog.csdn.net/zhangxb35/article/details/72464152?utm_source=itdadao&utm_medium=referral 如果 reduce = False,那么 size_average 参数失效,直接返回向量形式的 loss; 如果 reduce = True,那么 loss 返回的是标量 如果 size_average = True,返回 loss.mean(); 如果 size_average = True,返回 loss.sum(); ''' # nn.L1Loss: loss(input, target)=|input-target| if False: loss_fn = torch.nn.L1Loss(reduce=True, size_average=False) input = torch.autograd.Variable(torch.randn(3, 4)) target = torch.autograd.Variable(torch.randn(3, 4)) loss = loss_fn(input, target) print(input) print(target) print(loss) print(input.size(), target.size(), loss.size()) # nn.SmoothL1Loss  在(-1, 1)上是平方loss, 其他情况是L1 loss if False: loss_fn = torch.nn.SmoothL1Loss(reduce=False, size_average=False) input = torch.autograd.Variable(torch.randn(3, 4)) target = torch.autograd.Variable(torch.randn(3, 4)) loss = loss_fn(input, target) print(input) print(target) print(loss) print(input.size(), target.size(), loss.size()) # nn.MSELoss 均方损失函数 if False: loss_fn = torch.nn.MSELoss(reduce=False, size_average=False) input = torch.autograd.Variable(torch.randn(3, 4)) target = torch.autograd.Variable(torch.randn(3, 4)) loss = loss_fn(input, target) print(input) print(target) print(loss) print(input.size(), target.size(), loss.size()) # nn.BCELoss if False: import torch.nn.functional as F loss_fn = torch.nn.BCELoss(reduce=False, size_average=False) input = torch.autograd.Variable(torch.randn(3, 4)) target = torch.autograd.Variable(torch.FloatTensor(3, 4).random_(2)) loss = loss_fn(F.sigmoid(input), target) print(input, input.shape) print(F.sigmoid(input)) print(target, target.shape) print(loss, loss.shape) # nn.CrossEntropyLoss if False: weight = torch.Tensor([1, 2, 1, 1, 10]) loss_fn = torch.nn.CrossEntropyLoss(reduce=False, size_average=False, weight=None) input = Variable(torch.randn(3, 5)) # (batch_size, C) target = Variable(torch.LongTensor(3).random_(5)) loss = loss_fn(input, target) print(input) print(target) print(loss) # nn.NLLLoss 负的 log likehood loss损失.用于训练一个n类分类器. if False: m = nn.LogSoftmax() loss = nn.NLLLoss() # input is of size nBatch x nClasses = 3 x 5 input = Variable(torch.randn(3, 5), requires_grad=True) # each element in target has to have 0 <= value < nclasses target = Variable(torch.LongTensor([1, 0, 4])) output = loss(m(input), target) print(output) # nn.LLLoss2d 对于图片的 negtive log likehood loss.计算每个像素的NLL loss if False: m = nn.Conv2d(16, 32, (3, 3)).float() loss = nn.NLLLoss2d() # input is of size nBatch x nClasses x height x width input = Variable(torch.randn(3, 16, 10, 10)) # each element in target has to have 0 <= value < nclasses target = Variable(torch.LongTensor(3, 8, 8).random_(0, 4)) output = loss(m(input), target) print(m(input)) print(output) # nn.MultiLabelMarginLoss input : x --> (N, c), y --> (N, c)其中y是 LongTensor, 且其元素为类别的index if False: x=Variable(torch.randn(3, 4)) y=Variable(torch.LongTensor(3, 4).random_(4)) loss=torch.nn.MultiLabelMarginLoss() output = loss(x, y) print(output) # nn.MultiLabelSoftMarginLoss 与MultiLableMarginLoss相同,区别在于y的类型是FloatTensor if False: x = Variable(torch.randn(3, 10)) y = Variable(torch.FloatTensor(3, 10).random_(10)) loss = torch.nn.MultiLabelSoftMarginLoss() output = loss(x, y) print(output) # nn.MultiMarginLoss 适用于多分类模型 if True: x = Variable(torch.randn(3, 10)) y = Variable(torch.LongTensor(3).random_(10)) loss = torch.nn.MultiMarginLoss() output=loss(x, y) print(output)
转载请注明原文地址: https://www.6miu.com/read-5039767.html

最新回复(0)