其他分享
首页 > 其他分享> > 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

参数:

形状:

变量:

例子:

>>> 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 \]

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中的公式.

参数:

例子:

>>> 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]

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

参数:

标签:20,features,nn,08,torch,Sequential,线性,回归,size
来源: https://www.cnblogs.com/little-xia/p/15427038.html