《PyTorch深度学习实践》第六节:逻辑斯蒂回归

before:

之前我们学的线性模型主要是输入一个x,要通过训练网络更新权重,输出对应的y值,属于线性回归问题。这节课我们讨论的是逻辑斯蒂回归:假设
学习1个小时通过概率为0;
学习2个小时通过概率为0;
学习3个小时通过概率为1;
现在想要训练网络来预测学习4个小时,通过的概率为多少?显然这属于一个分类问题,结果的类型只有0和1。

now:

那么现在,输入了一个x值,我们会得到一个y,我们之前提到了一种非线性激活函数。在这里我们采用sigmoid函数中的logistic function(虽然很多时候包括pytorch中会直接把logistic function称为sigmod,但实际上sigmod函数包括很多种)
在这里插入图片描述

x取正无穷是结果为1,取负无穷时结果为0,这样可以把函数值限定在0和1之间,符合概率要求。

我们把计算出的y值代入sigmoid函数中计算出结果y_pred,这个结果一定会在[0,1]范围内,就可以达到我们的目的,于是将这个输
出值作为概率。

注:常用sigmoid函数做二分类问题,softmax处理多分类

import torch

'''数据'''
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)

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

model = LogisticRegressionModel()

'''计算损失函数和优化器'''
criterion = torch.nn.BCELoss(size_average = False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)


'''training cycle'''
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item(), 'w=', model.linear.weight.item(), 'b=', model.linear.bias.item())

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

print('w=', model.linear.weight.item())
print('b=', model.linear.bias.item())

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

猜你喜欢

转载自blog.csdn.net/weixin_44894550/article/details/120952784