Pytorch深度学习实践第六讲
B站 刘二大人 传送门 逻辑回归
一直在找能入门的Pytorch教程,之前在看文档,但苦于没有讲解而且是在家里学习起来着实困难,还好找到了刘二大人的教程,感谢老师。一边学一边写了写代码,中间也遇到一些问题,百度过也问过别人,下面按照课程顺序把写过的代码放上来,也算是交作业了吧。欢迎交流和探讨。
本节只用了简单数据集进行逻辑回归,搭配课程观看效果最佳。
2020.11.03【更新课件下载链接】
链接:https://pan.baidu.com/s/1vZ27gKp8Pl-qICn_p2PaSw
提取码:cxe4
import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as np
#---数据集
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) #输入输出都是1维
def forward(self, x):
y_pred = F.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)
#---计算损失和更新
loss_list = []
epoch_list = []
#---训练
for epoch in range(1000):
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
loss_list.append(loss)
epoch_list.append(epoch)#绘图用
print(epoch, loss.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]])
y_test = model(x_test)
print('y_pred = ',y_test.data)#测试预测
plt.plot(epoch_list, loss_list)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()#绘图
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.xlabel('Hours')
plt.ylabel('P')
plt.grid()
plt.show()#用已得到参数预测绘图