
一个 nn.Linear(in, out) 就是一次矩阵运算:
单个神经元展开:
验证:
nn.Linear(1,32)的weight.shape = (32,1),bias.shape = (32,), 正好把 1 维输入升到 32 维。
只堆 Wx+b,无论多少层,本质还是线性(矩阵连乘还是一个矩阵),
画不出 sin 这样的弯曲曲线。
加 ReLU 引入非线性:
多层 + 非线性 → 能拟合任意复杂函数(万能逼近定理)。
下面为神经网络基本框架
pythonclass MLP(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(1, 32)
self.fc2 = nn.Linear(32, 32)
self.fc3 = nn.Linear(32, 1)
def forward(self, x):
x = torch.relu(self.fc1(x)) # 线性 + 非线性
x = torch.relu(self.fc2(x))
return self.fc3(x) # 回归任务最后一层不加激活
pythonfor epoch in range(1000):
optimizer.zero_grad() # 1. 清空上轮梯度(梯度会累加,不清会错)
pred = model(x) # 2. 前向(自动调用 forward)
loss = criterion(pred, y) # 3. 算误差
loss.backward() # 4. 反向(autograd 自动算所有梯度)
optimizer.step() # 5. 按梯度更新参数
# 上述的代码是全批量训练的,因为数据量小
以上就是神经网络训练的基本流程了,后续会根据不同的任务更新不同的算法,敬请期待~
本文作者:Deshill
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!