神经网络-损失函数、反向传播与优化器

一、损失函数

# L1Loss

(1)解读官方文档

(2)代码示例

 #MSELoss(平方差)

(1)解读官方文档

 (2)代码示例

 # CrossEntropyloss(交叉熵)

(1)解读官方文档

( 原官方文档中公式解读在本子上)

 (2)代码示例

 exp表示已e为底的指数函数计算,而log默认以10为底,因此改成ln进行计算,结果与代码中相同:

 二、在之前写的神经网络中应用损失函数

添加代码:

作用:①计算实际输出和目标之间的差距;②为我们更新输出提供一定的依据(反向传播)

:对于神经网络来说/对于卷积层来说,其中的每一个卷积核当中的参数就是需要调的。给每一个卷积核的参数设置了一个grad(梯度),当采用反向传播的时候,每一个节点/每一个要更新的参数,他都会求出一个对应的梯度,在优化的过程中根据这个梯度对当中的参数进行一个优化,最终达到一个loss降低的目的。

三、反向传播

#梯度下降

不进行反向传播,打一个断点查看梯度情况:

 打开一个卷积层,查看梯度为None:

 让代码运行到41行去进行反向传播,再查看梯度信息已经出现,如果没有反向传播这一步就一直没有梯度信息:

 反向传播之后,就可以计算出每个节点的参数。有了各个节点的参数的梯度,接下来就可以选用合适的优化器来对这些参数进行一个优化,以对整个loss达到一个降低的目的。

四、优化器

(1)解读官方文档

不同的优化器所需要的参数有所差距,一般相似处是params(要传入的模型参数,让优化器知道模型长什么样、需要调节的参数有哪些)、lr(学习速率)

(2)代码示例

# 随机梯度下降优化器(SGD)

打断点,debugger第一个断点查看变化:

点击左边绿色箭头,debugger第二个断点,即运行完44行,梯度有了变化,但是数据还没变化:

debugger第三个断点,即运行完46行,优化器对数据已经进行了优化:

 数据还没有去完,循环运行42行,梯度进行了清0,开始新一轮的优化:

 输出结果:

 但是loss并没有明显的减小,原因:dataloader只对这个网络上的数据模型都只是看了一遍,这只是进行了一轮的学习,因此需要对循环外再加多轮次学习:

 按理说,应该越训练误差越小,为什么会变大估计是模型或者什么参数的问题(学习率太大,批量数值不对,需要调参)。

把学习率降低,好像真的有好转!yep!!!

 可能的原因:神经网络训练时损失(loss)不下降常见解决办法以及训练时损失出现nan可能原因以及解决_训练损失不下降_童话ing的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值