求导

pytorch中backward()函数详解

末鹿安然 提交于 2019-12-05 21:54:41
最近由于实际需要在学习pytorch,作为深度学习中最为重要的反向传播计算,pytorch用非常简单的backward( )函数就实现了,但是在实现过程中对于其参数存在一些疑问,下面就从pytorch中反向传播求导的计算方式,backward( )函数参数来进行说明。 这里首先还是放出backward( )函数的pytorch文档,因为整个说明主要还是围绕这个函数来进行的。 问题描述 从上面的文档可以看到backward函数有一个奇怪的参数:grad_tensors,在实现pytorch的官方教程中可以发现: import torch import torch . nn as nn x = torch . tensor ( [ 2 , 3 , 4 ] , dtype = torch . float , requires_grad = True ) print ( x ) y = x * 2 while y . norm ( ) < 1000 : y = y * 2 print ( y ) y . backward ( torch . ones_like ( y ) ) print ( x . grad ) 上面的程序的输出为: tensor ( [ 2 . , 3 . , 4 . ] , requires_grad = True ) tensor ( [ 512 . , 768 .

7-16 一元多项式求导 (20 分) 数据结构与算法题目集(中文)

天涯浪子 提交于 2019-12-05 14:33:16
设计函数求一元多项式的导数。 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0代码: #include <stdio.h> #include <string.h> int main() { int a,b,flag = 0; while(~scanf("%d%d",&a,&b)) { if(b) { if(flag) putchar(' '); printf("%d %d",a * b,b - 1); flag = 1; } } if(!flag) printf("0 0"); return 0; } 来源: https://www.cnblogs.com/8023spz/p/11928146.html

函数极限(1.1-1.46)

馋奶兔 提交于 2019-12-03 16:07:59
2020张宇1000题·数一·刷题记录 第一篇 高等数学 第1章 极限、连续 一、函数极限(1.1-1.46) 分母等价替换,分子泰勒展开到x²项,或对式子求两次导。 分母虽然是相减但是满足要求,可以直接用等价替换。分子两个函数都得泰勒展开到x³项,或对式子求三次导。答案的求导再拆分再求导太麻烦了。 (0-0)/0型,拆分分母变成两个极限相加,左边提取往e^x-1~x上靠,然后左右两遍都可以直接等价替换了。 方法一中的泰勒展开式,展开到第二项与第三项,结果算出来是不一样的。应该是分子无穷小的阶数要大于等于分母的阶数才行。 另一种方法,一次求导之后再拆分。 式子太复杂不可能用求导,而分子分母都是加减形式,所以要先判断分子分母情况,才能确定能否直接等价替换。 \({\begin{cases}{\lim \limits_{x \to 0}\dfrac{(3+tanx)^x}{3^x}=\dfrac{1}{1}=1}&分子相减等于0。 \\{\lim \limits_{x \to 0}\dfrac{3sin^2x}{x^3cos\dfrac{1}{x}}=\dfrac{3}{xcos\dfrac{1}{x}(0·有界)}=\infty \neq-1}&分母相加不等于0。 \end{cases}}\) 故分子相减不能用等价无穷小替换,换个思路,提取3的x次方,往e^x-1~x上靠。

一、函数极限(1.1-1.46)

爱⌒轻易说出口 提交于 2019-12-03 15:04:55
# 2020张宇1000题·数一·刷题记录 ## 第一篇 高等数学 ### 第1章 极限、连续 #### 一、函数极限(1.1-1.46) 1. 分母等价替换,分子泰勒展开到x²项,或对式子求两次导。 2. 分母虽然是相减但是满足要求,可以直接用等价替换。分子两个函数都得泰勒展开到x³项,或对式子求三次导。答案的求导再拆分再求导太麻烦了。 3. (0-0)/0型,拆分分母变成两个极限相加,左边提取往e^x-1~x上靠,然后左右两遍都可以直接等价替换了。 4. 方法一中的泰勒展开式,展开到第二项与第三项,结果算出来是不一样的。应该是分子无穷小的阶数要大于等于分母的阶数才行。 5. 另一种方法,一次求导之后再拆分。 6. 式子太复杂不可能用求导,而分子分母都是加减形式,所以要先判断分子分母情况,才能确定能否直接等价替换。 ${\begin{cases}{\lim \limits_{x \to 0}\dfrac{(3+tanx)^x}{3^x}=\dfrac{1}{1}=1}&分子相减等于0。 \\{\lim \limits_{x \to 0}\dfrac{3sin^2x}{x^3cos\dfrac{1}{x}}=\dfrac{3}{xcos\dfrac{1}{x}(0·有界)}=\infty \neq-1}&分母相加不等于0。 \end{cases}}$ 故分子相减不能用等价无穷小替换

是时候搞定矩阵微分了!

丶灬走出姿态 提交于 2019-12-03 07:02:01
前言与感谢 以前就对矩阵求导有心理阴影,到底要不要转置,哪个矩阵放在前面,哪个矩阵放在后面,链式法则怎么搞,由产生此类一系列让人头大的问题。其中,最令人智熄的是经常网上的一些算法公式推导根本是错误的,因为矩阵维数根本不匹配,故这些无良的发布者可能根本就没有手推过,天天搞复制黏贴大法,很多时候都是大量重复错误的内容。最近读了一些材料,感觉心中有了一些数,因此想通过本文总结,一次性梳理清楚。是时候搞定矩阵微分了! 参考材料: Kaare Brandt Petersen, Michael Syskind Pedersen. "The Matrix Cookbook", 2008 Thomas P. Minka. "Old and New Matrix Algebra Useful for Statistics", 2000 Searle Shayle R. "Matrix Algebra Useful for Statistics", 1982 Jan R. Magnus, Heinz Neudecker. "Matrix Differential Calculus with Applications in Statistics and Econometrics", 2007 "Matrix Vector Derivatives for Machine Learning", (作者邮箱

初等函数求导

匿名 (未验证) 提交于 2019-12-03 00:39:02
remoon 求C的导数 \[f(x) = C\] \[\lim_{h \to 0} \frac{f(x+h) - f(x)}{h}\] \[=\lim_{h \to 0} \frac{C-C}{h}\] \[=\lim_{h \to 0} \frac{0}{h}\] \[=0\] 幂函数导数 \[f(x) = x^n(n \in R)\] \[\lim_{h \to 0} \frac{f(x+h)-f(x)}{h}\] \[=\lim_{h \to 0} \frac{(x+h)^n - x^n}{h}\] \[=\lim_{h \to 0} x^{n-1} \frac{(1+\frac{h}{x})^n - 1}{\frac{h}{x}}\] \[=\lim_{h \to 0} x^{n-1} \frac{n\frac{h}{x}}{\frac{h}{x}}\] \[=\lim_{h \to 0} nx^{n-1}\] \[=nx^{n-1}\] 正弦函数导数 \[f(x) = \sin x\] \[\lim_{h \to 0} \frac{f(x+h) - f(x)}{h}\] \[=\lim_{h \to 0} \frac{sin(x+h) - sin(x)}{h}\] \[=\lim_{h \to 0} \frac{2cos(x+\frac{h}{2})sin(\frac

洛必达法则

匿名 (未验证) 提交于 2019-12-03 00:22:01
洛必达法则是在一定条件下通过分子分母分别求导再求极限来确定未定式值的方法。 这种方法主要是在一定条件下通过分子分母分别求导再求极限来确定未定式的值. 在运用洛必达法则之前,首先要完成两项任务:一是分子分母的极限是否都等于零(或者无穷大);二是分子分母在限定的区域内是否分别可导;如果这两个条件都满足,接着求导并判断求导之后的极限是否存在:如果存在,直接得到答案;如果不存在,则说明此种未定式不可用洛必达法则来解决;如果不确定,即结果仍然为未定式,再在验证的基础上继续使用洛必达法则。 注意以下几种类型可用该法则求导: 1)0/0型不定式极限 2)∞/∞型不定式极限 3)其它可转换的情况: 0*∞ , 1 ∞ ,0 0 ,∞ 0 , ∞/∞ 文章来源: 洛必达法则

一、函数极限(1.1-1.46)

匿名 (未验证) 提交于 2019-12-03 00:17:01
# 2020张宇1000题・数一・刷题记录 ## 第一篇 高等数学 ### 第1章 极限、连续 #### 一、函数极限(1.1-1.46) 3. (0-0)/0型,拆分分母变成两个极限相加,左边提取往e^x-1~x上靠,然后左右两遍都可以直接等价替换了。 4. 方法一中的泰勒展开式,展开到第二项与第三项,结果算出来是不一样的。应该是分子无穷小的阶数要大于等于分母的阶数才行。 5. 另一种方法,一次求导之后再拆分。 6. 式子太复杂不可能用求导,而分子分母都是加减形式,所以要先判断分子分母情况,才能确定能否直接等价替换。 ${\begin{cases}{\lim \limits_{x \to 0}\dfrac{(3+tanx)^x}{3^x}=\dfrac{1}{1}=1}&分子相减等于0。 \\{\lim \limits_{x \to 0}\dfrac{3sin^2x}{x^3cos\dfrac{1}{x}}=\dfrac{3}{xcos\dfrac{1}{x}(0・有界)}=\infty \neq-1}&分母相加不等于0。 \end{cases}}$ 故分子相减不能用等价无穷小替换,换个思路,提取3的x次方,往e^x-1~x上靠。 而分母相加可以用直接用等价无穷小替换。 7. 别想太复杂,一次求导以后直接代值。 8. 积分式求导,被积分的式子里面的积分也要相应的替换。 9.

P1010 一元多项式求导

匿名 (未验证) 提交于 2019-12-03 00:14:01
设计函数求一元多项式的导数。(注: x n ( n为整数)的一阶导数为 n x n 1 。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。 0 0 。 输入样例:    3 4 -5 2 6 1 -2 0 输出样例:    12 3 -10 1 6 0    这道题没有想象中的那么难,就是简单的格式控制,以及乘法与减法运算。不过有几个坑点, 如下:   题目木有说明长度与限制,要用数组的话尽量开长一点(我记得1024都不够),记得用EOF来检测文件结束   题目加粗处说明了特殊情况,记得特判   老样子,题目与说明了输出格式,没事别瞎输出   由于过于简单,思路就简述一下啊。我没用数组存储,直接在线读入。边读入边处理。一次读两个数x,y ,将x*y后输出,再输出y-1,至于特殊情况,我用了一个标志位来控制。 最后贴一下代码:    1 /** 2 * @brief PAT_P1010 3 * @note IndexNumber处不要用-- 4 * @author 杨文蓁的小迷弟 5 */ 6 #include <stdio.h> 7 #include <stdlib.h> 8 #define MAX_SIZE

矩阵求导(二)

匿名 (未验证) 提交于 2019-12-03 00:08:02
本文承接上篇 https:// zhuanlan.zhihu.com/p/24 709748 ,来讲矩阵对矩阵的求导术。使用小写字母x表示标量,粗体小写字母 表示列向量,大写字母X表示矩阵。矩阵对矩阵的求导采用了向量化的思路,常应用于二阶方法求解优化问题。 首先来琢磨一下定义。矩阵对矩阵的导数,需要什么样的定义?第一,矩阵F(p×q)对矩阵X(m×n)的导数应包含所有mnpq个偏导数 ,从而不损失信息;第二,导数与微分有简明的联系,因为在计算导数和应用中需要这个联系;第三,导数有简明的从整体出发的算法。我们先定义向量 (p×1)对向量 (m×1)的导数 (m×p),有 ;再定义矩阵的(按列优先)向量化 (mn×1),并定义矩阵F对矩阵X的导数 (mn×pq)。导数与微分有联系 。几点说明如下: 按此定义,标量f对矩阵X(m×n)的导数 是mn×1向量,与上篇的定义不兼容,不过二者容易相互转换。为避免混淆,用记号 表示上篇定义的m×n矩阵,则有 。虽然本篇的技术可以用于标量对矩阵求导这种特殊情况,但使用上篇中的技术更方便。读者可以通过上篇中的算例试验两种方法的等价转换。 标量对矩阵的二阶导数,又称Hessian矩阵,定义为 (mn×mn),是对称矩阵。对向量 或矩阵 求导都可以得到Hessian矩阵,但从矩阵 出发更方便。 ,求导时矩阵被向量化,弊端是这在一定程度破坏了矩阵的结构