服务热线

400-123-4567
网站导航
新闻中心
当前位置: 首页 > 新闻中心

【python实现卷积神经网络】优化器的实现(SGD、Nesterov、Adagrad、Adadelta、RMSprop、Adam)

时间:2024-04-22 14:29:28 点击次数:

代码来源:https://github.com/eriklindernoren/ML-From-Scratch

卷积神经网络中卷积层Conv2D(带stride、padding)的具体实现:https://cloud.tencent.com/developer/article/1686529

激活函数的实现(sigmoid、softmax、tanh、relu、leakyrelu、elu、selu、softplus):https://cloud.tencent.com/developer/article/1686496

损失函数定义(均方误差、交叉熵损失):https://cloud.tencent.com/developer/article/1686498

先看下优化器实现的代码:

这里导入了了mlfromscratch.utils中的make_diagonal, normalize函数,它们在data_manipulation.py中。但是好像没有用到,还是去看一下这两个函数:

make_diagonal()的作用是将x中的元素变成对角元素。

normalize()函数的作用是正则化。

补充:

  • np.linalg.norm(x, ord=None, axis=None, keepdims=False):需要注意ord的值表示的是范数的类型。
  • np.atleast_1d():改变维度,将输入直接视为1维,比如np.atleast_1d(1)的输出就是1
  • np.expand_dims():用于扩展数组的维度,要深入了解还是得去查一下。

然后再看看优化器的实现,以最常用的随机梯度下降为例:

直接看带动量的随机梯度下降公式:

这里的β就是动量momentum的值,一般取值是0.9。正好是对应上面的公式,最后更新W和b就是:

其中 α就表示学习率learning_rate。

至于不同优化器之间的优缺点就不在本文的考虑追之中了,可以自行去查下。

Copyright © 2012-2020 星云-星云娱乐仪器分析类制造商 版权所有 非商用版本  琼ICP备54123456号

地址:广东省广州市天河区某某工业区88号 电话:400-123-4567 邮箱:admin@youweb.com

关注我们

平台注册入口