PyTorch 揭秘 :构建MNIST数据集

👋 今天我们继续来聊聊PyTorch,这个在深度学习领域火得一塌糊涂的开源机器学习库。PyTorch以其灵活性和直观的操作被广大研究人员和开发者所青睐。

火种一:PyTorch的简洁性

对于初学者来说,PyTorch的简洁易懂是它的一大卖点。看这段代码:

python

ini 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 定义一个简单的线性模型
model = nn.Linear(in_features=1, out_features=1)

# 损失函数和优化器
loss_function = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 假设我们有一些训练数据
x_train = torch.tensor([[1.], [2.], [3.]])
y_train = torch.tensor([[2.], [4.], [6.]])

# 训练模型
for epoch in range(100):
    model.train()
    optimizer.zero_grad() # 清零梯度
    y_predicted = model(x_train)
    loss = loss_function(y_predicted, y_train)
    loss.backward() # 反向传播
    optimizer.step() # 更新参数

    print(f'Epoch {epoch+1}, Loss: {loss.item()}')

不需要复杂的配置,我们就搭建好了一个能进行训练的线性回归模型。这种直观的操作使得PyTorch非常适合快速原型开发和研究。

火种二:动态计算图的强大

PyTorch使用动态计算图(Dynamic Computation Graph),也就是说,图的构建是在代码运行时动态进行的,这允许你进行更为直观的模型构建和调试。

这让PyTorch在处理可变长度的输入,如不同长度的文本序列或时间序列数据时,显得游刃有余。动态图的特性也使得在网络中嵌入复杂的控制流成为可能,比如循环和条件语句,这些都是静态图难以做到的。

火种三:社区支持和生态系统

PyTorch背后有着强大的社区支持。从论坛到GitHub,从学术研究到工业应用,无数的开发者和研究者都在为之贡献代码,分享经验和见解。

另外,PyTorch有着丰富的生态系统。无论是高级抽象库如torchvision用于图像处理,torchaudio为音频分析,还是与其他库的无缝对接,如ONNX用于模型导出,PyTorch都让深度学习工程师的工作变得更加简单。

火种四:实践举例

看一个实际的例子,如何用PyTorch来构建一个卷积神经网络(CNN)来识别手写数字,也就是著名的MNIST数据集:

python

ini 复制代码
import torch.optim as optim
import torch.nn as nn

# 我们继续为模型定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(), lr=0.001)

# 训练过程
num_epochs = 5
for epoch in range(num_epochs):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data

        # 梯度置零
        optimizer.zero_grad()

        # 正向传播以及损失计算
        outputs = net(inputs)
        loss = criterion(outputs, labels)

        # 反向传播和优化
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 100 == 99:    # 每100个批次打印一次统计信息
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 100))
            running_loss = 0.0

print('Finished Training')

# 保存模型参数
torch.save(net.state_dict(), 'mnist_cnn.pth')

这段代码完成了训练循环,包括损失计算、反向传播和网络参数的优化。

每100个batch打印一次训练过程中的平均损失,方便我们观察模型学习的情况。

将训练好的模型参数保存到文件中,便于后续的评估或者继续训练。

小结

PyTorch 以其简洁性、强大的动态计算图和活跃的社区支持让学习和研发都变得轻松。我们还通过构建一个CNN模型来识别MNIST数据集中的手写数字,讲述了整个模型的设计、训练和评估过程。

希望你能有所收获~~

相关推荐
孙启超5 分钟前
【AI应用开发】Agent 无限 loop(反复调用同一个工具)如何规避?
人工智能·python·算法·llm·agent·loop·ai应用开发
孙启超1 小时前
【AI应用开发】怎么降低 Agent 幻觉?有几种可行方案?
大数据·人工智能·llm·agent·rag·幻觉·ai应用开发
得物技术1 小时前
实战从零开始构建一个Coding Agent:Violin |得物技术
javascript·架构·llm
林泽毅4 小时前
PyTRIO快速入门实战篇(二):用 GRPO 提升 GSM8K 数学推理准确率
人工智能·深度学习·机器学习·llm·强化学习
AINative软件工程4 小时前
LLM 多租户 Quota 工程实践:Token 配额、用量预警与自动熔断的生产设计
后端·llm·ai编程
To_OC12 小时前
我把《天龙八部》塞进向量数据库后,终于搞懂了 RAG 到底是个啥
人工智能·llm·agent
GoAI15 小时前
# AI Agent 记忆框架横向对比报告总结
人工智能·大模型·llm·多模态
AndrewHZ18 小时前
【LLM技术全景】阶段总结:技术原理篇核心知识回顾
人工智能·深度学习·算法·语言模型·大模型·llm·芯片开发
孙启超20 小时前
【AI应用开发】ReAct 原理是什么?和普通直接提问 LLM 差别在哪?
前端·人工智能·llm·agent·react·rag·ai应用开发
孙启超21 小时前
【AI应用开发】LangChain 中 Chain 和 Agent 核心区别?
java·人工智能·langchain·llm·rag·ai应用开发·agent loop