TensorFlow2 0教程28 自動求導

2022-06-09 23:54:16 字數 2286 閱讀 9762

這節我們會介紹使用tensorflow2自動求導的方法。

一、gradient tapes

tensorflow 提供tf.gradienttape api來實現自動求導功能。只要在tf.gradienttape()上下文中執行的操作,都會被記錄與「tape」中,然後tensorflow使用反向自動微分來計算相關操作的梯度。

x = tf.ones((2,2))

# 需要計算梯度的操作

with tf.gradienttape() as t:

t.watch(x)

y = tf.reduce_sum(x)

z = tf.multiply(y,y)

# 計算z關於x的梯度

dz_dx = t.gradient(z, x)

print(dz_dx)

tf.tensor(

[[8. 8.]

[8. 8.]], shape=(2, 2), dtype=float32)

也可以輸出對中間變數的導數

# 梯度求導只能每個tape一次

with tf.gradienttape() as t:

t.watch(x)

y = tf.reduce_sum(x)

z = tf.multiply(y,y)

dz_dy = t.gradient(z, y)

print(dz_dy)

tf.tensor(8.0, shape=(), dtype=float32)

預設情況下gradienttape的資源會在執行tf.gradienttape()後被釋放。如果想多次計算梯度,需要建立乙個持久的gradienttape。

with tf.gradienttape(persistent=true) as t:

t.watch(x)

y = tf.reduce_sum(x)

z = tf.multiply(y, y)

dz_dx = t.gradient(z,x)

print(dz_dx)

dz_dy = t.gradient(z, y)

print(dz_dy)

tf.tensor(

[[8. 8.]

[8. 8.]], shape=(2, 2), dtype=float32)

tf.tensor(8.0, shape=(), dtype=float32)

二、記錄控制流

因為tapes記錄了整個操作,所以即使過程中存在python控制流(如if, while),梯度求導也能正常處理。

def f(x, y):無錫**多少錢

output = 1.0

# 根據y的迴圈

for i in range(y):

# 根據每一項進行判斷

if i> 1 and i<5:

output = tf.multiply(output, x)

return output

def grad(x, y):

with tf.gradienttape() as t:

t.watch(x)

out = f(x, y)

# 返回梯度

return t.gradient(out, x)

# x為固定值

x = tf.convert_to_tensor(2.0)

print(grad(x, 6))

print(grad(x, 5))

print(grad(x, 4))

tf.tensor(12.0, shape=(), dtype=float32)

tf.tensor(12.0, shape=(), dtype=float32)

tf.tensor(4.0, shape=(), dtype=float32)

三、高階梯度

gradienttape上下文管理器在計算梯度的同時也會保持梯度,所以gradienttape也可以實現高階梯度計算,

x = tf.variable(1.0)

with tf.gradienttape() as t1:

with tf.gradienttape() as t2:

y = x * x * x

dy_dx = t2.gradient(y, x)

print(dy_dx)

d2y_d2x = t1.gradient(dy_dx, x)

print(d2y_d2x)

tf.tensor(3.0, shape=(), dtype=float32)

tf.tensor(6.0, shape=(), dtype=float32)

tensorflow2 0 建立張量2

建立全0全1張量 a tf.ones shape 3,5 print a a b tf.ones 6 print b b c tf.zeros 2,3 dtype tf.int32 print c c print 建立元素值都相同的張量 a tf.fill 3,4 3.9 print 全相同張量fi...

tensorflow2 0視訊記憶體設定

遇到乙個問題 新買顯示卡視訊記憶體8g但是tensorflow執行的時候介面顯示只有約6.3g的視訊記憶體可用,如下圖 即限制了我的視訊記憶體,具體原因為什麼我也不知道,但原來的視訊記憶體小一些的顯示卡就沒有這個問題。目前的解決辦法是 官方文件解決 然後對應的中文部落格 總結一下,就是下面的兩個辦法...

Tensorflow2 0 啟用函式

常用啟用函式及對應特點 神經網路結構的輸出為所有輸入的加權和,這導致整個神經網路是乙個線性模型。而線性模型不能解決異或問題,且面對多分類問題,也顯得束手無策。所以為了解決非線性的分類或回歸問題,啟用函式必須是非線性函式。神經網路中啟用函式的主要作用是提供網路的非線性建模能力。這是因為反向傳播演算法就...