深度学习--一个分类的例子

说明:

本文会实现自定义模型实现对MINIST数据集的训练,训练完之后还会使用测试集进行测试。所依托的训练集和测试集都是由datasets.MNIST获取到的。

步骤

下载数据

现在来介绍加载 MNIST 数据集并准备训练和测试数据的逻辑。

  1. 数据预处理

    • transforms.Compose 创建了一个数据预处理管道,将多个数据转换操作组合在一起。

      将图像转换为 PyTorch 的张量(tensor).对图像进行标准化,使其均值为 0.1307,标准差为 0.3081。

  2. 创建数据集

    • 我们指出指定MINIST数据集的存储位置,表示如果数据集不存在,便自动下载,从而创建 MNIST 数据集的实例train_dataset。 另使用了transform=transform 指出要使用之前定义的数据预处理管道。

  3. 加载数据

    • 使用 DataLoader 实例批量加载数据,使用batch_size=batch_size 指定每个批次的样本数量,并在每个 epoch 开始时随机打乱数据。

//表示每个训练或测试批次中的样本数量。
batch_size = 64
//进行数据库处理
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307, ), (0.3081, ))
])
​
//创建训练集
train_dataset = datasets.MNIST(root='../dataset/mnist/',
train=True,
download=True,
transform=transform)
//加载训练集
train_loader = DataLoader(train_dataset,
shuffle=True,
batch_size=batch_size)
​
//创建测试集
test_dataset = datasets.MNIST(root='../dataset/mnist/',
train=False,
download=True,
transform=transform)
//加载测试集
test_loader = DataLoader(test_dataset,
shuffle=False,
batch_size=batch_size)

定义神经网络模型

        这段代码定义了一个简单的前馈神经网络模型,用于分类手写数字。 首先,我们定义了一个名为 Net 的类,继承自 torch.nn.Module。(torch.nn.Module是一个基类,用于构建神经网络模型。)
        在 init 方法中,我们初始化了五个全连接层(self.l1 到 self.l5):

                self.l1:输入层到第一个隐藏层,输入维度为 784(对应 MNIST 图像的像素数),输出维度为 512。

                self.l2:第一个隐藏层到第二个隐藏层,输出维度为 256。

                self.l3:第二个隐藏层到第三个隐藏层,输出维度为 128。

                self.l4:第三个隐藏层到第四个隐藏层,输出维度为 64。

                self.l5:最后一个隐藏层到输出层,输出维度为 10(对应手写数字的类别数)。

      在 forward 方法中,我们定义了数据在网络中的流动:

                首先,输入数据 x 被展平为形状 (batch_size, 784)。然后,通过 ReLU 激活函数依次传        递给每个隐藏层。最后,输出层不使用激活函数,直接返回结果。

      最后,创建了一个名为 m

你可能感兴趣的:(人工智能,深度学习,机器学习)