动手学深度学习pytorch学习笔记

2.3 自动求梯度

  1. 不允许 Tensor 对 Tensor 求导,只允许标量 Scalar 对张量 Tensor 求导,求导结果是和自变量同型的 Tensor。
  2. torch.autograd.backward(y, w), 或者说 y.backward(w) 的含义是:先计算 l = torch.sum(y * w),然后求 l 对(能够影响到 y 的)所有变量 x 的导数。这里,y 和 w 是同型 Tensor。也就是说,可以理解成先按照 w 对 y 的各个分量加权,加权求和之后得到真正的 loss,再计算这个 loss 对于所有相关变量的导数。torch.autograd.backward 的第二个参数 grad_variables 应该是第一个参数 variables 的对应的导数(w是y的对应导数? 导数 理解成 “权重”
  3. 总结:假设 x 经过一番计算得到 y,那么 y.backward(w) 求的不是 y 对 x 的导数,而是 l = torch.sum(y*w) 对 x 的导数。w 可以视为 y 的各分量的权重,也可以视为遥远的损失函数 l 对 y 的偏导数。也就是说,不一定需要从计算图最后的节点 y 往前反向传播,从中间某个节点 n 开始传也可以,只要你能把损失函数 l 关于这个节点的导数 dl/dn 记录下来,n.backward(dl/dn) 照样能往前回传,正确地计算出损失函数 l 对于节点 n 之前的节点的导数。特别地,若 y 为标量,w 取默认值 1.0,才是按照我们通常理解的那样,求 y 对 x 的导数。

3.4 softmax回归

  1. 交叉熵只关心对正确类别的预测概率。

3.11 过拟合解决办法

  1. 权重衰减(L2正则化)。简单地从优化损失函数的角度来考虑L2正则化,当我们把正则化项添加到损失函数中我们实际上增加了损失函数的值。因此,如果权值越大,损失也就越高,训练算法会试图通过惩罚权值来降低损失函数,迫使它们取更小的值,从而使网络正则化。
  2. 反向随机失活(丢弃法)。丢弃法不改变其输入的期望值,在测试模型时,我们为了拿到更加确定性的结果,丢弃法只在训练模型时使用,一般不使用丢弃法
  3. 参数随机初始化:我们使用torch.nn.init.normal_()使模型net的权重参数采用正态分布的随机初始化方式。不过,PyTorch中nn.Module的模块参数都采取了较为合理的初始化策略(不同类型的layer具体采样的哪一种初始化方法的可参考源代码),因此一般不用我们考虑。

5.1 二维卷积层

  1. 我们常使用“元素”一词来描述数组或矩阵中的成员。在神经网络的术语中,这些元素也可称为“单元”。
  2. 池化(pooling)层,它的提出是为了缓解卷积层对位置的过度敏感性。池化层对每个输入通道分别池化,而不是像卷积层那样将各通道的输入按通道相加。池化层的输出通道数跟输入通道数相同
  3. 端到端(end-to-end)的方法:神经网络可以直接基于图像的原始像素进行分类

9.4 锚框

  1. 锚框产生(不同于真实框和预测框):以每个像素为中心,生成多个大小和宽高比不同的锚框
  2. 交并比和非极大值抑制
  3. 在目标检测时,我们首先生成多个锚框,然后为每个锚框预测类别以及偏移量,接着根据预测的偏移量调整锚框位置从而得到预测边界框,最后筛选需要输出的预测边界框

你可能感兴趣的:(神经网络,深度学习)