用pytorch和d2l实现线性回归的例子
时间: 2024-10-11 19:13:14 浏览: 28
使用PyTorch库和D2L(深度学习框架)实现线性回归的一个简单例子会涉及以下几个步骤:
1. **导入所需库**:
```python
import torch
import d2l
```
2. **创建张量数据**:
```python
# 创建随机模拟的数据
n_train, n_features = 100, 1 # 假设我们有一个特征
true_w, true_b = torch.tensor([[2.0]], requires_grad=True), torch.tensor([1.0], requires_grad=True)
X = torch.rand(n_train, n_features) * 2 - 1
y = X @ true_w + true_b + torch.randn(n_train) * 0.01
```
这里,`@`操作代表矩阵乘法,生成了输入特征和真实权重的线性组合加上一些噪声作为实际标签。
3. **定义模型和损失函数**:
```python
model = torch.nn.Linear(n_features, 1) # 线性层,对应于线性回归模型
loss = torch.nn.MSELoss() # 均方误差损失
```
4. **训练模型**:
```python
learning_rate = 0.001
num_epochs = 1000
for epoch in range(num_epochs):
l = loss(model(X).squeeze(), y)
l.backward()
with torch.no_grad():
model.weight -= learning_rate * model.weight.grad
model.bias -= learning_rate * model.bias.grad
model.zero_grad()
```
这里,通过反向传播更新模型的权重和偏置。
5. **模型评估和预测**:
```python
# 使用测试数据(假设有的话)评估模型
test_X, test_y = ... # 用类似的方式创建测试数据
test_l = loss(model(test_X).squeeze(), test_y)
print('After training:')
print(f'True parameters: w={true_w.item():.3f}, b={true_b.item():.3f}')
print(f'Learned parameters: w={model.weight.item():.3f}, b={model.bias.item():.3f}')
print(f'Test loss: {test_l.item():.3f}')
```
阅读全文