文章目录
- 1. 分类问题相关数据集
- 1.1 MINIST
- 1.2 CIFAR-10
- 2. 回归(Regression)VS分类(Classification)
- 2.1 模型对比
- 2.2 损失函数对比
- 2.3 实现代码对比
- 3. 完整代码
之前使用线性回归解决的都是**回归(预测)**问题,逻辑斯蒂回归模型可以用来解决另一大问题——分类。
注意逻辑斯蒂回归虽然名为回归,但解决的是分类问题,是最简单的分类问题模型,用于解决二分类。
1. 分类问题相关数据集
1.1 MINIST
没有数值比较指没有9>0这种概念
1.2 CIFAR-10
2. 回归(Regression)VS分类(Classification)
问题转变
本质改变
如何映射到0-1之间——激活函数
其他激活函数
2.1 模型对比
2.2 损失函数对比
mini-batch的损失函数
2.3 实现代码对比
3. 完整代码
import torch
from torch.nn.functional import sigmoid
import matplotlib.pyplot as plt
# 数据集准备
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[0.0], [0.0], [1.0]])
# 设计模型
class LogisticRegressionModel(torch.nn.Module):
def __init__(self):
super().__init__()
self .linear = torch.nn.Linear(1,1)
def forward(self,x):
y_pred = sigmoid(self.linear(x))
return y_pred
model = LogisticRegressionModel()
# 设计损失函数和优化器
criterion = torch.nn.BCELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(),lr = 0.1)
epoch_list = []
loss_list = []
# 训练周期
for epoch in range(100):
# 这里不需要在for一次然后zip(x,y)的原因是,x_data变成张量,直接可以处理张量类型,输入张量x_data,得到的y_pred也是张量
y_pred = model(x_data)
loss = criterion(y_pred,y_data)
print(epoch, loss.item())
# 得到的结果放到列表中,方便画图
epoch_list.append(epoch)
loss_list.append(loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
x_test = torch.tensor([[4.0]])
y_test = model(x_test)
print('y_pred=',y_test.data)
# epoch-loss图
plt.plot(epoch_list, loss_list)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
epoch-loss图