💻 PyTorch实现
import torch
import torch.nn as nn
model = nn.Linear(10, 1)
X = torch.randn(32, 10)
y = torch.randn(32, 1)
y_pred = model(X)
loss = nn.MSELoss()(y_pred, y)
loss.backward()
print(model.weight.grad)
print(model.bias.grad)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
optimizer.step()
optimizer.zero_grad()
🔄 训练循环
for epoch in range(num_epochs):
for batch_X, batch_y in dataloader:
optimizer.zero_grad()
outputs = model(batch_X)
loss = criterion(outputs, batch_y)
loss.backward()
optimizer.step()
print(f'Epoch {epoch}, Loss: {loss.item():.4f}')
📊 计算图示意
输入 x
↓ (w₁)
隐藏层 h = f(w₁x + b₁)
↓ (w₂)
输出 y = f(w₂h + b₂)
↓
损失 L
反向传播:
∂L/∂w₂ → ∂L/∂w₁ → 更新参数