手把手教你用PyTorch实现神经网络

PyTorch是一个开源的Python机器学习库,被广泛应用于深度学习领域。本文将介绍如何使用PyTorch实现一个简单的神经网络,并在MNIST数据集上进行训练和测试。

  1. 环境准备

首先需要安装PyTorch和相关的依赖库。可以通过以下命令安装PyTorch:

pip install torch torchvision
  1. 数据集准备

我们将使用MNIST手写数字数据集,这是一个非常经典的数据集,包含60,000个训练样本和10,000个测试样本。可以使用以下代码下载数据集:关注v❤公众H:Ai技术星球  回复(123)必领pytorch深度学习资料

  1. 数据预处理

在使用数据集之前,需要对其进行预处理。在本例中,我们将把每个数字图像缩放到28x28大小,并将像素值归一化到0到1之间。可以使用以下代码完成预处理:

import torchvision.transforms as transforms

transform = transforms.Compose([
    transforms.Resize((28, 28)),
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

train_dataset.transform = transform
test_dataset.transform = transform
  1. 定义神经网络模型

我们将使用一个简单的多层感知机(MLP)模型来对MNIST数据集进行分类。该模型有两个隐藏层,每个隐藏层有128个神经元,并且使用ReLU激活函数。输出层有10个神经元,对应于0到9的数字。可以使用以下代码定义模型:

import torch.nn as nn

class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.fc1 = nn.Linear(28*28, 128)
        self.fc2 = nn.Linear(128, 128)
        self.fc3 = nn.Linear(128, 10)
        self.relu = nn.ReLU()
        
    def forward(self, x):
        x = x.view(-1, 28*28)
        x = self.relu(self.fc1(x))
        x = self.relu(self.fc2(x))
        x = self.fc3(x)
        return x
  1. 定义损失函数和优化器

我们将使用交叉熵损失函数和随机梯度下降(SGD)优化器。可以使用以下代码定义损失函数和优化器:

criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
  1. 训练模型

现在我们可以开始训练模型了。可以使用以下代码训练模型:

num_epochs = 10

当你完成了神经网络的构建之后,你需要通过数据进行训练。下面是一个简单的训练示例:

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

# 训练网络
for epoch in range(10):  # 循环遍历数据集多次

    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        # 获取输入
        inputs, labels = data

        # 梯度清零
        optimizer.zero_grad()

        # 正向传播、反向传播、优化
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # 统计损失
        running_loss += loss.item()
        if i % 2000 == 1999:  # 每2000批次打印一次平均损失
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

在这个示例中,我们使用交叉熵损失函数和随机梯度下降(SGD)优化器进行训练。我们循环遍历数据集10次,并在每个批次中进行前向传播、反向传播和优化。每2000批次,我们打印一次平均损失。完成训练后,我们打印出“Finished Training”消息。

最后,我们可以使用测试集来评估我们的网络:

 
 
# 在测试集上测试网络
correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (
    100 * correct / total))

在这个示例中,我们循环遍历测试集,并在每个图像上运行我们的网络。我们使用torch.max()函数来获取每个输出张量的最大值和相应的索引。然后,我们统计正确的分类数,并计算准确率。最后,我们打印出准确率。

这是一个基本的用PyTorch实现神经网络的示例。随着你深入学习,你可以探索更复杂的网络结构、不同的优化器和损失函数,以及更高级的功能,例如自动微分和并行化训练。

关注v❤公众H:Ai技术星球  回复(123)必领pytorch深度学习资料

还有500G人工智能学习资料包内含:

①人工智能课程及项目实战【含课件源码】

②超详解的人工智能学习路线图

③人工智能必看优质书籍电子书汇总(著作书籍这都有)

④国内外知名精华资源(国际AI权威学者课程与资料)

⑤优质人工智能资源网站整理(找前辈、找代码、找论文都有)

⑥人工智能行业报告 ⑦人工智能论文合集(不知道看什么论文就来这!) 是真的白嫖不要米哦~~[脱单doge]

猜你喜欢

转载自blog.csdn.net/m0_74693860/article/details/130649584