深度学习基础10(线性回归最基础实现,只使用自动求导和tensor计算)

线性回归的从零开始实现

本文将从零开始实现整个方法, 包括数据流水线、模型、损失函数和小批量随机梯度下降优化器

这样做事有意义的,可以知道更深的原理,同时,了解更细致的工作原理将方便我们自定义模型、自定义层或自定义损失函数

当然我们以后都是使用深度学习里面的框架

本文将只使用简单的tensor的计算和自动求导来演示线性回归

先导入random的包,因为我们要随机梯度下降和随机化初始化我们的权重

%matplotlib inline #意思是我们在plot的时候嵌入到matnotebook里面
import random
import torch
from d2l import torch as d2l

生成数据集

为了简单起见,我们将根据带有噪声的线性模型构造一个人造数据集。

我们的任务是使用这个有限样本的数据集来恢复这个模型的参数。

我们将使用低维数据,这样可以很容易地将其可视化。

在下面的代码中,生成一个包含1000个样本的数据集, 每个样本包含从标准正态分布中采样的2个特征。

我们的合成数据集是一个矩阵𝐗∈ℝ1000×2

8~HZAJ(1%1Z853$PY{6CLJ4

可以将ϵ视为模型预测和标签时的潜在观测误差。

在这里我们认为标准假设成立,即ϵ服从均值为0的正态分布。

为了简化问题,我们将标准差设为0.01。 下面的代码生成合成数据集。

w, b, num_examples的意思是在给定w和b和我们要生成的n个样本

y += torch.normal(0, 0.01, y.shape)的目的是为了让这个问题难一点,我们加入了随机噪音,均值为0,标准差是0.01,y.shape意思是形状跟y的长度是一样

def synthetic_data(w, b, num_examples):  #@save  
    """生成y=Xw+b+噪声"""
    X = torch.normal(0, 1, (num_examples, len(w)))#首先生成x,是均值为0,标准差为1的随机数,num_examples就是n个样本,列数就是w的长度  
    y = torch.matmul(X, w) + b#y就是x乘以w了,再加上偏差b
    y += torch.normal(0, 0.01, y.shape)
    return X, y.reshape((-1, 1))#最后我们把x和y做成一个列向量返回

然后定义我们真实的w和真实的b

features, labels = synthetic_data(true_w, true_b, 1000)的意思是:可以通过synthetic_data函数来生成我们的特征和标签了

true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)

这样我们就有了我们的训练样本

注意,features中的每一行都包含一个二维数据样本, labels中的每一行都包含一维标签值(一个标量)

print('features:', features[0],'\nlabel:', labels
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NDNPOMDFLR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值