返回

深度学习实战|从零实现多层感知机(MLP)探秘神经网络的奥秘(上)

人工智能

导语:

踏上深度学习探索之旅,让我们携手开启一段激动人心的旅程。在本次实战系列的开篇,我们将深入浅出地剖析多层感知机(MLP),这是一种神经网络的基本构建模块,为我们理解神经网络的运作原理奠定坚实基础。准备好开启一场智力盛宴了吗?

**

揭开多层感知机的面纱

多层感知机(MLP)是神经网络中最简单、最基本的形式之一。它由输入层、输出层和一系列中间隐藏层组成,这些层通过权重和偏差相互连接。MLP 的核心思想是通过逐层处理数据,逐级提取特征,最终输出预测结果。

MLP 的架构

输入层接收原始数据,而输出层产生模型的预测。中间的隐藏层充当特征提取器,逐层学习数据中更高级别的抽象。层与层之间通过权重矩阵和偏差向量连接,这些权重和偏差通过训练过程进行调整以优化模型性能。

训练 MLP

MLP 的训练过程是通过反向传播算法完成的。反向传播是一种优化技术,它计算损失函数(衡量模型预测与真实标签之间误差)的梯度,并使用这些梯度更新模型权重和偏差。通过多次迭代,模型学习识别数据中的模式并做出准确的预测。

MLP 在图像分类中的应用

图像分类是 MLP 最常见的应用之一。MLP 可以通过提取图像中的特征并将其映射到类标签来执行此任务。例如,给定一幅猫的图像,MLP 可以学习识别猫的特征(如胡须、耳朵和尾巴)并将其分类为“猫”类。

PyTorch 实战

为了将理论付诸实践,我们将使用 PyTorch 框架来实现 MLP 并将其应用于图像分类。我们将从创建模型和加载数据集开始,然后使用反向传播算法对其进行训练和评估。

代码示例:

import torch
import torch.nn as nn
import torchvision.datasets as dsets
import torchvision.transforms as transforms

# 创建 MLP 模型
class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(-1, 28 * 28)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 加载 MNIST 数据集
train_dataset = dsets.MNIST(root='./data', train=True, download=True, transform=transforms.ToTensor())
test_dataset = dsets.MNIST(root='./data', train=False, download=True, transform=transforms.ToTensor())

# 创建数据加载器
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

# 初始化 MLP 模型
model = MLP()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(train_loader, 0):
        # 获取输入数据和标签
        inputs, labels = data

        # 前向传播
        outputs = model(inputs)

        # 计算损失
        loss = criterion(outputs, labels)

        # 反向传播
        optimizer.zero_grad()
        loss.backward()

        # 更新权重
        optimizer.step()

        # 累积损失
        running_loss += loss.item()
    else:
        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 on test set: {(100 * correct / total):.2f}%')

结语

通过本文,我们深入探索了多层感知机(MLP),并使用 PyTorch 实现了它在图像分类中的应用。我们了解了 MLP 的架构、训练过程和在实际应用中的价值。

在本次深度学习实战之旅中,我们将继续探寻神经网络的奥秘。请保持关注,让我们一起解锁机器学习的无限潜力!