欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中幾種自動(dòng)微分庫(kù)解析

 更新時(shí)間:2019年08月29日 11:47:16   作者:AiFly  
這篇文章主要介紹了python中幾種自動(dòng)微分庫(kù)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

簡(jiǎn)單介紹下python的幾個(gè)自動(dòng)求導(dǎo)工具,tangent、autograd、sympy;

在各種機(jī)器學(xué)習(xí)、深度學(xué)習(xí)框架中都包含了自動(dòng)微分,微分主要有這么四種:手動(dòng)微分法、數(shù)值微分法、符號(hào)微分法、自動(dòng)微分法,這里分別簡(jiǎn)單走馬觀(guān)花(hello world式)的介紹下下面幾種微分框架;

sympy 強(qiáng)大的科學(xué)計(jì)算庫(kù),使用的是符號(hào)微分,通過(guò)生成符號(hào)表達(dá)式進(jìn)行求導(dǎo);求得的導(dǎo)數(shù)不一定為最簡(jiǎn)的,當(dāng)函數(shù)較為復(fù)雜時(shí)所生成的表達(dá)式樹(shù)異常復(fù)雜;

autograd自動(dòng)微分先將符號(hào)微分用于基本的算子,帶入數(shù)值并保存中間結(jié)果,后應(yīng)用于整個(gè)函數(shù);自動(dòng)微分本質(zhì)上就是圖計(jì)算,容易做很多優(yōu)化所以廣泛應(yīng)用于各種機(jī)器學(xué)習(xí)深度學(xué)習(xí)框架中;

tangent 為源到源(source-to-source)的自動(dòng)微分框架,在計(jì)算函數(shù)f微分時(shí)他通過(guò)生成新函數(shù)f_grad來(lái)計(jì)算該函數(shù)的微分,與目前所存在的所有自動(dòng)微分框架都有所不同;由于它是通過(guò)生成全新的函數(shù)來(lái)計(jì)算微分所以具有非常搞的可讀性、可調(diào)式性這也是官方所說(shuō)的與當(dāng)前自動(dòng)微分框架的重大不同;

sympy 求導(dǎo)

 def grad():
   # 定義表達(dá)式的變量名稱(chēng)
   x, y = symbols('x y')
   # 定義表達(dá)式
   z = x**2 +y**2
   # 計(jì)算z關(guān)于y對(duì)應(yīng)的偏導(dǎo)數(shù)
   return diff(z, y)
 func = grad()

輸出結(jié)果表達(dá)式z的導(dǎo)函數(shù)z‘=2*y

print(func) 

把y 等于6 帶入計(jì)算 結(jié)果 為12

print(func.evalf(subs ={'y':3}))

Autograd求偏導(dǎo)

 import autograd.numpy as np
 from autograd import grad
 #表達(dá)式 f(x,y)=x^2+3xy+y^2
 #df/dx = 2x+3y
 #df/dy = 3x+2y
 #x=1,y=2
 #df/dx=8
 #df/dy=7
 def fun(x, y):
  z=x**2+3*x*y+y**2
  return z
 fun_grad = grad(fun)
 fun_grad(2.,1.)

輸出:7.0

tangent求導(dǎo)

 import tangent
 def fun(x, y):
  z=x**2+3*x*y+y**2
  return z

默認(rèn)為求z關(guān)于x的偏導(dǎo)數(shù)

dy_dx = tangent.grad(fun)

輸出偏導(dǎo)數(shù)值為 8 ,z' = 2 * x,此處x傳任何值都是一樣的

df(4, y=1)

可通過(guò)使用wrt參數(shù)指定求關(guān)于某個(gè)參數(shù)的偏導(dǎo)數(shù),下面為求z關(guān)于y的偏導(dǎo)數(shù)

df = tangent.grad(funs, wrt=([1]))

輸出值為10 ,z' = 2 *y,此處x傳任何值都是一樣的

df(x=0, y=5)

上面說(shuō)了那么多也沒(méi)體現(xiàn)出tangent的核心:源到源(source-to-source)

