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

2022-09-29 18:27:09 字數 2989 閱讀 1180

一. valid卷積的梯度

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

)# 針對未知變數的導數的www.cppcns.com方向計算

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,'valid')

session=tf.session()

print(session.run(partial_sigma_k))

[[[[-37.]]

[[-47.]]]

[[[-67.]]

[[-77.]]]]

二. same卷積的梯度

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 卷積的梯度反向傳播過程

本文位址:

Tensorflow 卷積的梯度反向傳播

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

Tensorflow 卷積的梯度反向傳播

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

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...