2020 3 25學習筆記 函式求導,

2021-10-04 09:28:35 字數 1863 閱讀 2387

主要是利用函式近似求導的公式編寫**。

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 復合函式的求導 鏈式法則 設 證明 ...