模拟生成符合y = 5x2 + 2的一组数据,然后手动计算梯度,利用pytorch拟合该公式的系数。
时间: 2024-10-08 12:26:33 浏览: 34
LeNet5.zip
在Python中,我们可以使用PyTorch库来进行线性回归任务,包括模拟数据并计算梯度。首先,我们创建一个简单的函数来模拟数据:
```python
import torch
# 定义线性模型 y = wx + b
def model(x, w=5, b=0):
return w * x.pow(2) + b
# 创建随机数据
num_samples = 100
x_data = torch.linspace(-10, 10, num_samples)
noise = torch.randn(num_samples)
y_data = model(x_data) + noise # 添加噪声
# 初始化权重和偏置作为需要优化的变量
w.requires_grad_(True)
b.requires_grad_(True)
# 计算损失函数,这里使用均方误差
loss_fn = torch.nn.MSELoss()
loss = loss_fn(model(x_data), y_data)
```
为了手动计算梯度,我们需要使用链式法则对损失函数关于w和b求导:
```python
# 手动计算梯度
dL_dw = (2 * x_data * (model(x_data) - y_data)).mean() # 对w求导
dL_db = (model(x_data) - y_data).mean() # 对b求导
# 更新权重和偏置
learning_rate = 0.01
w.data -= learning_rate * dL_dw
b.data -= learning_rate * dL_db
```
现在,`w`和`b`应该更接近于真实值5和0。你可以通过多次迭代调整它们来减小损失。
阅读全文