
发表日期: 2021-04-27 12:56:49 浏览次数:106
丹阳网站制作要多少钱【域名企业邮箱服务器注册申请办理】丹阳网络优化公司哪家好、丹阳软件开发外包价格、丹阳高端企业网站页面制作设计专业公司、丹阳微信公众号小程序购物支付搭建制作公司
丹阳市,江苏省辖县级市,由镇江市代管,位于江苏省南部,介于北纬31°44′~32°08′、东经119°23′~119°53′之间,总面积1047平方公里。丹阳属亚热带季风气候,具有气候湿润、光照充足、雨量丰沛、无霜期长、四季分明的气候特征。截至2019年,丹阳市辖2个街道、10个镇。常住人口80.63 万人。 [1]
丹阳建置始于战国时期,初为云阳邑。《山海经》中有一条河叫“丹水”,即丹江,根据“山水阴阳,水北为阳”的理论命名丹阳。 [2] 1987年12月,丹阳撤县设市,为丹阳市,由镇江市代管。丹阳市与常州市新北区交界处建有常州奔牛国际机场,沪宁高速公路(G42沪蓉高速)、312国道、122省道、338省道等是通过公路出入丹阳的主要干道,水运有京杭大运河纵贯丹阳,大港港口是对外开放的长江第三大港。 [3]
2019年,丹阳市实现地区生产总值1121.99亿元,同比增长4.7%。 [4] 2018年12月,入选全国县域经济综合竞争力100强,2018中国大陆最佳商业城市100强、中国最佳县级城市30强。 [5] 2019年10月8日,被评为2019年度全国综合实力百强县市。 [6] 2019全国营商环境百强县。 [7] 2019年国家卫生城市。 [8] 2020年12月,社科院发布《全国县域经济综合竞争力100强》,丹阳排名第40 [9] 。
这里只是像以前一样向前发送输入。有一点需要明确:即使在这个更复杂的场景中,也应该能够使用链式法则计算所需的梯度。
对于输入为两个二维数组的运算,可以像下面这样编码。
def matrix_function_forward_sum(X: ndarray, W: ndarray, sigma: Array_Function) -> float: ''' 输入ndarray(X、W)以及函数sigma,计算该函数的前向传递结果。 ''' assert X.shape[1] == W.shape[0] # 矩阵乘法 N = np.dot(X, W) # 通过sigma传递矩阵乘法的输出 S = sigma(N) # 将所有元素相加 L = np.sum(S) return L复制代码
现在,要对函数“执行后向传递”,这样一来,即使涉及矩阵乘法,也可以最终计算出 相对于输入
ndarray 的每个元素的梯度 5。在学完本章之后,就能轻松地在第 2 章中开始训练真正的机器学习模型。下面先从概念上明确要学习的内容。
5接下来重点计算 相对于
的梯度,但
的梯度可以通过类似的方法来计算。
注意,可以直接计算。值 实际上是从
、
直到
的一个函数。
但是,这似乎很复杂。链式法则的全部要点就是将复杂函数的导数分解成简单的部分,对每个部分执行计算,然后把结果相乘。如此一来,对这些操作进行编码就变得很容易:只需要逐步进行前向传递,保存传递过程中的结果,然后使用这些结果来计算后向传递所需的所有导数。
下面展示这种方法仅适用于涉及矩阵的情况。开始深入讨论吧。
可以将 写成
。如果这是一个常规函数,就可以这样编写链式法则:
然后依次计算 3 个偏导数。前面在计算包含 3 个嵌套函数的复合函数的导数时,我们使用链式法则分别对每个函数进行了求导,这里要执行同样的操作。图 1-22(参见下一页)表明,该方法同样适用于这种函数。
由于一阶导数最直接,因此这里从一阶导数开始计算,主要是确定当 中每个元素值增加时,Λ 的输出
的增长情况。由于
是
中所有元素的总和,因此这个导数很简单:
只要 中的任何元素有所增加,比如增加 0.46 个单位,
就会增加 0.46 单位。
接下来得到 。这只是对
中元素进行求值的任一函数
的导数。在前面使用的
语法中,这同样很容易计算:
注意,我们现在可以肯定地说,能够将这两个导数按元素逐个相乘并计算 :
然而,现在陷入了困境。基于图 1-22 并应用链式法则,接下来要做的是获取 。但是,回想一下,
的输出
只是
与
矩阵相乘的结果。因此,这里要知道
(3×2 矩阵)中每个元素随着
中每个元素(3×3 矩阵)的增加而增加的量。如果上面的表述难以理解,只要明确一点就可以了,那就是现在根本不清楚如何定义它,或者无法确定这样做真的有效。
为什么会出现这个问题呢?以前,我们很幸运,由于 和
在形状上可以相互转换,因此可以证明
和
。现在可以得出类似的结论吗?
“?”的值
更具体地说,现在需要弄清楚以下公式中的“?”到底是什么。
答案
事实证明,根据乘法的计算方式,“?”处的内容就是 ,这和刚才看到的向量点积的简单示例是一样的。有一种方法可以验证这一点,那就是直接针对
中的每个元素计算
的偏导数。这样一来 6,得到的矩阵确实显著地分解成:
6更多介绍参见附录的“矩阵链式法则”。
其中第一个乘法是逐个元素执行的,第二个则是矩阵乘法。
这意味着,即使计算图中的运算涉及将矩阵与多行和多列相乘,并且即使这些运算的输出形状与输入的形状不同,仍然可以将这些运算包含在计算图中,并且使用“链式法则”逻辑对它们进行反向传播。这个结果非常重要,如果没有这个结果,那么训练深度学习模型将变得更加烦琐,后文会进一步介绍这一点。
本例的示意图与 1.12 节中的类似,如图 1-22 所示。

