tf.GradientTape梯度求解利器的示例分析

這篇文章主要介紹tf.GradientTape梯度求解利器的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

我們提供的服務有:網(wǎng)站建設、成都網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、遵義ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的遵義網(wǎng)站制作公司

tf.GradientTape定義在tensorflow/python/eager/backprop.py文件中,從文件路徑也可以大概看出,GradientTape是eager模式下計算梯度用的,而eager模式(eager模式的具體介紹請參考文末鏈接)是TensorFlow 2.0的默認模式,因此tf.GradientTape是官方大力推薦的用法。下面就來具體介紹GradientTape的原理和使用。

Tape在英文中是膠帶,磁帶的含義,用在這里是由于eager模式帶來的影響。在TensorFlow 1.x靜態(tài)圖時代,我們知道每個靜態(tài)圖都有兩部分,一部分是前向圖,另一部分是反向圖。反向圖就是用來計算梯度的,用在整個訓練過程中。而TensorFlow 2.0默認是eager模式,每行代碼順序執(zhí)行,沒有了構(gòu)建圖的過程(也取消了control_dependency的用法)。但也不能每行都計算一下梯度吧?計算量太大,也沒必要。因此,需要一個上下文管理器(context manager)來連接需要計算梯度的函數(shù)和變量,方便求解同時也提升效率。

舉個例子:計算y=x^2在x = 3時的導數(shù):

x = tf.constant(3.0)
with tf.GradientTape() as g:
  g.watch(x)
  y = x * x


# y’ = 2*x = 2*3 = 6

dy_dx = g.gradient(y, x) 

例子中的watch函數(shù)把需要計算梯度的變量x加進來了。GradientTape默認只監(jiān)控由tf.Variable創(chuàng)建的traiable=True屬性(默認)的變量。上面例子中的x是constant,因此計算梯度需要增加g.watch(x)函數(shù)。當然,也可以設置不自動監(jiān)控可訓練變量,完全由自己指定,設置watch_accessed_variables=False就行了(一般用不到)。

GradientTape也可以嵌套多層用來計算高階導數(shù),例如:

x = tf.constant(3.0)
with tf.GradientTape() as g:
  g.watch(x)
  with tf.GradientTape() as gg:
    gg.watch(x)
    y = x * x

  # y’ = 2*x = 2*3 =6   

  dy_dx = gg.gradient(y, x)

# y’’ = 2    
d2y_dx2 = g.gradient(dy_dx, x) 

另外,默認情況下GradientTape的資源在調(diào)用gradient函數(shù)后就被釋放,再次調(diào)用就無法計算了。所以如果需要多次計算梯度,需要開啟persistent=True屬性,例如:

x = tf.constant(3.0)
with tf.GradientTape(persistent=True) as g:
  g.watch(x)
  y = x * x
  z = y * y

# z = y^2 = x^4, z’ = 4*x^3 = 4*3^3

dz_dx = g.gradient(z, x)  

# y’ = 2*x = 2*3 = 6

dy_dx = g.gradient(y, x)  

del g  # 刪除這個上下文膠帶

最后,一般在網(wǎng)絡中使用時,不需要顯式調(diào)用watch函數(shù),使用默認設置,GradientTape會監(jiān)控可訓練變量,例如:

with tf.GradientTape() as tape:
    predictions = model(images)
    loss = loss_object(labels, predictions)
gradients = tape.gradient(loss, model.trainable_variables)

這樣即可計算出所有可訓練變量的梯度,然后進行下一步的更新。對于TensorFlow 2.0,推薦大家使用這種方式計算梯度,并且可以在eager模式下查看具體的梯度值。

以上是“tf.GradientTape梯度求解利器的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁題目:tf.GradientTape梯度求解利器的示例分析
網(wǎng)站網(wǎng)址:http://bm7419.com/article6/gijoog.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、搜索引擎優(yōu)化品牌網(wǎng)站建設、自適應網(wǎng)站外貿(mào)網(wǎng)站建設網(wǎng)站設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設