导读:本期聚焦于小伙伴创作的《如何用PyTorch构建MLP实现两数加法?从训练到推理的完整教程》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用PyTorch构建MLP实现两数加法?从训练到推理的完整教程》有用,将其分享出去将是对创作者最好的鼓励。

在深度学习入门实践中,用简单的回归任务验证模型效果是非常有效的方式,两数加法作为基础的数值计算任务,能够清晰展示多层感知机从数据准备到训练推理的全流程。下面我们就用PyTorch一步步实现这个功能。

如何用PyTorch构建MLP实现两数加法?从训练到推理的完整教程

环境准备与依赖导入

首先需要确保已经安装PyTorch库,如果没有安装可以通过官方命令进行安装,本文使用的是基础PyTorch版本即可满足需求。首先导入需要的依赖模块:

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np

数据集构建

两数加法任务的输入是两个数值,输出是这两个数值的和,属于简单的回归任务。我们可以随机生成大量的输入样本和对应的标签,这里生成10000个样本作为训练数据:

# 生成训练数据,输入是两个0到100之间的随机数,输出是两数之和
def generate_data(num_samples=10000):
    # 生成输入数据,形状为(num_samples, 2)
    inputs = np.random.randint(0, 100, size=(num_samples, 2))
    # 计算标签,即两个数的和
    labels = inputs.sum(axis=1)
    # 转换为PyTorch张量,并转为浮点型
    inputs_tensor = torch.tensor(inputs, dtype=torch.float32)
    labels_tensor = torch.tensor(labels, dtype=torch.float32).view(-1, 1)
    return inputs_tensor, labels_tensor

# 生成训练集和测试集
train_inputs, train_labels = generate_data(8000)
test_inputs, test_labels = generate_data(2000)

MLP模型定义

多层感知机的结构包含输入层、隐藏层和输出层,这里输入层有2个神经元对应两个加数,隐藏层设置16个神经元,输出层1个神经元对应相加的结果,激活函数使用ReLU:

class AdditionMLP(nn.Module):
    def __init__(self):
        super(AdditionMLP, self).__init__()
        # 定义网络层
        self.fc1 = nn.Linear(2, 16)  # 输入层到隐藏层
        self.relu = nn.ReLU()        # 激活函数
        self.fc2 = nn.Linear(16, 1)  # 隐藏层到输出层

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 初始化模型
model = AdditionMLP()

训练过程实现

训练过程需要选择损失函数和优化器,回归任务常用均方误差损失,优化器选择Adam,设置合适的学习率和训练轮次:

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练参数设置
num_epochs = 50
batch_size = 32

# 开始训练
for epoch in range(num_epochs):
    model.train()
    total_loss = 0.0
    # 按批次训练
    for i in range(0, len(train_inputs), batch_size):
        batch_inputs = train_inputs[i:i+batch_size]
        batch_labels = train_labels[i:i+batch_size]
        
        # 前向传播
        outputs = model(batch_inputs)
        loss = criterion(outputs, batch_labels)
        
        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        total_loss += loss.item()
    
    # 每10轮打印一次平均损失
    if (epoch + 1) % 10 == 0:
        avg_loss = total_loss / (len(train_inputs) // batch_size)
        print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {avg_loss:.4f}")

模型评估与保存

训练完成后可以用测试集评估模型效果,同时保存训练好的模型参数方便后续推理使用:

# 模型评估
model.eval()
with torch.no_grad():
    test_outputs = model(test_inputs)
    test_loss = criterion(test_outputs, test_labels)
    print(f"测试集损失: {test_loss.item():.4f}")

# 保存模型参数
torch.save(model.state_dict(), "addition_mlp.pth")
print("模型保存成功")

推理阶段实现

推理阶段需要加载保存的模型参数,输入两个待相加的数值,输出模型的预测结果:

# 加载模型
inference_model = AdditionMLP()
inference_model.load_state_dict(torch.load("addition_mlp.pth"))
inference_model.eval()

# 推理函数
def predict_addition(num1, num2):
    input_tensor = torch.tensor([[num1, num2]], dtype=torch.float32)
    with torch.no_grad():
        prediction = inference_model(input_tensor)
    return prediction.item()

# 测试推理效果
print(f"3 + 5 的预测结果: {predict_addition(3, 5):.2f}")
print(f"27 + 43 的预测结果: {predict_addition(27, 43):.2f}")
print(f"99 + 1 的预测结果: {predict_addition(99, 1):.2f}")

总结

通过以上步骤我们完成了用PyTorch构建MLP实现两数加法的完整流程,从数据生成到模型训练再到推理部署的每个环节都有对应的代码实现。这个简单的任务可以帮助理解神经网络处理回归问题的基本逻辑,后续可以在此基础上调整网络结构、增加训练数据或者修改任务难度,进一步巩固PyTorch的使用方法。

PyTorchMLP两数加法神经网络训练模型推理修改时间:2026-06-18 16:06:19

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。