B站--刘二大人《PyTorch深度学习实践》完结合集 06.逻辑斯蒂回归
PPT 链接:网盘 提取码:cxe4
目录
1.数据集
MNIST Dataset
0-9,类别特征 P(0)~P(9)
mnist调用代码示例:
import torchvision #提供相应数据集,数据集需要下载
train_set = torchvision.datasets.MINIST(root='.../dataset/mnist', train=True, download=True)
test_set = torchvision.datasets.MINIST(root='.../dataset/mnist', train=True, download=True)
CIFAR-10
32*32 的图片
2.logistic function
- logistic 函数的输出结果是一个分布,概率在[0,1]之间
tips:
-
sigmoid function
需满足
- 函数值有极限
- 单调的增函数
- 饱和函数 logistic function 是 sigmoid function 中最具有典型性的函数
例:
- MSE----计算的是两个实数值之间的差值
import torch
import torch.nn.functional as F #functional中包含sigmoid函数,
import numpy as np
import matplotlib.pyplot as plt
#---------------------------------------------------------# 准备数据
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [1], [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 = F.sigmoid(self.linear(x))
return y_pred
model = LogisticRegressionModel()
#---------------------------------------------------------# loss,优化器
criterion = torch.nn.BCELoss(size_average=False) #BCELoss--->交叉熵损失
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
#---------------------------------------------------------# 训练
for epoch in range(1000):
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
if epoch % 50 == 0:
print(epoch, loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
#---------------------------------------------------------#
# 测试
x = np.linspace(0, 10, 200) # 返回0-10等间距的200个数
x_t = torch.Tensor(x).view((200, 1)) # reshape成一个200行1列的矩阵tensor
y_t = model(x_t) # 传入模型进行测试
y = y_t.data.numpy() # 调用numpy将y_t变成n维数组
plt.plot(x, y) # 绘图
plt.plot([0, 10], [0.5, 0.5], c='r') # 图2——这是y=0.5那条横线
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()
plt.show()
参考链接: