PyTorch 基础教程

PyTorch 是一个强大的深度学习框架,它易于使用且非常灵活。本教程将引导您从安装到编写第一个神经网络模型,并涵盖一些基本概念和功能。

一、引言

        PyTorch 是一个开源机器学习框架,它基于 Torch 构建,但使用 Python 作为主要编程语言。PyTorch 提供了动态计算图的能力,这使得调试更容易,并允许用户在运行时修改网络结构。它广泛应用于自然语言处理(NLP)、计算机视觉等多个领域。

二、安装 PyTorch

        首先,您需要安装 Python 和 PyTorch。推荐使用 Anaconda 或者 Miniconda 来管理您的 Python 环境。安装 Anaconda 后,可以创建一个新的环境并安装 PyTorch:

Bash

深色版本

1conda create -n pytorch_env python=3.9
2conda activate pytorch_env
3conda install pytorch torchvision torchaudio -c pytorch

三、基本用法

一旦安装完成,就可以开始使用 PyTorch 了。以下是一些基本的例子。

3.1 导入库

Python

深色版本

1import torch
2import torchvision
3from torchvision import datasets, transforms

3.2 创建张量

张量是 PyTorch 中的主要数据结构,类似于 NumPy 的数组。

Python

深色版本

1# 创建一个未初始化的张量
2x = torch.empty(2, 3)
3
4# 创建一个随机初始化的张量
5y = torch.rand(2, 3)
6
7# 创建一个全零张量
8z = torch.zeros(2, 3)
9
10# 创建一个包含特定数值的张量
11a = torch.tensor([[1., -1.], [1., -1.]])
12
13# 打印张量
14print(x)
15print(y)
16print(z)
17print(a)

3.3 操作张量

Python

深色版本

1# 张量加法
2result = y + z
3
4# 张量乘法
5result = torch.matmul(a, a)
6
7# 元素级别的乘法
8result = torch.mul(a, a)
9
10# 访问张量的维度
11print(result.shape)
12
13# 将张量转换为 NumPy 数组
14np_array = result.numpy()
15
16# 将 NumPy 数组转换为张量
17tensor_from_np = torch.from_numpy(np_array)

四、自动微分

PyTorch 的一大特色是自动微分机制,这意味着您可以轻松地计算梯度。

4.1 计算梯度

Python

深色版本

1# 创建一个需要计算梯度的张量
2x = torch.ones(2, 2, requires_grad=True)
3
4# 进行一些操作
5y = x + 2
6z = y * y * 3
7out = z.mean()
8
9# 反向传播
10out.backward()
11
12# 打印梯度
13print(x.grad)

五、构建神经网络

PyTorch 提供了一个 nn 模块来帮助构建神经网络。

5.1 定义网络

Python

深色版本

1import torch.nn as nn
2import torch.nn.functional as F
3
4class Net(nn.Module):
5    def __init__(self):
6        super(Net, self).__init__()
7        # 定义网络层
8        self.fc1 = nn.Linear(28 * 28, 128)
9        self.fc2 = nn.Linear(128, 64)
10        self.fc3 = nn.Linear(64, 10)
11
12    def forward(self, x):
13        # 定义前向传播过程
14        x = F.relu(self.fc1(x))
15        x = F.relu(self.fc2(x))
16        x = self.fc3(x)
17        return x
18
19net = Net()

5.2 训练网络

Python

深色版本

1# 数据加载
2transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
3trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
4trainloader = torch.utils.data.DataLoader(trainset, batch_size=100, shuffle=True)
5
6# 定义损失函数和优化器
7criterion = nn.CrossEntropyLoss()
8optimizer = torch.optim.SGD(net.parameters(), lr=0.01)
9
10# 训练循环
11for epoch in range(2):  # loop over the dataset multiple times
12    running_loss = 0.0
13    for i, data in enumerate(trainloader, 0):
14        inputs, labels = data
15
16        # 零化梯度
17        optimizer.zero_grad()
18
19        # 前向传播 + 反向传播 + 优化
20        outputs = net(inputs.view(-1, 28*28))
21        loss = criterion(outputs, labels)
22        loss.backward()
23        optimizer.step()
24
25        # 打印统计信息
26        running_loss += loss.item()
27        if i % 2000 == 1999:    # 每2000个批次打印一次
28            print('[%d, %5d] loss: %.3f' %
29                  (epoch + 1, i + 1, running_loss / 2000))
30            running_loss = 0.0
31
32print('Finished Training')

六、测试网络

Python

深色版本

1# 加载测试集
2testset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
3testloader = torch.utils.data.DataLoader(testset, batch_size=100, shuffle=False)
4
5correct = 0
6total = 0
7with torch.no_grad():
8    for data in testloader:
9        images, labels = data
10        outputs = net(images.view(-1, 28*28))
11        _, predicted = torch.max(outputs.data, 1)
12        total += labels.size(0)
13        correct += (predicted == labels).sum().item()
14
15print('Accuracy of the network on the 10000 test images: %d %%' % (
16    100 * correct / total))

七、结论

        通过以上步骤,您已经成功地构建并训练了一个简单的神经网络。PyTorch 的强大之处在于其灵活性和直观的 API 设计,这使得开发者能够轻松地实现复杂的模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeepReinforce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值