在生成導(dǎo)函數(shù)的時(shí)候加入verbose=1參數(shù),即可看到tangent為我們生成的用于計(jì)算導(dǎo)數(shù)的函數(shù),默認(rèn)情況下該值為0所以我們沒(méi)感覺(jué)到tangent的求導(dǎo)與別的自動(dòng)微分框架有什么區(qū)別;

 def df(x):
   z = x**2
   return z
 df = tangent.grad(df, verbose=1)
 df(x=2)

在執(zhí)行完上述代碼后,我們看到了tangent為我們所生成用于求導(dǎo)數(shù)的函數(shù):

 def ddfdx(x, bz=1.0):
  z = x ** 2
  assert tangent.shapes_match(z, bz), 'Shape mismatch between return value (%s) and seed derivative (%s)' % (numpy.shape(z), numpy.shape(bz))
 # Grad of: z = x ** 2
 _bx = 2 * x * bz
 bx = _bx
 return bx

ddfdx函數(shù)就是所生成的函數(shù),從中我們也可以看到表達(dá)式z的導(dǎo)函數(shù)z'=2 * x,tangent就是通過(guò)執(zhí)行該函數(shù)用于求得導(dǎo)數(shù)的;

sympy 中的自動(dòng)微分只是它強(qiáng)大的功能之一,autograd 從名字也可知它就是為了自動(dòng)微分而生的,tangent初出茅廬2017年底Google才發(fā)布的自動(dòng)微分方法也比較新穎,從17年發(fā)v0.1.8版本后也沒(méi)見(jiàn)發(fā)版,源碼更新也不夠活躍;sympy、autograd比較成熟,tangent還有待觀(guān)察;

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中變量的作用域詳解

    Python中變量的作用域詳解

    大家好,本篇文章主要講的是Python中變量的作用域詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-01-01
  • 解讀Python條件判斷邏輯演繹優(yōu)化編程思維

    解讀Python條件判斷邏輯演繹優(yōu)化編程思維

    條件判斷是編程中的重要概念,Python語(yǔ)言提供了多種方式來(lái)進(jìn)行條件判斷,例如if、else、elif等,本文將深入探討Python中條件判斷的靈活應(yīng)用,結(jié)合豐富的示例代碼展示其全面性
    2024-01-01
  • Python基于pandas實(shí)現(xiàn)json格式轉(zhuǎn)換成dataframe的方法

    Python基于pandas實(shí)現(xiàn)json格式轉(zhuǎn)換成dataframe的方法

    這篇文章主要介紹了Python基于pandas實(shí)現(xiàn)json格式轉(zhuǎn)換成dataframe的方法,結(jié)合實(shí)例形式分析了Python使用pandas模塊操作json數(shù)據(jù)轉(zhuǎn)換成dataframe的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • Pandas數(shù)據(jù)類(lèi)型轉(zhuǎn)換df.astype()及數(shù)據(jù)類(lèi)型查看df.dtypes的使用

    Pandas數(shù)據(jù)類(lèi)型轉(zhuǎn)換df.astype()及數(shù)據(jù)類(lèi)型查看df.dtypes的使用

    Python,numpy都有自己的一套數(shù)據(jù)格式,本文主要介紹了Pandas數(shù)據(jù)類(lèi)型轉(zhuǎn)換df.astype()及數(shù)據(jù)類(lèi)型查看df.dtypes的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • pandas 使用apply同時(shí)處理兩列數(shù)據(jù)的方法

    pandas 使用apply同時(shí)處理兩列數(shù)據(jù)的方法

    下面小編就為大家分享一篇pandas 使用apply同時(shí)處理兩列數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例

    Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • jupyter 添加不同內(nèi)核的操作

    jupyter 添加不同內(nèi)核的操作

    這篇文章主要介紹了jupyter 添加不同內(nèi)核的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 利用Vscode進(jìn)行Python開(kāi)發(fā)環(huán)境配置的步驟

    利用Vscode進(jìn)行Python開(kāi)發(fā)環(huán)境配置的步驟

    這篇文章主要給大家介紹了關(guān)于如何利用Vscode進(jìn)行Python開(kāi)發(fā)環(huán)境配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯(cuò)誤

    python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯(cuò)誤

    這篇文章主要介紹了python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Jupyter Notebook輸出矢量圖實(shí)例

    Jupyter Notebook輸出矢量圖實(shí)例

    這篇文章主要介紹了Jupyter Notebook輸出矢量圖實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04

最新評(píng)論