视频:06.逻辑斯蒂回归_哔哩哔哩_bilibili
参考文章:pytorch 深度学习实践 第6讲 逻辑斯蒂回归_会游泳的小雁的博客-CSDN博客
网络模型的基本框架
1步骤:
1.Prepare dataset
2.Design model using Class (inherit from nn.Module)
3.Construct loss and optimizer (using Pytorch API)
4.Training cycle ( forward, backward, update)
2. logistic回归的代码实现 以及网络模型的基本框架代码
# 06 逻辑斯蒂回归
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
import torch
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt#------------01:数据集的准备 (复杂的进行封装)--------------------------
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]]) #变化之处:变成分类#------------02:设计模型(来计算y_pred) --------------------------------
class LogisticRegressionModel(torch.nn.Module):# 初始化函数和线性回归模型的一样,因为logistic函数中没有新的参数需要初始化def __init__(self):super(LogisticRegressionModel, self).__init__()self.linear = torch.nn.Linear(1, 1)def forward(self, x):y_pred = torch.sigmoid(self.linear(x)) #增加sigmoid的非线性的变换return y_pred
model = LogisticRegressionModel()#------------03:构建损失函数和优化器 -----------------------------------
criterion = torch.nn.BCELoss(reduction = 'sum') #把线性的MSELoss变成BCELoss
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) #优化器#------------04:做训练的循环 ------------------------------------------
for epoch in range(1000):y_pred = model(x_data)loss = criterion(y_pred, y_data)print(epoch, loss) # loss为一个对象,但会自动调用__str__()所以不会出错optimizer.zero_grad() # 将梯度值清0loss.backward() # 反向传播求梯度optimizer.step() # 优化器 更新权重#------------- 测试-----------------
x = np.linspace(0, 10, 200) # 返回0-10等间距的200个数
x_t = torch.Tensor(x).view((200, 1)) # reshape成一个200行1列的矩阵tensor
y_t = model(x_t) # 传入模型进行测试
y = y_t.data.numpy() # 调用numpy将y_t变成n维数组
# 图像类似logistic函数
plt.plot(x, y)
# y=0.5那条红色的横线
plt.plot([0, 10], [0.5, 0.5], c='r')
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid() #显示网格线 1=True=默认显示;0=False=不显示
plt.show()
结果如下: