zoukankan      html  css  js  c++  java
  • pytorch loss总结与测试

    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)
    
  • 相关阅读:
    Web容器初始化过程
    基于LayUI实现前端分页功能
    Ubuntu16.04首次root登录设置
    Java集合Iterator迭代器的实现
    ThreadLocal的基本原理与实现
    Redis系列四之复制
    反应堆模式
    Netty学习之客户端创建
    Netty学习之服务器端创建
    Java NIO服务器端开发
  • 原文地址:https://www.cnblogs.com/o-v-o/p/9975364.html
Copyright © 2011-2022 走看看