AI深度学习,神经网络处理流程:
输入 → 前向 → 损失 → 反向 → 更新 → 预测。一、整体流程神经网络完整处理分为两大阶段: 1. 训练阶段(学参数 W, b)初始化 → 前向传播 → 算损失 → 反向传播 → 更新参数 → 循环2. 推理阶段(用模型)只前向传播,输出结果 二、详细流程 全连接网络 + 回归任务 0. 准备:数据、网络、初始化 1)构造数据(回归任务:y = wx + b)import torchimport torch.nn as nnimport torch.optim as optim# 造数据:y = 2x + 3 + 噪声x = torch.randn(1000, 1) # 输入y = 2 * x + 3 + 0.1 * torch.randn(1000, 1) # 真实标签2)定义神经网络class Net(nn.Module): def init (self): super().init() self.fc1 = nn.Linear(1, 1) # 一层线性:输入1,输出1 def forward(self, x): out = self.fc1(x) return outmodel = Net()3)参数初始化(W, b) 神经网络训练前必须初始化: - W:随机(He / Xavier)- b:通常0# 手动初始化演示nn.init.kaiming_normal_(model.fc1.weight) # Wnn.init.constant_(model.fc1.bias, 0.0) # b4)定义损失函数 + 优化器criterion = nn.MSELoss() # 回归损失optimizer = optim.SGD(model.parameters(), lr=0.1)1. 训练第一步:前向传播 Forward数据输入网络,用 W, b 计算预测值公式(单层线性):\hat{y} = x \cdot W + by_pred = model(x) # 前向传播作用:- 用当前参数算出预测- 还没学习,只是瞎猜 2. 计算损失 Loss 衡量预测有多错:Loss = \frac{1}{N}\sum (y - \hat{y})^2loss = criterion(y_pred, y)3. 反向传播 Backward 求所有 W, b 对 Loss 的梯度\frac{\partial Loss}{\partial W},\quad \frac{\partial Loss}{\partial b}梯度含义: - 每个参数怎么变,会让 Loss 变小optimizer.zero_grad() # 清空旧梯度loss.backward() # 反向传播,计算梯度4. 参数更新(优化器走一步) 沿梯度反方向更新 W, b:W = W - \eta \cdot \nabla Wb = b - \eta \cdot \nabla boptimizer.step() # 更新参数每执行一次,模型就更准一点点。 5. 循环迭代(完整训练) 把上面4步循环很多次:epochs = 1000for epoch in range(epochs): # 1. 前向 y_pred = model(x) # 2. 损失 loss = criterion(y_pred, y) # 3. 反向 optimizer.zero_grad() loss.backward() # 4. 更新 optimizer.step() if epoch % 100 == 0: print(f'epoch {epoch}, loss: {loss.item():.4f}')训练过程本质:不断修正 W, b,让 loss 越来越小。 6. 训练结束:查看学到的参数 真实是 y=2x+3,模型学到的 W 和 b:print('W:', model.fc1.weight.item())print('b:', model.fc1.bias.item())会看到接近: - W ≈ 2- b ≈ 37. 推理 / 预测阶段(真正使用) 只前向传播,不更新参数# 测试新数据x_test = torch.tensor([[5.0]])model.eval() # 推理模式with torch.no_grad(): # 不计算梯度 y_test = model(x_test)print('预测结果:', y_test.item())