✨ 一、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)


🔍 三、神经网络训练的完整流程

  1. 准备数据(输入和标签)
  2. 定义模型
  3. 定义损失函数
  4. 定义优化器
  5. 训练模型(多轮 epoch)
  6. 评估与保存模型

🧪 示例代码:训练回归模型

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()
    # 在验证集上评估


🧩 七、练习建议

  1. 改写 SimpleNet 支持多分类任务(使用 CrossEntropyLoss
  2. 用 nn.Sequential 构建更简洁的网络结构
  3. 实现一个使用 nn.Conv2d 的图像分类模型(如手写数字识别)