真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python中有哪些自動微分庫-創(chuàng)新互聯(lián)

這篇文章主要介紹python中有哪些自動微分庫,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司一直秉承“誠信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!為您提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)頁設(shè)計(jì)、重慶小程序開發(fā)、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、App定制開發(fā)是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來見證!

前言

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

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

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

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

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

sympy 求導(dǎo)

 def grad():
   # 定義表達(dá)式的變量名稱
   x, y = symbols('x y')
   # 定義表達(dá)式
   z = x**2 +y**2
   # 計(jì)算z關(guān)于y對應(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)

可通過使用wrt參數(shù)指定求關(guān)于某個參數(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)

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

在生成導(dǎo)函數(shù)的時候加入verbose=1參數(shù),即可看到tangent為我們生成的用于計(jì)算導(dǎo)數(shù)的函數(shù),默認(rèn)情況下該值為0所以我們沒感覺到tangent的求導(dǎo)與別的自動微分框架有什么區(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就是通過執(zhí)行該函數(shù)用于求得導(dǎo)數(shù)的;

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

以上是“python中有哪些自動微分庫”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享名稱:python中有哪些自動微分庫-創(chuàng)新互聯(lián)
鏈接URL:http://weahome.cn/article/icsjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部