tensorflow2.0求梯度預設是eager模式,每行**順序執行,沒有了構建圖的過程(也取消了control_dependency的用法),要乙個上下文管理器(context manager)來連線需要計算梯度的函式和變數,方便求解同時也提公升效率。
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
x = tf.
ones((
2,2)
) #tf.
tensor([
[1.1.]
[1.1.]
], shape=(2
,2), dtype=float32)
with tf.
gradienttape
(persistent=true)
as t:
t.watch
(x) # 確保tensor被tape追蹤
y = tf.
reduce_sum
(x) # 降維度求和 y=x11+x12+x21+x22
z = tf.
multiply
(y,y) # z=y*y
# 計算z關於x的梯度
dz_dy = t.
gradient
(z, y) #dz/dy=
2ydz_dx = t.
gradient
(z, x) #dz/dx=dz/dy * dy/dx =
2y *([
[d(x11+x12+x21+x22)
/dx11 d
(x11+x12+x21+x22)
/dx12][d
(x11+x12+x21+x22)
/dx21 d
(x11+x12+x21+x22)
/dx22]])
print
(dz_dy) # tf.
tensor
(8.0
, shape=()
, dtype=float32)
print
(dz_dx) #tf.
tensor([
[8.8.]
[8.8.]
], shape=(2
,2), dtype=float32)
gradienttape上下文管理器在計算梯度的同時也會保持梯度,所以gradienttape也可以實現高階梯度計算
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
x = tf.
variable
(1.0
)#一定要是變數,不能是constant
with tf.
gradienttape()
as t:
with tf.
gradienttape()
as tt:
tt.watch
(x) y = x*x*x
dy_dx = tt.
gradient
(y, x)
print
(dy_dx) #tf.
tensor
(3.0
, shape=()
, dtype=float32)
t.watch
(dy_dx)
# 計算y關於x的梯度的二階倒數
dy2_d2x = t.
gradient
(dy_dx, x)
print
(dy2_d2x) # tf.
tensor
(6.0
, shape=()
, dtype=float32)
def f
(x, y)
: output =
2.0 # 根據y的迴圈
for i in
range
(y):
# 根據每一項進行判斷
if i>
1 and i<5:
output = tf.
multiply
(output, x)
return output # y=
2,output=
2*x;y=
3,output=
2*x*x;y=
4,output=
2*x*x;y>=
5,output=
2*x*x*x;
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
)) # 6
*x*x=
24,tf.
tensor
(24.0
, shape=()
, dtype=float32)
print
(grad
(x,5
)) # 6
*x*x=
24,tf.
tensor
(24.0
, shape=()
, dtype=float32)
print
(grad
(x,4
)) # 4
*x =
8,tf.
tensor
(8.0
, shape=()
, dtype=float32)
tensorflow2 0由入門到放棄(持續更新)
一 回歸 使用tf.keras訓練模型 1 在jupyter notebook環境中執行程式 import pandas as pd pandas為資料處理工具 data pd.read csv eee.csv 在建立的notebook檔案當前目錄下建立csv資料檔案,並匯入。圖中csv檔案為自己簡...
tensorflow2 0視訊記憶體設定
遇到乙個問題 新買顯示卡視訊記憶體8g但是tensorflow執行的時候介面顯示只有約6.3g的視訊記憶體可用,如下圖 即限制了我的視訊記憶體,具體原因為什麼我也不知道,但原來的視訊記憶體小一些的顯示卡就沒有這個問題。目前的解決辦法是 官方文件解決 然後對應的中文部落格 總結一下,就是下面的兩個辦法...
Tensorflow2 0 啟用函式
常用啟用函式及對應特點 神經網路結構的輸出為所有輸入的加權和,這導致整個神經網路是乙個線性模型。而線性模型不能解決異或問題,且面對多分類問題,也顯得束手無策。所以為了解決非線性的分類或回歸問題,啟用函式必須是非線性函式。神經網路中啟用函式的主要作用是提供網路的非線性建模能力。這是因為反向傳播演算法就...