主要是利用函式近似求導的公式編寫**。
def
f(x)
:return3.
* x **2+
2.* x -
1def
(f, x, eps=1e-
3):return
(f(x + eps)
- f(x - eps))/
(2* eps)
print1.
))defg
(x1, x2)
:return
(x1 +5.
)*(x2 **2)
def(g, x1, x2, eps=1e-
3):lambda x: g(x, x2)
, x1, eps)
lambda x: g(x1, x)
, x2, eps)
return dg_x1, dg_x2
print2.
,3.)
# 多維函式求導其實也就是一維求導(偏導數),只需將比變數以為的引數看作實數。關鍵是理解lambda這種函式簡潔的寫法。
但是在tensorflow中已經自帶了求導的api,但是注意使用格式,傳入的需是變數。
import tensorflow as tf
x1 = tf.variable(2.
)x2 = tf.variable(3.
)with tf.gradienttape(
)as tape:
z = g(x1, x2)
dz_x1 = tape.gradient(z. x1)
# 因為求導機制比較消耗計算機記憶體,tf.gradienttape()不做任何引數處理時只能做一次求導,然後立馬將記憶體釋放掉,不能再進行求導,若要進行多次求導,需加引數。
with tf.gradienttape(persisitent=
true
)as tape:
z = g(x1, x2)
dz_x1 = tape.gradietn(z, x1)
dz_x2 = tape.gradient(z, x2)
dz_x1, dz_x2 = tape.gradient(z,
[x1, x2]
)# 二階求導,利用巢狀的模式
with tf.gradienttape(persistent=
true
)as outer_tape:
with tf.gradienttape(persistent=
true
)as inner_tape:
z = g(x1, x2)
inner_grads = inner_tape.gradient(z,
[x1, x2]
)# 注意返回的是列表
outer_grads =
[outer_tape.gradient(inner_grad,
[x1, x2]
)for inner_grad in inner_grads]
# 這裡返回四個數。
# 接下來自己模擬乙個簡單的梯度下降
lr =1e-
2x0 = tf.variable(1.
)for
iter
inrange(10
):with tf.gradienttape(
)as tape:
z = f(x0)
dz_dx0 = tape.gradient(z, x0)
x0.assign_sub(lr * dz_dx0)
print
('%d ===> %.3f'%(
iter
, f(x0)
))
逆函式求導公式 反函式求導公式
反函式的導數是原函式導數的倒數。求y arcsinx的導函式,反函式的導數便是原函式導數的倒數。首先,函式y arcsinx的反函式為x siny,因此 y 1 sin y 1 cosy,由於x siny,因此cosy 1 x2,因此y 1 1 x2。反函式性質 1 函式存在反函式的充要條件是,函式...
SICP學習筆記 2 3 2 例項 符號求導
練習2.56 define deriv exp var cond number?exp 0 variable?exp if same variable?exp var 1 0 sum?exp make sum deriv addend exp var deriv augend exp var pro...
復合函式求導定義證明 復合函式求導公式如何證明?
長篇符咒預警 慎點!回答本題,純粹是因為這題勾起了我由來已久欲一吐為快之槽 請原諒我的無聊。陶哲軒的 分析 一書中,居然把這個證明留成了一道課後習題 還要求用他書中的體系 最 老土 的牛頓逼近法 去證 真是要多特麼蛋疼有多特麼蛋疼。簡直喪病啊!定理10.1.15 復合函式的求導 鏈式法則 設 證明 ...