TensorFlow2 0入門筆記 3

2021-10-06 10:28:18 字數 3108 閱讀 5769

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 啟用函式

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