我們分兩種不同的情況討論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...