✨ 一、PyTorch 中的神经网络模块
PyTorch 使用 torch.nn
模块来构建神经网络。你可以将神经网络看成一组层(Layer)的堆叠。
常见层包括:
nn.Linear
:全连接层nn.ReLU
:激活函数nn.Conv2d
:卷积层(用于图像)nn.LSTM
:循环层(用于序列)
⚙️ 二、构建一个简单的神经网络
示例:一个两层的前馈神经网络
import torch
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(10, 50) # 输入特征维度为10,隐藏层为50
self.relu = nn.ReLU()
self.fc2 = nn.Linear(50, 1) # 输出1个结果(如用于回归)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# 创建模型
model = SimpleNet()
print(model)
🔍 三、神经网络训练的完整流程
- 准备数据(输入和标签)
- 定义模型
- 定义损失函数
- 定义优化器
- 训练模型(多轮 epoch)
- 评估与保存模型
🧪 示例代码:训练回归模型
import torch.optim as optim
# 模拟输入和标签
x = torch.randn(100, 10)
y = torch.randn(100, 1)
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练模型
for epoch in range(100):
outputs = model(x)
loss = criterion(outputs, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 10 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")
📦 四、常用组件说明
组件 | 说明 |
---|---|
nn.Linear(in, out) | 全连接层 |
nn.ReLU() / nn.Sigmoid() | 激活函数 |
nn.CrossEntropyLoss() | 多分类损失函数 |
optim.SGD() / optim.Adam() | 优化器 |
.backward() | 自动求导 |
.step() | 参数更新 |
🔍 五、模型评估与保存
# 评估模式
model.eval()
with torch.no_grad():
pred = model(x)
eval_loss = criterion(pred, y)
# 保存模型参数
torch.save(model.state_dict(), 'model.pth')
# 加载模型参数
model.load_state_dict(torch.load('model.pth'))
model.eval()
🧠 六、完整神经网络训练结构(模板)
for epoch in range(num_epochs):
model.train()
for batch_x, batch_y in dataloader:
output = model(batch_x)
loss = criterion(output, batch_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
model.eval()
# 在验证集上评估
🧩 七、练习建议
- 改写
SimpleNet
支持多分类任务(使用CrossEntropyLoss
) - 用
nn.Sequential
构建更简洁的网络结构 - 实现一个使用
nn.Conv2d
的图像分类模型(如手写数字识别)
发表回复