深度学习入门:使用 PyTorch 构建和训练你的第一个神经网络

引言

深度学习是机器学习的一个分支,它利用多层非线性处理单元(即神经网络)来解决复杂的模式识别问题。PyTorch 是一个强大的深度学习框架,它提供了灵活的 API 和动态计算图,非常适合初学者和研究者使用。

安装 PyTorch

确保安装了 Python 和 pip。然后通过以下命令安装 PyTorch:

pip install torch torchvision
导入库

我们需要导入一些必要的库:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
准备数据

首先,我们需要下载并加载 MNIST 数据集:

# 设置数据转换
transform = transforms.Compose([
    transforms.ToTensor(),  # 转换成 Tensor
    transforms.Normalize((0.5,), (0.5,))  # 归一化
])

# 下载训练数据集
train_data = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_data, batch_size=64, shuffle=True)

# 下载测试数据集
test_data = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
test_loader = DataLoader(test_data, batch_size=64, shuffle=True)
定义模型

接下来定义我们的神经网络模型。这里我们使用一个简单的全连接网络:

class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)  # 输入层到隐藏层
        self.fc2 = nn.Linear(128, 64)       # 隐藏层到隐藏层
        self.fc3 = nn.Linear(64, 10)        # 最后一层到输出层

    def forward(self, x):
        x = x.view(-1, 28 * 28)             # 展平输入
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x

model = SimpleNet()
定义损失函数和优化器

选择适当的损失函数和优化器:

criterion = nn.CrossEntropyLoss()  # 多分类任务常用的损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 使用随机梯度下降优化器
训练模型

现在我们可以开始训练模型:

num_epochs = 10

for epoch in range(num_epochs):
    running_loss = 0.0
    for i, (inputs, labels) in enumerate(train_loader, 0):
        # 前向传播 + 反向传播 + 优化
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()

    print(f"Epoch {epoch+1}, Loss: {running_loss/len(train_loader)}")
测试模型

最后,我们需要评估模型在测试集上的性能:

correct = 0
total = 0
with torch.no_grad():
    for data in test_loader:
        images, labels = data
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

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

以上就是使用 PyTorch 构建和训练简单神经网络的完整过程。这个例子展示了如何从零开始建立一个基本的深度学习模型,并通过实际数据集对其进行训练和测试。随着你对 PyTorch 的了解加深,你可以尝试更复杂的模型结构和更高级的技术。

你可能感兴趣的:(深度学习,pytorch,神经网络)