问题:
我们在训练网络时,在全连接层之后得到的向量feat 维度一般为(batchsize,numclass),这时候的feat是没有被归一化的。我们需要搞清楚之后输出和损失函数的搭配。
总结:
我们直接进行总结。
多分类:
- Crossentropy= LogSoftmax + NLLLoss = Softmax + Log +NLLLoss
代码等价版为:
inputs = torch.randn((64,14),requires_grad=True)
target = torch.tensor([random.randint(0,13) for _ in range(64)])
nn.CrossEntropyLoss()(inputs,target)
= nn.NLLLoss()(F.log_softmax(inputs,dim=1),target)
= nn.NLLLoss()(torch.log(F.softmax(inputs,dim=1)),target)
我们还有等价函数:只不过他们的用法不同而已
F.log_softmax =nn.LogSoftmax()
F.softmax = nn.Softmax()
二分类:
- sigmoid +BCEloss = BCEWithLogitsLoss
代码等价版为:
inputs = torch.randn(64,requires_grad=True)
target = torch.empty(64).random_(2)
nn.BCELoss()(F.sigmoid(inputs),target)
= nn.BCEWithLogitsLoss()(inputs,target)
我们还有等价函数:只不过他们的用法不同而已
F.sigmoid= nn.Sigmoid()