pytorch学习笔记之神经网络与全连接

神经网络与全连接

  • 逻辑回归
  • 交叉熵
  • 简单多分类实例
  • 全连接层
  • GPU加速

逻辑回归

  • 对于这里的回归概念,当采用 MSE 作为 loss函数 时,期望输出接近于1,因此可以作为 回归的概念
  • 但,当采用 交叉熵 作为 loss函数 时,会将期望输出偏向单一的种类 (高于某一阈值,输出1;低于阈值输出0) ,故作为 分类的概念 更合适

交叉熵

  • 熵(entropy)是对 p的函数
    在这里插入图片描述

  • 交叉熵(cross entropy) 是对 p和q 的函数
    pytorch学习笔记之神经网络与全连接_第1张图片

  • 下例中展示了两种 cross_entropy 的写法
    pytorch学习笔记之神经网络与全连接_第2张图片

  • 对于分类问题,一般采用 交叉熵不采用 sigmoid+MSE ,因为交叉熵收敛的更快,且 sigmoid 容易饱和

  • MSE 求导简单,对一些 简单的问题,可以使用 MSE

简单多分类实例

pytorch学习笔记之神经网络与全连接_第3张图片
pytorch学习笔记之神经网络与全连接_第4张图片

  • 以上例的形式训练,发现 loss 长时间不变梯度出现了离散问题,因此考虑是初始化做的不好
  • 因此,在下方通过 torch.nn.init.kaiming_normal_(w) 函数对 w 重新初始化,第二次训练发现 loss 下降正常,取得较好的结果
    pytorch学习笔记之神经网络与全连接_第5张图片

全连接层

  • 上一章中的 forward 函数其实可以直接使用 nn.linear 的高级API代替pytorch学习笔记之神经网络与全连接_第6张图片
    pytorch学习笔记之神经网络与全连接_第7张图片

  • 但我们还可以将上述几个 linear 写成一个函数,增加函数的封装性

  • 对于自建函数,一般需要继承自 nn.module ,通过 init 函数初始化

  • 值得一提的是,一般可以值定义 forward 的内容,对于反向传播,使用 autograd 可以自动反向求导

  • 上述例子可以简化为下例
    pytorch学习笔记之神经网络与全连接_第8张图片

  • .squential 可以有顺序的调用 nn.moduel 中的所有函数形成 forward

  • 另外,使用 MLP =MLP() 或 MLP() 函数时,会自动调用其中的 forward 函数
    在这里插入图片描述

  • 可以看到,使用 .parameters() 函数可以自动加载相关参数

  • 最后,采用上述高级 API 建立自己的函数,不需要再单另初始化了,其内部有自己的初始化方法

  • 下面为剩下的高级 API 改写程序(调用部分)
    pytorch学习笔记之神经网络与全连接_第9张图片

GPU加速

  • 使用 .device(‘cuda:a’) 确认使用哪张显卡(a表示第几个显卡的数字),再使用 .to() 函数,就可以将运算搬至指定GPU计算
  • 注:下例中的 .cuda() 为老版本方法,目前不推荐使用这种方法

pytorch学习笔记之神经网络与全连接_第10张图片

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