本文基于 菜鸟教程 PyTorch 神经网络基础 整理,并补充了实战建议与易踩坑提示,适合刚入门的同学快速上手。
1. 神经网络到底在做什么?
一句话:把输入数据通过层层加权+激活映射到目标空间,让模型自己学会“特征提取器”。
核心三件套:
| 组件 | 作用 |
|---|---|
| 神经元 | 线性加权 + 非线性激活 |
| 层 | 把神经元按功能分组(输入/隐藏/输出) |
| 连接权重 | 网络唯一可学习的参数 |
2. PyTorch 中的“骨架”:nn.Module
所有网络都继承自 nn.Module,必须实现两个方法:
class SimpleNN(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(2, 2) # 输入 2 维 → 隐藏 2 维
self.fc2 = nn.Linear(2, 1) # 隐藏 2 维 → 输出 1 维
def forward(self, x):
x = torch.relu(self.fc1(x))
return self.fc2(x)
打印模型即可看到网络结构:
SimpleNN(
(fc1): Linear(in_features=2, out_features=2, bias=True)
(fc2): Linear(in_features=2, out_features=1, bias=True)
)
3. 激活函数怎么选?
表格
激活函数
适用场景
PyTorch 写法
ReLU
隐藏层默认首选
torch.relu(x)
Sigmoid
二分类输出层
torch.sigmoid(x)
Softmax
多分类输出层
F.softmax(x, dim=1)
Tanh
早期网络,现在较少
torch.tanh(x)
小技巧:隐藏层一律 ReLU,输出层看任务类型,基本不会错。
4. 损失函数 & 优化器速查表
表格
任务类型
损失函数
优化器推荐
回归
nn.MSELoss()
Adam
二分类
nn.BCEWithLogitsLoss()
Adam
多分类
nn.CrossEntropyLoss()
Adam / SGD+momentum
5. 训练循环 6 步曲
python
for epoch in range(100):
model.train() # 1. 训练模式
optimizer.zero_grad() # 2. 清零梯度
output = model(X) # 3. 前向传播
loss = criterion(output, Y) # 4. 计算损失
loss.backward() # 5. 反向传播
optimizer.step() # 6. 更新权重
每 10 个 epoch 打印一次损失,肉眼观察是否下降即可。
6. 评估 & 预测
python
model.eval() # 关键:切换评估模式
with torch.no_grad(): # 关闭梯度,节省显存
output = model(X_test)
loss = criterion(output, Y_test)
print(f'Test Loss: {loss.item():.4f}')
7. 常见网络家族一览
表格
网络缩写
全称
典型场景
FNN
前馈神经网络
表格数据、简单回归
CNN
卷积神经网络
图像、语音频谱
RNN
循环神经网络
股票、文本、时间序列
LSTM
长短期记忆网络(RNN 升级版)
长文本、机器翻译