您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:pytorch实现逻辑回归

51自学网 2021-10-30 22:46:05
  python
这篇教程pytorch实现逻辑回归写得很实用,希望能帮到您。

本文实例为大家分享了pytorch实现逻辑回归的具体代码,供大家参考,具体内容如下

一、pytorch实现逻辑回归

逻辑回归是非常经典的分类算法,是用于分类任务,如垃圾分类任务,情感分类任务等都可以使用逻辑回归。

接下来使用逻辑回归模型完成一个二分类任务:

# 使用逻辑回归完成一个二分类任务# 数据准备import torchimport matplotlib.pyplot as pltx1 = torch.randn(365)+1.5   # randn():输出一个形状为size的标准正态分布Tensorx2 = torch.randn(365)-1.5#print(x1.shape)  # torch.Size([365])#print(x2.shape)  # torch.Size([365])data = zip(x1.data.numpy(),x2.data.numpy())  # 创建一个聚合了来自每个可迭代对象中的元素的迭代器。 x = [1,2,3]pos = []neg = []def classification(data):    for i in data:        if (i[0] > 1.5+0.1*torch.rand(1).item()*(-1)**torch.randint(1,10,(1,1)).item()):            pos.append(i)        else:            neg.append(i)classification(data)# 将正、负两类数据可视化pos_x = [i[0] for i in pos]pos_y = [i[1] for i in pos]neg_x = [i[0] for i in neg]neg_y = [i[1] for i in neg]plt.scatter(pos_x,pos_y,c = 'r',marker = "*")plt.scatter(neg_x,neg_y,c = 'b',marker = "^")plt.show()# 构造正、负两类数据可视化结果如上图所示# 构建模型import torch.nn as nnclass LogisticRegression(nn.Module):    def __init__(self):        super(LogisticRegression, self).__init__()        self.linear = nn.Linear(2,1)        self.sigmoid = nn.Sigmoid()    def forward(self,x):        return self.sigmoid(self.linear(x))model = LogisticRegression()criterion = nn.BCELoss()optimizer = torch.optim.SGD(model.parameters(),0.01)epoch = 5000features = [[i[0],i[1]] for i in pos]features.extend([[i[0],i[1]] for i in neg])   #extend 接受一个参数,这个参数总是一个 list,并且把这个 list 中的每个元素添加到原 list 中features = torch.Tensor(features)   # torch.Tensor 生成单精度浮点类型的张量label = [1 for i in range(len(pos))]label.extend(0 for i in range(len(neg)))label = torch.Tensor(label)print(label.shape)for i in range(500000):    out = model(features)    #print(out.shape)    loss = criterion(out.squeeze(1),label)    optimizer.zero_grad()    loss.backward()    optimizer.step()    # 分类任务准确率    acc = (out.ge(0.5).float().squeeze(1)==label).sum().float()/features.size()[0]    if (i % 10000 ==0):        plt.scatter(pos_x, pos_y, c='r', marker="*")        plt.scatter(neg_x, neg_y, c='b', marker="^")        weight = model.linear.weight[0]        #print(weight.shape)        wo = weight[0]        w1 = weight[1]        b = model.linear.bias.data[0]        # 绘制分界线        test_x = torch.linspace(-10,10,500)   # 500个点        test_y = (-wo*test_x - b) / w1        plt.plot(test_x.data.numpy(),test_y.data.numpy(),c="pink")        plt.title("acc:{:.4f},loss:{:.4f}".format(acc,loss))        plt.ylim(-5,3)        plt.xlim(-3,5)        plt.show()

附上分类结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持51zixue.net。


python中Tkinter实现分页标签的示例代码
python 获取毫秒级时间问题的解决
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。