用PyTorch实现多层感知机(MLP)

本文介绍了如何使用PyTorch实现一个多层感知机(MLP)模型,包括定义模型结构、准备数据、训练和测试模型。示例展示了从创建自定义MLP模型到应用交叉熵损失函数和SGD优化器进行训练的过程。

多层感知机(Multilayer Perceptron,MLP)是一种经典的人工神经网络模型,常用于解决分类和回归问题。在本文中,我们将使用PyTorch库来实现一个简单的MLP模型,并对其进行训练和测试。

首先,我们需要导入PyTorch库和其他必要的模块:

import torch
import torch.nn as nn
import torch.optim as optim

接下来,我们定义MLP模型的结构。MLP由多个全连接层(Fully Connected Layer)组成,每个全连接层都包含一组权重和偏置。我们可以通过继承nn.Module类来创建自定义的MLP模型。

class MLP(</
### 使用 PythonPyTorch 实现多层感知机MLP) 以下是一个完整的代码示例,展示如何使用 PythonPyTorch 实现一个多层感知机MLP),并将其应用于 Fashion-MNIST 数据集的分类任务。代码包括环境准备、模型定义、训练过程和动态绘图工具的实现[^1]。 ```python import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt # 环境准备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 数据预处理 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) train_dataset = datasets.FashionMNIST(root='./data', train=True, download=True, transform=transform) test_dataset = datasets.FashionMNIST(root='./data', train=False, download=True, transform=transform) train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=1000, shuffle=False) # 定义 MLP 模型 class MLP(nn.Module): def __init__(self): super(MLP, self).__init__() self.fc1 = nn.Linear(28 * 28, 128) # 输入层到隐藏层1 self.fc2 = nn.Linear(128, 64) # 隐藏层1到隐藏层2 self.fc3 = nn.Linear(64, 10) # 隐藏层2到输出层 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 = MLP().to(device) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.01) # 训练模型 def train_model(model, train_loader, criterion, optimizer, num_epochs=10): model.train() loss_list = [] for epoch in range(num_epochs): running_loss = 0.0 for data, target in train_loader: data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() running_loss += loss.item() loss_list.append(running_loss / len(train_loader)) print(f"Epoch {epoch+1}/{num_epochs}, Loss: {loss_list[-1]:.4f}") return loss_list # 动态绘制损失变化 def plot_loss(loss_list): plt.plot(loss_list) plt.xlabel("Epoch") plt.ylabel("Loss") plt.title("Training Loss") plt.show() losses = train_model(model, train_loader, criterion, optimizer, num_epochs=10) plot_loss(losses) ``` ### 代码说明 - **数据预处理**:Fashion-MNIST 数据集被加载并进行归一化处理,以便提高模型的收敛速度[^1]。 - **模型定义**:MLP 模型包含三个全连接层(`fc1`, `fc2`, `fc3`),中间层使用 ReLU 激活函数[^2]。 - **训练过程**:通过 SGD 优化器最小化交叉熵损失函数,同时记录每个 epoch 的平均损失[^4]。 - **动态绘图**:在训练完成后,绘制损失随 epoch 变化的曲线,帮助直观理解模型的训练效果[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值