我是靠谱客的博主 背后蜜粉,最近开发中收集的这篇文章主要介绍线性回归的实现学习线性回归的实现学习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

线性回归的实现学习

d2l.stnthetic_data函数

synthetic_data(w, b, num_example)

生成x, y满足关系 y = X w + b + n o i s e y = Xw+b+noise y=Xw+b+noise

data.TensorDataset()

TensorDataset 可以用来对 tensor 进行打包,包装成dataset。就好像 python 中的 zip 功能。该类通过每一个 tensor 的第一个维度进行索引。因此,该类中的 tensor 第一维度必须相等. 另外:TensorDataset 中的参数必须是 tensor

DataLoader

data_iter=torch.utils.data.DataLoader(dataset, batch_size=1,
shuffle=False, sampler=None,
batch_sampler=None, num_workers=0,
collate_fn=None, pin_memory=False,
drop_last=False, timeout=0,
worker_init_fn=None,
multiprocessing_context=None)

dataset (Dataset) – 加载数据的数据集。

batch_size (int, optional) – 每个batch加载多少个样本(默认: 1)。

shuffle (bool, optional) – 设置为True时会在每个epoch重新打乱数据(默认: False).

sampler (Sampler, optional) – 定义从数据集中提取样本的策略。如果指定,则shuffle必须设置成False。

num_workers (int, optional) – 用多少个子进程加载数据。0表示数据将在主进程中加载(默认: 0)

pin_memory:内存寄存,默认为False。在数据返回前,是否将数据复制到CUDA内存中。

drop_last (bool, optional) – 如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)

timeout:是用来设置数据读取的超时时间的,如果超过这个时间还没读取到数据的话就会报错。 所以,数值必须大于等于0。

weight.databias.data

正如我们在构造nn.Linear时指定输入和输出尺寸一样, 现在我们能直接访问参数以设定它们的初始值。 我们通过net[0]选择网络中的第一个图层, 然后使用weight.databias.data方法访问参数。 我们还可以使用替换方法normal_fill_来重写参数值。

MSELoss

计算均方误差的函数,也称为L2范数

在每个迭代周期里,我们将完整遍历一次数据集(train_data), 不停地从中获取一个小批量的输入和相应的标签。 对于每一个小批量,我们会进行以下步骤:

  • 通过调用net(X)生成预测并计算损失l(前向传播)。
  • 通过进行反向传播来计算梯度。
  • 通过调用优化器来更新模型参数。

softmax

单层神经网络

函数损失为交叉熵损失

torch.flatten()

torch.flatten()等于torch.flatten(x,0)默认将张量拉成一维的向量,也就是说从第一维开始平坦化,torch.flatten(x,1)代表从第二维开始平坦化。

torch.flatten(input, start_dim=0, end_dim=-1) → Tensor

Parameters:
  • input (Tensor) – 输入为Tensor

  • start_dim (int) – 展平的开始维度

  • end_dim (int) – 展平的最后维度

从start-end之间进行合并

回想一下,softmax函数 y j = e x p ( o j ) ∑ k e x p ( o k ) y_j = frac{exp(o_j)}{sum_kexp(o_k)} yj=kexp(ok)exp(oj), 其中 y j y_j yj是预测的概率分布。 o j o_j oj是未规范化的预测o的第j个元素。 如果中的一 o k o_k ok些数值非常大, 那么exp⁡(ok)可能大于数据类型容许的最大数字,即上溢(overflow)。 这将使分母或分子变为inf(无穷大), 最后得到的是0、infnan(不是数字)的 y j y_j yj。 在这些情况下,我们无法得到一个明确定义的交叉熵值。

在继续softmax计算之前,先从所有ok中减去 m a x ( o k ) max(o_k) max(ok)。 你可以看到每个ok按常数进行的移动不会改变softmax的返回值:

y j = e x p ( o j − m a x ( o k ) ) e x p ( m a x ( o k ) ) ∑ k e x p ( o k − m a x ( o k ) ) e x p ( m a x ( o k ) ) y_j = frac{exp(o_j-max(o_k))exp(max(o_k))}{sum_kexp(o_k-max(o_k))exp(max(o_k))} yj=kexp(okmax(ok))exp(max(ok))exp(ojmax(ok))exp(max(ok))

用log计算损失 l o g ( y j ) = o j − m a x ( o k ) − log ⁡ ( ∑ k e x p ( o k − m a x ( o k ) ) ) log(y_j)=o_j-max(o_k)-log(sumlimits_k exp(o_k-max(o_k))) log(yj)=ojmax(ok)log(kexp(okmax(ok)))

最后

以上就是背后蜜粉为你收集整理的线性回归的实现学习线性回归的实现学习的全部内容,希望文章能够帮你解决线性回归的实现学习线性回归的实现学习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部