从零开始实现线性回归
学习如何使用 TensorPlay 的低级 API 和自动微分引擎实现线性回归模型。
1. 准备合成数据
我们生成 100 个点,这些点遵循
python
import tensorplay as tp
# 生成随机 X 数据
X = tp.randn(100, 1)
# 生成带噪声的 y 数据
y = 3 * X + 2 + tp.randn(100, 1) * 0.12. 初始化参数
我们需要定义权重 w 和偏置 b。我们设置 requires_grad=True,以便 TensorPlay 能够追踪对它们的操作以进行反向传播。
python
w = tp.randn(1, 1, requires_grad=True)
b = tp.zeros(1, requires_grad=True)3. 定义训练循环
我们将使用手动梯度下降来更新参数。
python
learning_rate = 0.01
for i in range(100):
# 1. 前向传播:计算预测值 y
y_pred = X @ w + b
# 2. 计算损失(均方误差)
loss = ((y_pred - y)**2).mean()
# 3. 反向传播:计算梯度
loss.backward()
# 4. 更新参数
# 我们使用 tp.no_grad() 来执行更新,避免在图中追踪这些操作
with tp.no_grad():
w -= learning_rate * w.grad
b -= learning_rate * b.grad
# 更新后手动清零梯度
w.grad.zero_()
b.grad.zero_()
if i % 10 == 0:
print(f"Iteration {i}, Loss: {loss.item():.4f}")
print(f"Result -> w: {w.item():.2f}, b: {b.item():.2f}")总结
在本教程中,你学习了:
- 如何创建带有
requires_grad=True的张量。 - 如何执行前向传播并计算损失。
- 如何使用
loss.backward()触发反向传播。 - 如何使用
tp.no_grad()手动更新权重并清空梯度。
