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...