李沐动手学深度学习7——pytorch线性回归
李沐动手学深度学习,有视频、有中文电子书(含配套代码),推荐!
使用pytorch实现求解线性回归问题,主要知识点有:
1.torch.utils.data ——Pytorch中的数据加载和处理模块,代码中使用到了其包含的数据集类data.TensorDataset,和数据集批量加载迭代器类data.DataLoader
2.torch.nn——Pytorch中的神经网络模块,代码中使用到了其包含的神经网络层容器nn.Sequential,线性变换层nn.Linear,L2范数类MSELoss
3.torch.optim——Pytorch中的优化算法模块,代码中使用到了其包含的随机梯度下降优化器类optim.SGD
代码如下:
import torch from torch.utils import data from p1_LinerRegression import synthetic_data from torch import nn def load_array(data_arrays, batch_size, is_train = True): # 构造PyTorch数据迭代器 dataset = data.TensorDataset(*data_arrays) return data.DataLoader(dataset, batch_size, shuffle=is_train) if __name__ == "__main__": true_w = torch.tensor([2, -3.4]) true_b = 4.2 features, labels = synthetic_data(true_w, true_b, 1000) batch_size = 10 data_iter = load_array((features, labels), batch_size) print(next(iter(data_iter))) # nn是pytorch的神经网络模块 # Sequential是存放神经网络层的容器 # nn.Linear是线性变换层 # 输入维度为2,输出维度为1 net = nn.Sequential(nn.Linear(2, 1)) # 初始化线性变换层的模型参数 net[0].weight.data.normal_(0, 0.01) net[0].bias.data.fill_(0) # MSELoss类,返回平方L2范数 loss = nn.MSELoss() # 定义优化算法 # SGD:Stochastic Gradient Descent 是实现随机梯度下降的优化器类 trainer = torch.optim.SGD(net.parameters(), lr=0.3) # 训练 num_epochs = 3 for epoch in range(num_epochs): for X,y in data_iter: l = loss(net(X), y) trainer.zero_grad() l.backward() # step函数执行参数更新 trainer.step() l = loss(net(features), labels) print(f'epoch {epoch + 1}, loss {l:f}')