PyTorch 学习记录2

本文介绍了逻辑回归的基本概念,强调其在分类任务中的应用,并通过手写数字识别实例说明其与线性回归的区别。讲解了sigmoid函数的作用和新的损失函数选择。最后,展示了如何设计和实现一个简单的逻辑回归模型,包括代码示例和总结。
摘要由CSDN通过智能技术生成

逻辑回归简述

逻辑回归虽然也叫做回归但是处理的却是分类任务,逻辑回归的模型可以看下图

在这里插入图片描述能够看到逻辑回归模型与线性模型及其接近,只不过在最终多了一个sigmoid函数。它输出的最终结果也与线性回归的结果有巨大差异,在线性回归中我们会输出一个数值,而在逻辑回归中输出的则是一个属于某一类概率,这么做是有重要的现实意义的。我们以手写数字识别为例,系统需要识别0~9这十个数字
如果我们的识别结果是输出一个数值,比如输出1.2,识别结果为1,这个结果看似是合理的但这么做我们就隐式地确定了各数字之间的距离(e.g.在数值上1和7的距离显然比1和2的距离要大,但实际上我们都知道从数字的形状上来看1和7应该更为接近),这样显然是不合理的.
接下来我们谈一下相较于线性回归多出的那个sigmoid函数,它实际上是一类函数的统称(通常我们认为sigmoid函数是 σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+ex1
各种sigmoid函数既然输出的结果变了那么我们的损失函数自然也要跟着改变,线性回归的loss值是希望能让结果与目标之间的距离最小化,类似地我们这里使用二分类的交叉熵作为逻辑回归的loss: l o s s = − ( y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ) loss=-(ylog\hat{y}+(1-y)log(1-\hat{y})) loss=(ylogy^+(1y)log(1y^))
更多关于逻辑回归的内容可以看这里

设计模型

模型设计方面和上一课的内容大相径庭唯一的变化只在于在forward方法中新增一个sigmoid函数,这里直接给出完整代码:

import torch
import torch.nn.functional as F
x_data=torch.Tensor([[1.0],[2.0],[3.0]])
y_data=torch.Tensor([[0.0],[0.0],[1.0]])
#模型设计
class LogisticRegressionModeal(torch.nn.Module):
    def __init__(self):
        super(LogisticRegressionModeal,self).__init__()
        self.linear=torch.nn.Linear(1,1)
        
    def forward(self,x):
        y_pred=F.sigmoid(self.linear(x))
        return y_pred

model=LogisticRegressionModeal()
#构造损失和优化器
criterion=torch.nn.BCELoss(size_average=False)
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)
print(model.parameters())
#训练轮次
for epoch in range(1000):
    y_pred=model(x_data)
    loss=criterion(y_pred,y_data)
    print(epoch,loss.item())
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0,10,200)
print(x)
x_t=torch.Tensor(x).view((200,1))
print(x_t)
y_t=model(x_t)
y=y_t.data.numpy()
plt.plot(x,y)
plt.plot([0,10],[0.5,0.5],c='r')
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()
plt.show()

在这里插入图片描述

总结

本节课的内容并不多更像是上一节课内容的衍生,理解起来也没有什么困难

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值