Tensorflow2 自動求導機制

2021-10-23 05:28:56 字數 2554 閱讀 4591

tensorflow 引入了 tf.gradienttape() 這個 「求導記錄器」 來實現自動求導

如何使用 tf.gradienttape() 計算函式 y(x) = x^2 在 x = 3 時的導數:

import tensorflow as tf

x = tf.variable(initial_value=3.

)#初始化乙個tensor x,因求x=3的導數,因此初值為3

with tf.gradienttape(

)as tape:

# 在 tf.gradienttape() 的上下文內,所有計算步驟都會被記錄以用於求導

y = tf.square(x)

#在with上下文內 寫計算式

#with上下文之外

y_grad = tape.gradient(y, x)

# 計算y關於x的導數

print

([y, y_grad]

)

只要進入了 with tf.gradienttape() as tape 的上下文環境,則在該環境中計算步驟都會被自動記錄。比如在上面的示例中,計算步驟 y = tf.square(x) 即被自動記錄。離開上下文環境後,記錄將停止,但記錄器 tape 依然可用,因此可以通過 y_grad = tape.gradient(y, x) 求張量 y 對變數 x 的導數。

以下**展示了如何使用 tf.gradienttape() 計算函式

x = tf.constant([[

1.,2

.],[

3.,4

.]])

#shape(2, 2)

y = tf.constant([[

1.],

[2.]

])#shape(2, 1)

w = tf.variable(initial_value=[[

1.],

[2.]

])#shape(2, 1)

b = tf.variable(initial_value=1.

)#shape(1) 矩陣加法的時候用了broadcast機制

with tf.gradienttape(

)as tape:

l =0.5* tf.reduce_sum(tf.square(tf.matmul(x, w)

+ b - y)

)

w_grad, b_grad = tape.gradient(l,

[w, b]

)# 計算l(w, b)關於w, b的偏導數

print

([l.numpy(

), w_grad.numpy(

), b_grad.numpy()]

)

實現 線性回歸

使用 tape.gradient(ys, xs) 自動計算梯度;  

#單純求導數,返回值是乙個tensor。ys一般是loss,xs一般是需要更新的variables。ys分別對variables中每乙個引數求導數

#grads_and_vars=[(grad, x)] 輸入引數(gradient,variable) 每乙個grad和variable以元組形式輸入 一般 grads_and_vars=zip(grads, variables)

import tensorflow as tf

#設定隨機資料

x = tf.

range(10

)y = tf.

range(10

,)x = tf.cast(x, dtype=tf.float32)

#轉為float

y =2

* tf.cast(y, dtype=tf.float32)

+ tf.random.normal([10

,])#增加隨機擾動[10,]表示shape

#引數初始化

w = tf.variable(initial_value=0.

) b = tf.variable(initial_value=0.

)#定義優化器

optimizer = tf.keras.optimizers.adam(lr=

0.05

)#需要更新的引數

variables =

[w, b]

for _ in tf.

range

(500):

with tf.gradienttape(

)as tape:

l = tf.reduce_mean(tf.square(tf.multiply(w,x)

+ b - y)

)#loss

l_gradx = tape.gradient(l, variables)

#針對loss和需要更新引數求梯度

zip(l_gradx, variables)

)#針對(梯度和引數) 進行引數更新

tf.print

([l]

)#列印loss

tensorflow2的資料載入

對於一些小型常用的資料集,tensorflow有相關的api可以呼叫 keras.datasets 經典資料集 1 boston housing 波士頓房價 2 mnist fasion mnist 手寫數字集 時髦品集 3 cifar10 100 物象分類 4 imdb 電影評價 使用 tf.da...

tensorflow2建立卷積核Conv2D函式

使用conv2d可以建立乙個卷積核來對輸入資料進行卷積計算,然後輸出結果,其建立的卷積核可以處理二維資料。依次類推,conv1d可以用於處理一維資料,conv3d可以用於處理三維資料。在進行神經層級整合時,如果使用該層作為第一層級,則需要配置input shape引數。在使用conv2d時,需要配置...

tensorflow2初始程式 計算a b

tensorflow2在去年剛剛發布了,大號時機正是學習tensorflow2的寶貴之時,這裡使用tensorflow2實現乙個入門級別的任務 計算a b的結果 import tensorflow as tf import os os.environ tf cpp min log level 3 a...