[Pytorch] loss

loss参数探究

以torch.nn.MSELoss为例。假设过两个全连接层,并指定网络层参数,weight = 1,bias =0.5。Input: (N, n),N表示BatcSize,n表示每个样本有n个点

import torch

class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.f = torch.nn.Sequential(torch.nn.Linear(3, 10),
                                  torch.nn.ReLU(),
                                  torch.nn.Linear(10, 3))
    def forward(self, input):
        output = self.f(input)
        return output

net = Net()
net.f[0].weight.data = torch.ones([10,3])
net.f[0].bias.data = torch.ones([10]) + 0.5

net.f[2].weight.data = torch.ones([3,10])
net.f[2].bias.data = torch.ones([3]) + 0.5

x = torch.tensor([[1.,2.,3.],
                 [4.,5.,6.]])
y = x * x

y_ = net(x)
print(y_)
criterion = torch.nn.MSELoss(reduction='mean')
loss = criterion(y, y_)
print(loss)

在定义torch.nn.MSELoss时有三项可选择输入:
最重要的是reduction

  1. reduction默认‘mean’。假设输入每个Batch有N个样本,每个样本有n个点。‘mean’的含义是对N*n个点分别计算loss,然后求平均。
  2. 类似的,也可以选择‘sum’。
  3. 还有一个选项‘None’,直接把N*n个点的loss输出

还有Pytorch官方不建议使用的两项size_average和reduce

  1. 如果 reduce = False,那么 size_average 参数失效,直接返回向量形式的 loss
  2. 如果 reduce = True,那么 loss 返回的是标量
    (1). 如果 size_average = True,返回 loss.mean()
    (2). 如果 size_average = False,返回 loss.sum()
  3. 默认情况下, reduce = True,size_average = True

什么意思?reduce=True,输出的只是一个数,这个数默认按size_average = True的方式(求平均),也可以选size_average = False(求和)。reduce=Flase,返回把N*n个点的loss,等效于reduction=‘None’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值