梯度下降法
获取比例batch_size:1
1.0 获取样本的数量
1.1 获取一个样本数量的乱序
1.2 for循环:(0, num_examples, batch_size)抽取样本。注意batch_size可能不被num_examples整除,所以最后一个抽取需要注意不要越界
返回 X*w +b 。
如果X=[X, 1], w=[w, b]可以返回X * w
为什么loss要sum
因为多个样本要用均值来求导哇。可以先平均求导然后下降,也可以求导后平均下降
w和b的值要减去梯度
由于每次算梯度会叠加,所以要清零
对输入数据做线性变换:y=Ax+by=Ax+b
参数:
形状:
变量:
例子:
>>> m = nn.Linear(20, 30) >>> input = autograd.Variable(torch.randn(128, 20)) >>> output = m(input) >>> print(output.size())
一个时序容器。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()) ]))
将tensor用均值为mean
和标准差为std
的正态分布填充。
创建一个衡量输入x
(模型预测输出
)和目标y
之间均方误差标准。
x
和 y
可以是任意形状,每个包含n
个元素。n
个元素对应的差值的绝对值求和,得出来的结果除以n
。MSELoss
实例的时候在构造函数中传入size_average=False
,那么求出来的平方和将不会除以n
实现随机梯度下降算法(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()
进行单次优化 (参数更新).
参数:
callable
) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。