欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python中幾種自動微分庫解析

系統 1817 0

前言

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

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

sympy 強大的科學計算庫,使用的是符號微分,通過生成符號表達式進行求導;求得的導數不一定為最簡的,當函數較為復雜時所生成的表達式樹異常復雜;

autograd自動微分先將符號微分用于基本的算子,帶入數值并保存中間結果,后應用于整個函數;自動微分本質上就是圖計算,容易做很多優化所以廣泛應用于各種機器學習深度學習框架中;

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

sympy 求導

            
 def grad():
   # 定義表達式的變量名稱
   x, y = symbols('x y')
   # 定義表達式
   z = x**2 +y**2
   # 計算z關于y對應的偏導數
   return diff(z, y)
 func = grad()
          

輸出結果表達式z的導函數z‘=2*y

            
print(func) 
          

把y 等于6 帶入計算 結果 為12

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

Autograd求偏導

            
 import autograd.numpy as np
 from autograd import grad
 #表達式 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求導

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

默認為求z關于x的偏導數

            
dy_dx = tangent.grad(fun)
          

輸出偏導數值為 8 ,z' = 2 * x,此處x傳任何值都是一樣的

            
df(4, y=1)
          

可通過使用wrt參數指定求關于某個參數的偏導數,下面為求z關于y的偏導數

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

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

            
df(x=0, y=5)
          

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

在生成導函數的時候加入verbose=1參數,即可看到tangent為我們生成的用于計算導數的函數,默認情況下該值為0所以我們沒感覺到tangent的求導與別的自動微分框架有什么區別;

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

在執行完上述代碼后,我們看到了tangent為我們所生成用于求導數的函數:

            
 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函數就是所生成的函數,從中我們也可以看到表達式z的導函數z'=2 * x,tangent就是通過執行該函數用于求得導數的;

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久国产精品一区二区三区 | 国产视频资源在线观看 | 国产免费久久精品44 | 亚洲区欧美中文字幕久久 | 热久久国产 | 不卡一区二区三区四区 | 999jjj在线播放| 这里只有精品视频 | 婷婷色香五月激情综合2020 | 欧美大片一区 | 成人在线视频免费 | 2021年无线乱码播放高清完整 | 欧美日韩中文字幕在线 | 九九51精品国产免费看 | 亚洲欧美久久婷婷爱综合一区天堂 | 久久综合丝袜长腿丝袜 | 99在线播放视频 | 国产日韩久久久精品影院首页 | 2022国产成人精彩在线视频 | 久久精品99 | 中文字幕一区二区三区四区 | 欧美精品亚洲一区二区在线播放 | 狠狠影院| 福利视频在线免费观看 | 97超级碰碰碰在线播放 | 色爱综合区五月小说 | 九九九久久国产免费 | 欧美精品久久久久久久免费观看 | 天天精品视频免费观看 | 亚洲精品第一国产综合高清 | 在线久草 | 中文字幕一区二区三区四区五区 | 欧美精品久久久 | 91精品天美精东蜜桃传媒入口 | 成人综合久久精品色婷婷 | 91精品国产高清久久久久久91 | 国产一区二区精品在线观看 | 五月伊人婷婷 | 性色视频在线 | 五月伊人网 | 黄页成人免费网站 |