Pytorch实战学习(二):用Pytorch实现逻辑回归

《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili

用Pytorch实现逻辑回归

Logistic Regression

 

从线性回归 →​ 逻辑回归

 

1、分类问题

计算属于每一类的概率

用 Logistic Function 把实数空间映射到[0,1]的概率范围空间内

 

 2、模型变化(线性回归 →​ 逻辑回归)

2.1、模型结构变化

 

 

2.2、Loss Function的变化

为了计算两个概率之间的差异,需要利用到交叉熵的理论。

 

 

BCELoss二分类的交叉熵

 y_pred and y_data越接近,BCE Loss越小

 

 

3、完整代码

代码框架仍然分为4大部分

 

import torch
import torch.nn.functional as F

## Prepare Dataset:mini-batch, X、Y是3X1的Tensor
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])


##Design Model

##构造类,继承torch.nn.Module类
class LogisticRegressionModel(torch.nn.Module):
    ## 构造函数,初始化对象
    def __init__(self):
        ##super调用父类
        super(LogisticRegressionModel, self).__init__()
        ##构造对象,Linear Unite,包含两个Tensor:weight和bias,参数(1, 1)是w的维度
        self.linear = torch.nn.Linear(1, 1)
        
    ## 构造函数,前馈运算
    def forward(self, x):
        ## sigmoid(w*x+b)
        y_pred = F.sigmoid(self.linear(x))
        return y_pred
    
model = LogisticRegressionModel()

##Construct Loss and Optimizer

##损失函数,改为BCELoss
criterion = torch.nn.BCELoss(size_average = False)

##优化器,model.parameters()找出模型所有的参数,Lr--学习率
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)


## Training cycle

for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss)
    
    ##梯度归零
    optimizer.zero_grad()
    ##反向传播
    loss.backward()
    ##更新
    optimizer.step()
    
## Outpue weigh and bias
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())

## Test Model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

 

posted @ 2021-07-31 17:44  kuluma  阅读(454)  评论(0编辑  收藏  举报