Pytorch深度学习笔记②:线性回归模型的简单实现
程序员文章站
2022-05-26 21:32:56
...
本文参考:08 线性回归 + 基础优化算法【动手学深度学习v2】_哔哩哔哩_bilibili
一、整体思路
利用深度学习Pytorch框架来实现线性回归模型的简洁实现
二、代码框架
首先,导入所需要的包,并生成数据集。
import numpy as np
import torch
from torch.utils import data
from d2l import torch as d2l
true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = d2l.synthetic_data(true_w, true_b, 1000)
再定义load_array函数,其目的是实现小批量随机梯度下降法中的小批量的选取,实现对数据集按照batch_size进行分批,并随机进行读取。
def load_array(data_arrays, batch_size, is_train=True):
'''构造一个数据迭代器'''
dataset = data.TensorDataset(*data_arrays)
# 实现小批量的选取
return data.Dataloader(dataset, batch_size, shuffle=is_train)
batch_size = 10
data_iter = load_array((features, labels), batch_size)
next(iter(data_iter))
接下来即可构建模型
from torch import nn
net = nn.Sequential(nn.Linear(2, 1))
# 实现对模型中参数的初始化
net[0].weight.data.normal_(0, 0.01) # 将模型中的w初始化为均值为0,方差为0.01的分布
net[0].bias.data.fill_(0) # 将模型中的b初始化为0
# 定义损失函数为均方误差
loss = nn.MSEloss()
# 定义优化方法:实例化SGD实例来实现对模型的参数更新
trainer = torch.optim.SGD(net.parameters(), lr=0.03)
开始训练
num_epoch = 3 # 训练次数为3
for epoch in range(num_epoch):
for X, y in data_iter: # 随机抽取10个小批量样本进行训练
l = loss(net(X), y) #计算损失
trainer.zero_grad() #梯度归零
l.backward() #求解最新梯度
trainer.step() #更新参数
l = loss(net(features), labels)
print(f"epoch{epoch + 1}, loss{l:f}")
最终得到结果为:
推荐阅读
-
(pytorch-深度学习系列)pytorch避免过拟合-dropout丢弃法的实现-学习笔记
-
动手学深度学习PyTorch-task1(线性回归;Softmax与分类模型;多层感知机)
-
《动手学深度学习》task1——线性回归、softmax与分类模型,多层感知机笔记
-
《动手学深度学习》之线性回归的从零实现(含个人理解)
-
Pytorch深度学习笔记②:线性回归模型的简单实现
-
pytorch学习笔记(九):softmax回归的简洁实现
-
[Pytorch --- 11] 简单线性回归的实现
-
pytorch实现最简单的线性回归
-
线性回归模型使用pytorch的简洁实现
-
上课笔记篇---用Pytorch实现简单的线性回归