【Pytorch实战(四)】线性判决与逻辑回归

本文深入探讨了PyTorch中的线性判决概念,对比线性回归,讲解了二元及多元判决的损失函数选择,如BCE与CrossEntropy,并通过实例演示了如何使用PyTorch实现二元判决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 【Pytorch实战(三)】线性回归中介绍了线性回归。线性判决与线性回归是类似的,区别在于线性回归的“标签”通常是较为连续的取值,而线性判决的“标签”往往只有几个可能的取值,例如【0,1】。
  • 在线性回归中,经常使用MSE损失torch.nn.MSELoss()、L1损失torch.nn.L1Loss和SmoothL1损失torch.nn.SmoothL1Loss等。相应地,在线性判决中也需使用合适的损失。对于二元判决常用BCE(Binary Cross Entropy)损失;对于多元则常用Cross Entropy损失。
  • 以二元判决为例,计算BCE损失需要获得一个预测概率,这需要使用逻辑回归算法(对应于torch.sigmoid()函数);若拓展至多元则对应于softmax函数。具体公式不再赘述,可参照结合实例理解pytorch中交叉熵损失函数进行理解。
  • 实际实现中,二元的torch.nn.BCELoss()torch.nn.BCEWithLogitsLoss()又有所区别,前者需传入预测概率和真实标签,而后者则需传入W与X线性运算的结果Z和真实标签。多元的则使用torch.nn.CrossEntropyLoss即可。
  • 以下为例程:
import torch
import torch.nn
import torch.optim

x = torch.tensor([[1., 2., 1.], [2., 4., 1.], [3., 5., 1.], [4., 2., 1.], [4., 4., 1.]])
y = torch.tensor([0., 1., 1., 0., 1.])
w = torch.zeros(3, requires_grad=True)

L = torch.nn.BCEWithLogitsLoss()
optimiter = torch.optim.Adam([w])

for step in range(100001):
    if step:
        optimiter.zero_grad()
        loss.backward()
        optimiter.step()
    pred = torch.mv(x, w)
    loss = L(pred, y)
    if step % 10000 == 0:
        print('step{}: loss={}, w={}'.format(step, loss, w.tolist()))
# 测试
z = torch.mv(x, w)
y_ = torch.sigmoid(z)
print(y_)
以上为个人理解,如有不正之处还请指出,欢迎交流!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值