AI学习日记——PyTorch深度学习快速入门:神经网络构建与训练实战

一、神经网络构建

1.nn.Module:网络构建的基石

概念

nn.Module是所有神经网络模块的基类,我们自定义的网络都需要继承这个类。

DNN代码实现:

class DNN(nn.Module):

def init(self):

super(DNN, self).init() #继承初始化

# 定义网络层

self.net = nn.Sequential( #按顺序搭建各层

nn.Linear(5,3), nn.ReLU(),

nn.Linear(3,9), nn.ReLU()

)

def forward(self, x):

# 定义前向传播

self.net (x)

return x

CNN代码实现:

class CNN(nn.Module):

def init(self, num_classes=10):

super(CNN, self).init()
# 卷积层序列

self.net = nn.Sequential(

# 第一个卷积块

nn.Conv2d(1, 32, 3, padding=1), # 输入1通道,输出32通道,3x3卷积

nn.ReLU(),

nn.MaxPool2d(2),

# 第二个卷积块

nn.Conv2d(32, 64, 3, padding=1),

nn.ReLU(),

nn.MaxPool2d(2),
# 第三个卷积块

nn.Conv2d(64, 128, 3, padding=1),

nn.ReLU(),

nn.MaxPool2d(2)

)

def forward(self, x):

# 定义前向传播

x = self.net(x)

return x

二、损失函数与优化器

1.损失函数

分类任务

import torch.nn as nn

# 交叉熵损失(多分类)

criterion_ce = nn.CrossEntropyLoss()

# 二元交叉熵(二分类)

criterion_bce = nn.BCEWithLogitsLoss()

# 多标签分类

criterion_multilabel = nn.MultiLabelSoftMarginLoss()

回归任务

# 均方误差

criterion_mse = nn.MSELoss()

# 平均绝对误差

criterion_mae = nn.L1Loss()

# 平滑L1损失

criterion_smoothl1 = nn.SmoothL1Loss()

2.优化器选择

常用优化器

import torch.optim as optim

# SGD with Momentum

optimizer_sgd = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# Adam优化器

optimizer_adam = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999))

# RMSprop

optimizer_rms = optim.RMSprop(model.parameters(), lr=0.01, alpha=0.99)

# Adagrad

optimizer_ada = optim.Adagrad(model.parameters(), lr=0.01)

三、完整训练流程

1.模型训练

def train_model(model, train_loader, val_loader, criterion, optimizer, epochs=10):
# 记录训练过程

train_losses = \[\]

val_accuracies = \[\]

# 设备选择(CPU / GPU)

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

model.to(device)

for epoch in range(epochs):

# 训练阶段

model.train()

running_loss = 0.0**#记录损失变化的列表**

correct = 0

total = 0

for batch_idx, (data, target) in enumerate(train_loader):

data, target = data.to(device), target.to(device)

# 前向传播

output = model(data)

loss = criterion(output, target)

# 反向传播

optimizer.zero_grad()

loss.backward()

optimizer.step()
# 统计信息

running_loss += loss.item()

_, predicted = output.max(1)

total += target.size(0)

correct += predicted.eq(target).sum().item()

# 每100个batch打印一次

if batch_idx % 100 == 99:

print(f'Epoch: {epoch+1}, Batch: {batch_idx+1}, '

f'Loss: {loss/100:.4f}, '

f'Acc: {100.*correct/total:.2f}%')

running_loss = 0.0
# 验证阶段

val_acc = evaluate_model(model, val_loader, device)

val_accuracies.append(val_acc)

print(f'Epoch {epoch+1}/{epochs} completed. Validation Accuracy: {val_acc:.2f}%')

return train_losses, val_accuracies

2.模型评估

def evaluate_model(model, test_loader, device=None):

if device is None:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

model.eval() # 设置评估模式(关闭dropout等)

correct = 0

total = 0

with torch.no_grad(): # 暂时禁用梯度计算,节省内存

for data, target in test_loader:

data, target = data.to(device), target.to(device)

output = model(data)

_, predicted = output.max(1) #获得预测类别

total += target.size(0)

correct += predicted.eq(target).sum().item()

accuracy = 100. * correct / total

return accuracy

四、模型保存与加载

1.保存模型

# 保存整个模型

torch.save(model, 'mymodel.pth')

# 只保存模型参数(推荐)

torch.save(model.state_dict(), 'mymodel_weights.pth')

# 保存训练状态(用于恢复训练)

checkpoint = {

'epoch': epoch,

'model_state_dict': model.state_dict(),

'optimizer_state_dict': optimizer.state_dict(),

'loss': loss,

'accuracy': accuracy

}

torch.save(checkpoint, 'checkpoint.pth')

2.加载模型

# 加载整个模型

model = torch.load('mymodel.pth ')

model.eval()

# 加载模型参数

model = CIFAR10_CNN()

model.load_state_dict(torch.load('mymodel_weights.pth '))

model.eval()

# 恢复训练

checkpoint = torch.load('checkpoint.pth ')

model.load_state_dict(checkpoint'model_state_dict')

optimizer.load_state_dict(checkpoint'optimizer_state_dict')

epoch = checkpoint'epoch'

loss = checkpoint'loss'


总结

本文介绍了PyTorch神经网络构建与训练的核心流程。首先阐述了如何通过继承nn.Module基类构建DNN和CNN网络,包括网络结构定义和前向传播实现。其次详细说明了不同任务(分类/回归)适用的损失函数,以及SGD、Adam等优化器的选择。然后展示了完整的训练流程,涵盖设备选择、训练循环、验证评估等关键步骤。最后讲解了模型保存与加载的多种方式,包括完整模型保存、参数保存和训练状态恢复。全文提供了可复用的代码模板,涵盖了PyTorch模型开发的核心技术要点。

相关推荐
m0_638079627 分钟前
2026年AI论文写作辅助工具技术对比与使用观察
大数据·人工智能
商业数据派12 分钟前
日赚近1亿的网易,这个季度栽在了拼多多身上
大数据·人工智能
甲维斯14 分钟前
DeepSeek还是“睁眼瞎” ,最新视觉模型测试!
人工智能
悟天特斯14 分钟前
智慧楼宇边缘计算实战:从端侧自治到云边协同的算力下沉架构
人工智能·物联网·架构·边缘计算
long31631 分钟前
封装(Encapsulation)
java·人工智能·ai·ai编程
五月底_33 分钟前
LIS算法
python·算法·最长子序列
wuyk55536 分钟前
Python零基础入门第五章:元组Tuple(不可变容器详解、列表与元组区别)
开发语言·python
不灭的程序员阿澄40 分钟前
把多个 AI 网站装进一个常驻托盘的桌面窗口里,像切换原生 App 一样切换 AI
人工智能·chatgpt
zhanghaha131440 分钟前
Python进阶教程:13_math 模块 —— 新手完全指南
数据库·python·机器学习
长谷深风11142 分钟前
AI Tool 设计:粒度、参数与错误恢复怎么做
java·大数据·人工智能·ai agent·agent工作流·智能体设计·ai产品设计