线性回归模型的简洁实现
2024-09-27 15:31:38 # 深度学习入门 # 线性神经网络

torch库中提供了很多高级API,帮助我们快速构建一个模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import torch
import numpy as np
from torch import data
# 1.构建数据集
true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = d2l.synthetic_data(true_w, true_b, 1000)
# 2.读取数据集:根据batch_size切割整体数据集
def data_slice(data_arrays, batch_size, is_train = True)
data_slice = data.TensorDataSet(*data_arrays)
#这里返回的是一个迭代器对象
return data.DataLoader(data_slice, batch_size, is_train)
batch_size = 10
data_iter = data_slice([features, labels], batch_size)
next(iter(data_iter))

# 3.定义模型
from torch import nn
net = nn.Sequential(nn.Linear(2,1))
# 4.初始化模型参数
net[0].weight.data.normal_(0, 0.1)
net[0].bias.data.fill_(0)
# 5.定义损失函数
loss = nn.MSEloss()
# 6.定义优化算法
trainer = torch.optim.SGD(net.parameters, lr = 0.3)
# 7.训练:确定学习率,迭代周期。在每个迭代周期内,完成以下事情:
# 7.1 调用模型获取预测值,并通过损失函数正向计算损失
# 7.1 反向传播,梯度下降优化参数
# 7.2 更新模型
epochs = 3
for i in range(epochs):
for X, y in data_iter:
l = loss(net[X], y)
trainer.zero_gard()
l.backward()
trainer.step()
l = loss(net[features], lables)
print(f'epoch {epoch + 1}, loss {l:f})

net[0].weight.data
net[0].bias.data