Redian新闻
>
解密NumPy求解梯度的一个关键难点

解密NumPy求解梯度的一个关键难点

科技

关于numpy的gradient方法,在参数edge_order等于2时,如何得到左右两个边界值,是比较难理解的地方,而网上的博文几乎都千篇一律,都没有对此做出正确的解释。

而关注我的老粉「高新区运气王」经过深思熟虑,找出规律,总结出edge_order等于2时左右两个边界值的推导,难能可贵!在此以飨关注我的读者。

1 Numpy求梯度

import numpy as np
x = np.random.randint(10, size=(6, ))
f = x**2
print(f"f:{f}")
# >> 0, 1, 4, 9, 16

grad1 = np.gradient(f)
print(f"不设置edge_order时, f的默认梯度:{grad1}")

grad2 = np.gradient(f, edge_order=1)
print(f"edge_order=1时,f的梯度:{grad2}")

print(f"查看f的默认梯度是否和edge_order=1时的梯度值相等:{(grad1==grad2).all()}")

grad3 = np.gradient(f, edge_order=2)
print(f"edge_order=2时, f的梯度:{grad3}")

输出结果如下:

f:[49 36 36 9 4 49]
不设置edge_order时, f的默认梯度:[-13. -6.5 -13.5 -16.  20.  45. ]
edge_order=1时,f的梯度:[-13. -6.5 -13.5 -16. 20. 45.]
查看f的默认梯度是否和edge_order=1时的梯度值相等:True
edge_order=2时, f的梯度:[-19.5 -6.5 -13.5 -16. 20. 70. ]

2 一阶中心差分

这里我对整个过程进行解析:

f的计算这里应该不用说,就是对生成的一维随机矩阵x求平方得到的。

根据打印结果我们会发现,默认情况下和edge_order=1时,f的梯度是一样的。

具体怎么算的呢?

先说下边界,整体来讲就是,左边界:f[1]f[0],右边界:f[-1]f[-2]

比如本例中,左边界 = 36 – 49 = -13,右边界 = 49 - 4 = 45

再说下中间梯度:就是用的一阶中心差分,简而言之就是:

比如本例中,f的第二个梯度值 = (f的第三个数 – f的第一个数) / 2 = (36 - 49) / 2 = -6.5, 其他中间梯度值的计算也是同理。

3 理解难点(edge_order=2)

关键地方来了, edge_order=2时我们会发现,所得到的梯度值中间部分跟edge_order=1(也就是默认值)是一样的,区别就在于边界值。

按照官方文档来说edge_order=2就是利用边界处的二阶精确差计算梯度,具体啥意思呢?

网上博客也是千篇一律,都没有给出具体的计算过程

这里我们对计算过程进行解析:

左边界 = 2*(edge_order=1时f的第一个梯度值) - (edge_order=1时f的第二个梯度值)

即:

(这里两撇表示edge_order=2时的梯度,表示f的第i个值)

大家可以自行跟二阶前向差分对比下,需要注意的是numpy里面求梯度这里中间部分的一阶差分是用的一阶中心差分。

右边界 = 2*(edge_order=1时f的最后一个梯度值) - (edge_order=1时f的倒数第二个梯度值)

即:

大家也可以自行推下这里,并跟二阶后向差分对比下。

本例中:

左边界 = 2*(-13) - (-6.5) = -19.5

左边界 = 2*(45) - (20) = 70

可以收藏下,日后你可能会用到。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
在他们分手之后为算力基建铺路!昇腾AI锚定“3个关键”,让AI产业加速向上松间明月下观察 | 离开这5个关键词,就没有蝙蝠侠如何做好抖音电商?386万+电商达人总结了8个关键词美国猴痘临床特征的三个关键90%两个关键!地产熄火以后普京又取得一个关键性胜利!美国“新冠疫苗的未来”大会,传递出疫苗研发的三个关键方向机器学习:使用 Python 进行分类 | Linux 中国一年过去了,我们向5位做宠物食品的老板请教了这10个关键问题机器学习:使用 Python 进行预测 | Linux 中国互联网的下一个大趋势,就藏在这个关键词中扒了上百个窜稀配方,我们发现了拉屎的 4 个关键……决定你这辈子能赚多少钱的,也就是这12个关键性选择这个关键而珍贵的个案,确认了猴痘可由性传播的特征4 步打包一个新的 Python 模块 | Linux 中国一文梳理基于梯度的黑盒迁移对抗攻击研究进展“以工代赈”求解农民工增收:助力实施1800余项目,人均报酬超1万元Python 中可观测性的 7 个关键部分 | Linux 中国十本书求解就业难题 | 《财经》书单BC省新冠疫情出现新动向,这两个关键数字又增加了Marcus by Goldman Sachs Savings 银行账户【1.20% APY + 额外1.0% APY三个月】瞭望|七个关键词解码生物经济​ICLR 2022 | 基于积分梯度的迁移对抗攻击龙卷风健康快递 176Thonny:在学校教授 Python 编程的理想 IDE | Linux 中国实现城市治理一网统管,必须这 4 个关键技术预防宝宝近视的一个关键,很多爸妈都没搞清楚梯度是一种强大的思维工具|会数数的马假理科女一个女人的史诗修复 Ubuntu Linux 中 “Command ‘python’ not found” 的错误 | Linux 中国在 Linux 上安装 FFmpeg | Linux 中国不应止于“北大割席陈春花”,这几个关键问题更应调查追责
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。