图 1-22:复杂函数中的后向传递
只需要计算每个组成函数的偏导数,在其输入处进行求值,并将结果相乘,就可以得到最终的导数。要依次计算这些偏导数,唯一的方法就是从上述数学层面计算。
现在通过代码封装前面推导出的内容,此过程有助于加深对内容的理解:
def matrix_function_backward_sum_1(X: ndarray, W: ndarray, sigma: Array_Function) -> ndarray: ''' 计算矩阵函数相对于第一个矩阵输入的和的导数。 ''' assert X.shape[1] == W.shape[0] # 矩阵乘法 N = np.dot(X, W) # 通过sigma传递矩阵乘法的输出 S = sigma(N) # 将所有元素相加 L = np.sum(S) # 注意,这里按数量指代导数,这点与数学不同,在数学中使用的是它们的函数名 # dLdS——都是1 dLdS = np.ones_like(S) # dSdN dSdN = deriv(sigma, N) # dLdN dLdN = dLdS * dSdN # dNdX dNdX = np.transpose(W, (1, 0)) # dLdX dLdX = np.dot(dSdN, dNdX) return dLdX复制代码
现在,确认一切正常:
np.random.seed(190204)X = np.random.randn(3, 3)W = np.random.randn(3, 2)print("X:")print(X)print("L:")print(round(matrix_function_forward_sum(X, W, sigmoid), 4))print()print("dLdX:")print(matrix_function_backward_sum_1(X, W , sigmoid))X:[[-1.5775 -0.6664 0.6391]
[-0.5615 0.7373 -1.4231]
[-1.4435 -0.3913 0.1539]]L:2.3755dLdX:[[ 0.2489 -0.3748 0.0112]
[ 0.126 -0.2781 -0.1395]
[ 0.2299 -0.3662 -0.0225]]复制代码和前面的示例一样,由于 dLdX 表示 相对于
的梯度,因此这意味着,左上角的元素表示
。

丹阳网站制作要多少钱【域名企业邮箱服务器注册申请办理】丹阳网络优化公司哪家好、丹阳软件开发外包价格、丹阳高端企业网站页面制作设计专业公司、丹阳微信公众号小程序购物支付搭建制作公司
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878