当前位置:   article > 正文

使用PyTorch实现逻辑回归模型_pytorch训练逻辑回归

pytorch训练逻辑回归

在本文中,我们将使用PyTorch库来实现一个简单的逻辑回归模型。逻辑回归是一种广泛应用于二分类问题的机器学习算法。我们将通过以下步骤来实现这个模型:

1. 准备数据集

2. 设计模型

3. 构建损失函数和优化器

4. 训练模型

5. 测试和绘制结果


1. 准备数据集

首先,我们需要准备一个包含输入特征和标签的数据集。

import torch:导入PyTorch库,这是一个用于深度学习和机器学习的开源库。

import torch.nn.functional as F:导入PyTorch中的函数模块,这里将其命名为F,方便后续调用。

import numpy as np:导入NumPy库,它是一个用于科学计算的Python库。

import matplotlib.pyplot as plt:导入Matplotlib库,它是一个用于绘制图表和可视化数据的Python库。

接下来是准备数据集的部分:

x_data = torch.Tensor([[1.0], [2.0], [3.0]]):创建一个包含三个样本的输入数据张量(tensor),每个样本是一个一维向量。这里的输入数据为[1.0, 2.0, 3.0]

y_data = torch.Tensor([[0], [0], [1]]):创建一个包含三个样本的标签数据张量(tensor),每个样本是一个标量。这里的标签数据为[0, 0, 1]

  1. import torch
  2. import torch.nn.functional as F
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. x_data = torch.Tensor([[1.0], [2.0], [3.0]])
  6. y_data = torch.Tensor([[0], [0], [1]])

2. 设计模型

接下来,我们需要定义一个逻辑回归模型。定义一个名为LogisticRegressionModel的类,该类继承自torch.nn.Module。这个类实现了一个简单的逻辑回归模型。

在类的构造函数__init__中,通过调用父类的构造函数来初始化模型。然后,创建了一个线性层self.linear,输入维度为1,输出维度也为1。

forward方法中,将输入数据x传递给线性层进行前向传播计算,得到线性层的输出结果。接着,使用F.sigmoid函数对线性层的输出结果进行激活操作,得到最终的预测值y_pred。最后,返回预测值y_pred作为模型的输出。

接下来,创建了一个LogisticRegressionModel的实例对象model

这里我们使用PyTorch的`torch.nn.Module`类来定义一个线性层和一个Sigmoid激活函数。

  1. class LogisticRegressionModel(torch.nn.Module):
  2.     def __init__(self):
  3.         super(LogisticRegressionModel, self).__init__()
  4.         self.linear = torch.nn.Linear(1, 1)
  5.     def forward(self, x):
  6.         y_pred = F.sigmoid(self.linear(x))
  7.         return y_pred
  8. model = LogisticRegressionModel()

3. 构建损失函数和优化器

为了训练模型,我们需要定义一个损失函数和一个优化器。

1.`criterion = torch.nn.BCELoss(size_average=False)`:这行代码定义了一个二元交叉熵损失函数(Binary Cross Entropy Loss)。`torch.nn.BCELoss`是一个PyTorch中的类,用于计算二元分类任务的损失。`size_average=False`表示在计算损失时,不对每个样本的损失进行平均,而是将所有样本的损失相加。

2. `optimizer = torch.optim.SGD(model.parameters(), lr=0.01)`:这行代码定义了一个随机梯度下降优化器(Stochastic Gradient Descent Optimizer)。`torch.optim.SGD`是一个PyTorch中的类,用于实现随机梯度下降算法。`model.parameters()`表示优化器需要更新的参数,即模型的参数。`lr=0.01`表示学习率为0.01,即每次更新参数时,参数的变化量与梯度成正比,比例系数为0.01。

  1. criterion = torch.nn.BCELoss(size_average=False)
  2. optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

4. 训练模型

现在我们可以开始训练模型了。我们将进行1000次迭代,每次迭代都会更新模型的参数以最小化损失函数、计算预测值、计算损失、反向传播梯度并更新模型参数。通常用于训练神经网络模型,通过多次迭代更新模型参数来逐渐提高模型的性能。

  1. for epoch in range(1000):
  2.     y_pred = model(x_data)
  3.     loss = criterion(y_pred, y_data)
  4.     print(epoch, loss.item())
  5.     optimizer.zero_grad()
  6.     loss.backward()
  7.     optimizer.step()

5. 测试和绘制结果

训练完成后,我们可以使用训练好的模型对新的数据进行预测,并将结果绘制成图。在这个例子中,我们使用了一个从0到10的等差数列作为输入特征,并计算了对应的预测概率。最后,我们在概率为0.5的地方画了一条红色直线。

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

通过以上步骤,我们成功地使用PyTorch实现了一个简单的逻辑回归模型,并将其应用于一个新的数据集。

下面是运行结果和全部代码

  1. import torch
  2. import torch.nn.functional as F
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. # 1.Prepare dataset
  6. x_data = torch.Tensor([[1.0], [2.0], [3.0]])
  7. y_data = torch.Tensor([[0], [0], [1]])
  8. #-------------------------------------------------------#
  9. # 2.Design model using Class
  10. class LogisticRegressionModel(torch.nn.Module):
  11. def __init__(self):
  12. super(LogisticRegressionModel, self).__init__()
  13. self.linear = torch.nn.Linear(1, 1)
  14. def forward(self, x):
  15. y_pred = F.sigmoid(self.linear(x))#多了一个sigmid函数
  16. return y_pred
  17. model = LogisticRegressionModel()
  18. # 3.Construct loss and optimizer
  19. #-------------------------------------------------------#
  20. criterion = torch.nn.BCELoss(size_average=False)
  21. optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
  22. #-------------------------------------------------------#
  23. # 4.Training cycle
  24. for epoch in range(1000):
  25. y_pred = model(x_data)
  26. loss = criterion(y_pred, y_data)
  27. print(epoch, loss.item())
  28. optimizer.zero_grad()
  29. loss.backward()
  30. optimizer.step()
  31. # test and plot
  32. x = np.linspace(0, 10, 200)
  33. x_t = torch.Tensor(x).view((200, 1))#将转换为tensor,变成200行,1列
  34. y_t = model(x_t)
  35. y = y_t.data.numpy()#tensor转化为numpy形式
  36. plt.plot(x, y)
  37. plt.plot([0, 10], [0.5, 0.5], c='r')#在概率=0.5时画一条红色直线
  38. plt.xlabel('Hours')
  39. plt.ylabel('Probability of Pass')
  40. plt.grid()
  41. plt.show()

希望这篇文章能帮助你理解如何使用PyTorch实现逻辑回归模型。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/897137
推荐阅读
相关标签
  

闽ICP备14008679号