08线性回归实现的一些问题

还是线性回归

基础优化算法的顺序

梯度下降法

08线性回归实现的一些问题

08线性回归实现的一些问题

0:人造数据集(可以不要)

1:随机小批量

获取比例batch_size:1

1.0 获取样本的数量

1.1 获取一个样本数量的乱序

1.2 for循环:(0, num_examples, batch_size)抽取样本。注意batch_size可能不被num_examples整除,所以最后一个抽取需要注意不要越界

2: 计算模型获得的结果

返回 X*w +b 。

如果X=[X, 1], w=[w, b]可以返回X * w

3: 获取损失函数 (y_hat - y)^2/2

4: loss.sum().backward()

为什么loss要sum

因为多个样本要用均值来求导哇。可以先平均求导然后下降,也可以求导后平均下降

5:梯度下降

w和b的值要减去梯度

由于每次算梯度会叠加,所以要清零

6:循环1~5,自定义num_epochs

pytorch一些函数的用法

class torch.nn.Linear(in_features, out_features, bias=True)

对输入数据做线性变换:y=Ax+by=Ax+b

参数:

  • in_features - 每个输入样本的大小
  • out_features - 每个输出样本的大小
  • bias - 若设置为False,这层不会学习偏置。默认值:True

形状:

  • 输入: (N,in_features)
  • 输出: (N,out_features)

变量:

  • weight -形状为(out_features x in_features)的模块中可学习的权值
  • bias -形状为(out_features)的模块中可学习的偏置

例子:

>>> m = nn.Linear(20, 30)
>>> input = autograd.Variable(torch.randn(128, 20))
>>> output = m(input)
>>> print(output.size())

class torch.nn.Sequential(* args)

一个时序容器。Modules 会以他们传入的顺序被添加到容器中。当然,也可以传入一个OrderedDict

为了更容易的理解如何使用Sequential, 下面给出了一个例子:

# Example of using Sequential

model = nn.Sequential(
          nn.Conv2d(1,20,5),
          nn.ReLU(),
          nn.Conv2d(20,64,5),
          nn.ReLU()
        )
# Example of using Sequential with OrderedDict
model = nn.Sequential(OrderedDict([
          ('conv1', nn.Conv2d(1,20,5)),
          ('relu1', nn.ReLU()),
          ('conv2', nn.Conv2d(20,64,5)),
          ('relu2', nn.ReLU())
        ]))

normal_(mean=0, std=1, , gengerator=None*)

将tensor用均值为mean和标准差为std的正态分布填充。

class torch.nn.MSELoss(size_average=True)[source]

创建一个衡量输入x(模型预测输出)和目标y之间均方误差标准。

\[loss(x,y)=1/n∑(xi−yi)2 \]

  • xy 可以是任意形状,每个包含n个元素。
  • n个元素对应的差值的绝对值求和,得出来的结果除以n
  • 如果在创建MSELoss实例的时候在构造函数中传入size_average=False,那么求出来的平方和将不会除以n

class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)[source]

实现随机梯度下降算法(momentum可选)。

Nesterov动量基于On the importance of initialization and momentum in deep learning中的公式.

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict

  • lr (float) – 学习率

  • momentum (float, 可选) – 动量因子(默认:0)

  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认:0)

  • dampening (float, 可选) – 动量的抑制因子(默认:0)

  • nesterov (bool, 可选) – 使用Nesterov动量(默认:False)

例子:

>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9) 
>>> optimizer.zero_grad() 
>>> loss_fn(model(input), target).backward() 
>>> optimizer.step()

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。
上一篇:【4】神经网络的搭建


下一篇:【题解】AGC003E Sequential operations on Sequence