【PyTorch】深度学习实战之逻辑回归

PyTorch 深度学习实战之逻辑回归

视频教学链接

博客参考链接

线性模型:前面几章节,我们都是做的线性模型,通过给定的数据集(1,2),(2,4),(3,6),构建一个函数y=2*x+0,然后只要给定一个x,就会对应输出一个y,但是实际上问题并没有那么简单,其实我们输出的并不是一个确定的数字,而是它是某一个数字的概率,如果将它归类,它是某个数的概率很大 ,那么我们宏观上就定义这个数就是这个数,就是说选择一个概率最大的数字对它进行分类,比如这里的7和9,选一个概率最大的进行输出

如何实现逻辑回归:

逻辑回归实质上就是用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性

损失函数如下

解释一下损失函数:当y=0时,loss就是右边那部分,当y=1时就是左半边

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B4tMQE4S-1647594182069)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220318165238152.png)]

逻辑回归和线性模型的区别:

  • 逻辑回归在线性模型后面添加了激活函数
  • 分布的差异

如果是二分类的问题一般用BCELoss

import torch
import matplotlib.pyplot as plt
import numpy as np
import torch.nn.functional as F

x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])


class LogisticRegressionModel(torch.nn.Module):
    def __init__(self):  # 构造函数
        super(LogisticRegressionModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)  # 构造对象,并说明输入输出的维数,第三个参数默认为true,表示用到b

    def forward(self, x):
        y_pred = F.sigmoid(self.linear(x))
        return y_pred


model = LogisticRegressionModel()  # 实例化模型

criterion = torch.nn.BCELoss(size_average=False)
# model.parameters()会扫描module中的所有成员,如果成员中有相应的权重,那么都会将结果加到要训练的集合参数上
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # lr为学习率

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()

x = np.linspace(0, 10, 200)
x_t = torch.Tensor(x).view(200, 1)
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.ylabel('probablility of pass')
plt.xlabel('hours')
plt.grid()
plt.show()

图像:

【PyTorch】深度学习实战之逻辑回归_第1张图片

有人说,一个人最好的生活状态,是该看书时看书,该玩时尽情玩,看见优秀的人欣赏,看到落魄的人也不轻视,有自己的小生活和小情趣,不用去想改变世界,努力去活出自己。没人爱时专注自己,有人爱时,有能力拥抱彼此。

你可能感兴趣的:(PyTorch,pytorch,深度学习,逻辑回归)