使用 PyTorch 在 MNIST 数据集上进行逻辑回归
逻辑回归(Logistic Regression)既可以用来描述数据,也可以用来解释数据中各个二值变量、类别变量、顺序变量、距离变量、比率变量之间的关系[1]。下图展示了逻辑回归与线性回归的区别。
本文将展示如何使用 PyTorch 编写逻辑回归模型。 我们将尝试在 MNIST 数据集上解决分类问题。首先,导入我们所需要的所有库:
1 | import torch |
在创建模型前,我喜欢列一个如下的步骤表。PyTorch 官网[2]上也有这个步骤列表:
1 | # 第一步:加载数据集 |
下面我们将一步步完成上述的步骤。
加载数据集
我们使用 torchvision.datasets 来加载数据集。这个库中包含了几乎全部的用于机器学习的流行数据集。在[3]中可以看到完整的数据集列表。
1 | train_dataset = dsets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=False) |
使数据集可迭代
我们利用 DataLoader 类,使用以下代码来让我们的数据集可被迭代:
1 | train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) |
创建模型类
现在,我们将创建一个用来定义逻辑回归模型结构的类:
1 | class LogisticRegression(torch.nn.Module): |
将模型类实例化
在将模型类实例化之前,我们先初始化如下所示的参数:
1 | batch_size = 100 |
然后,就能初始化我们的逻辑回归模型了:
1 | model = LogisticRegression(input_dim, output_dim) |
实例化 Loss 类
我们使用交叉熵损失来计算 loss:
1 | criterion = torch.nn.CrossEntropyLoss() # 计算 softmax 分布之上的交叉熵损失 |
实例化优化器类
优化器(optimizer)就是我们即将使用的学习算法。在本例中,我们将使用随机梯度下降(SGD)作为优化器:
1 | optimizer = torch.optim.SGD(model.parameters(), lr=lr_rate) |
训练模型
这就是最后一步了。我们将用以下的代码来训练模型:
1 | iter = 0 |
在训练时,这个模型只需要进行 3000 次迭代就能达到 82% 的准确率。你可以试着继续调整一下参数,看看还能不能把准确率再调高一点。
如果你想加深对在 PyTorch 中实现逻辑回归的理解,可以把上面的模型应用于任何分类问题。比如,你可以训练一个逻辑回归模型来对你最喜爱的漫威英雄的图像做个分类(有一半已经化灰了,所以做分类应该不是很难):)
引用
[1] https://www.statisticssolutions.com/what-is-logistic-regression/
[3] https://pytorch.org/docs/stable/torchvision/datasets.html
掘金地址:https://juejin.im/post/5cc66d946fb9a032286173a7