PyTorch实现Logistic regression
- PyTorch基础实现代码
- 用PyTorch类实现Logistic regression, torch.nn.module写网络结构
Logistic regression 简单的理解为输出值在0到1之间的回归,可用其作为概率来分析判断
一般用Sigmoid函数,实现普通值到0和1之间的值的映射
所以 Logistic regression 的数学表达式如下
2.Pytorch实现
import torch
from torch.autograd import Variable
x_data = Variable(torch.Tensor([[0.6], [1.0], [3.5], [4.0]]))
y_data = Variable(torch.Tensor([[0.], [0.], [1.], [1.]]))
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
self.linear = torch.nn.Linear(1, 1)
self.sigmoid = torch.nn.Sigmoid() ###### **sigmoid**
def forward(self, x):
y_pred = self.sigmoid(self.linear(x))
return y_pred
model = Model()
criterion = torch.nn.BCELoss(size_average=True) #损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降
for epoch in range(500):
# Forward pass
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
if epoch % 20 == 0:
print(epoch, loss.item())
#梯度归零
optimizer.zero_grad()
# 反向传播
loss.backward()
# update weights
optimizer.step()
hour_var = Variable(torch.Tensor([[0.5]]))
print("predict (after training)", 0.5, model.forward(hour_var).data[0][0])
hour_var = Variable(torch.Tensor([[7.0]]))
print("predict (after training)", 7.0, model.forward(hour_var).data[0][0])