Tensorflow 卷積的梯度反向傳播

2022-03-31 07:35:36 字數 3526 閱讀 5290

我們分兩種不同的情況討論valid卷積的梯度:第一種情況,在已知卷積核的情況下,對未知張量求導(即對張量中每乙個變數求導);第二種情況,在已知張量的情況下,對未知卷積核求導(即對卷積核中每乙個變數求導)

1.已知卷積核,對未知張量求導

我們用乙個簡單的例子理解valid卷積的梯度反向傳播。假設有乙個3x3的未知張量x,以及已知的2x2的卷積核k

tensorflow提供函式tf.nn.conv2d_backprop_input實現了valid卷積中對未知變數的求導,以上示例對應的**如下:

import tensorflow as tf

# 卷積核

kernel=tf.constant([[

[[3]

],[[

4]]]

,[[[

5]],

[[6]

]]],tf.float32

)# 某一函式針對sigma的導數

out=tf.constant([[

[[-1

],[1

]],[

[2],

[-2]

]]],tf.float32

)# 針對未知變數的導數的方向計算

inputvalue=tf.nn.conv2d_backprop_input((1

,3,3

,1),kernel,out,[1

,1,1

,1],

'valid'

)session=tf.session(

)print

(session.run(inputvalue)

)

[[[[ -3.]

[ -1.]

[ 4.]]

[[ 1.]

[ 1.]

[ -2.]]

[[ 10.]

[ 2.]

[-12.]]]]

2.已知輸入張量,對未知卷積核求導

假設已知3行3列的張量x和未知的2行2列的卷積核k

tensorflow提供函式tf.nn.conv2d_backprop_filter實現valid卷積對未知卷積核的求導,以上示例的**如下:

import tensorflow as tf

# 輸入張量

x=tf.constant([[

[[1]

,[2]

,[3]

],[[

4],[

5],[

6]],

[[7]

,[8]

,[9]

]]],tf.float32

)# 某乙個函式f對sigma的導數

partial_sigma=tf.constant([[

[[-1

],[-

2]],

[[-3

],[-

4]]]

],tf.float32

)# 某乙個函式f對卷積核k的導數

partial_sigma_k=tf.nn.conv2d_backprop_filter(x,(2

,2,1

,1),partial_sigma,[1

,1,1

,1],

'valid'

)session=tf.session(

)print

(session.run(partial_sigma_k)

)

[[[[-37.]]

[[-47.]]]

[[[-67.]]

[[-77.]]]]

1.已知卷積核,對輸入張量求導

假設有3行3列的已知張量x,2行2列的未知卷積核k

import tensorflow as tf

# 卷積核

kernel=tf.constant([[

[[3]

],[[

4]]]

,[[[

5]],

[[6]

]]],tf.float32

)# 某一函式針對sigma的導數

partial_sigma=tf.constant([[

[[-1

],[1

],[3

]],[

[2],

[-2]

,[-4

]],[

[-3]

,[4]

,[1]

]]],tf.float32

)# 針對未知變數的導數的方向計算

partial_x=tf.nn.conv2d_backprop_input((1

,3,3

,1),kernel,partial_sigma,[1

,1,1

,1],

'same'

)session=tf.session(

)print

(session.run(inputvalue)

)

[[[[ -3.]

[ -1.]

[ 4.]]

[[ 1.]

[ 1.]

[ -2.]]

[[ 10.]

[ 2.]

[-12.]]]]

2.已知輸入張量,對未知卷積核求導

假設已知3行3列的張量x和未知的2行2列的卷積核k

import tensorflow as tf

# 卷積核

x=tf.constant([[

[[1]

,[2]

,[3]

],[[

4],[

5],[

6]],

[[7]

,[8]

,[9]

]]],tf.float32

)# 某一函式針對sigma的導數

partial_sigma=tf.constant([[

[[-1

],[-

2],[

1]],

[[-3

],[-

4],[

2]],

[[-2

],[1

],[3

]]]]

,tf.float32

)# 針對未知變數的導數的方向計算

partial_sigma_k=tf.nn.conv2d_backprop_filter(x,(2

,2,1

,1),partial_sigma,[1

,1,1

,1],

'same'

)session=tf.session(

)print

(session.run(partial_sigma_k)

)

[[[[ -1.]]

[[-54.]]]

[[[-43.]]

[[-77.]]]]

Tensorflow 卷積的梯度反向傳播

我們分兩種不同的情況討論valid卷積的梯度 第一種情況,在已知卷積核的情況下,對未知張量求導 即對張量中每乙個變數求導 第二種情況,在已知張量的情況下,對未知卷積核求導 即對卷積核中每乙個變數求導 1.已知卷積核,對未知張量求導 我們用乙個簡單的例子理解valid卷積的梯度反向傳播。假設有乙個3x...

Tensorflow 卷積的梯度反向傳播過程

一.valid卷積的梯度 我們分兩種不同的情況討論valid卷積的梯度 第一種情況,在已知卷積核的情況下,對未知張量求導 即對張量中每乙個變數求導 第二種情況,在已知張量的情況下,對未知卷積核求導 即對卷積核中每乙個變數求導 1.已知卷積核,對未知張量求導 我們用乙個簡單的例子理解valid卷積的梯...

tensorflow梯度下降

import tensorflow as tf model parameters w tf.variable 0 dtype tf.float32 w初值及型別 b tf.variable 0 dtype tf.float32 b初值及型別 model input and output x tf.p...