TensorFlow 卷積con2d函式的使用

2021-09-25 10:04:36 字數 2604 閱讀 9469

tensorflow 提供了一系列能夠進行卷積運算的函式,這裡介紹一下 conv2d() 函式 。

conv2d() 函式的原型 : 

# conv2d(input,filter,strides,padding,use_cudnn_on_gpu,data_format,name)
input 的形狀:[batch, in_height ,in_width, in_channels]  , 長度為4 的列表.

batch:樣本的數量 

in_height:每個樣本的行數 , 或者影象的高

in_width:每個樣本的列數  , 或者影象的寬

in_channels:每個樣本的通道數,如果是rgb影象就是3  ,如果是黑白影象 就是 1 . 

filter 的形狀:[filter_height, filter_width, in_channels, out_channels] 

filter_height:卷積核的高 

filter_width:卷積核的寬 

in_channels:輸入的通道數 

out_channels:輸出的通道數 

[1,stride_h,stride_w,1]步長,即卷積核每次移動的步長

(列表的第乙個數字和第四個數字一般為1 ,這是因為卷積層的步長支隊矩陣的長和寬有效)

padding:填充模式取值,只能為」same」或」valid」

當設定 padding為 'same'時表示新增 0 填充 ,為 'valid' 時表示不新增0填充

下面通過乙個程式實現乙個卷積層的前向傳播過程. 21

2-100

-1300

-21-14

0-20-3

4000

000

(填充0 之後)  -14

21左邊是輸入資料, 右邊是卷積核 (2x2)

import tensorflow as tf

import numpy as np

m = np.array([[[2],[1],[2],[-1]], [[0],[-1],[3],[0]]

,[[2],[1],[-1],[4]],[[-2],[0],[-3],[4]]],dtype=np.float32).reshape(1,4,4,1)

print(m ,m.shape)

# filter的形狀:[filter_height, filter_width, in_channels, out_channels]

filter_weight = tf.get_variable("weights",[2,2,1,1],initializer=tf.constant_initializer([[-1,4],[2,1]]))

biases = tf.get_variable("biases",[1],initializer=tf.constant_initializer(1))

x = tf.placeholder(tf.float32,[1,none,none,1])

conv = tf.nn.conv2d(x,filter_weight,strides=[1,1,1,1],padding="same")

add_bias = tf.nn.bias_add(conv,biases)

init_op = tf.global_variables_initializer()

with tf.session() as sess:

init_op.run()

m_conv = sess.run(add_bias,feed_dict=)

print("m after convolution : \n" ,m_conv)

m after convolution :

[[[[ 2.]

[ 9.]

[ 1.]

[ 2.]]

[[ 2.]

[ 15.]

[ 0.]

[ 9.]]

[[ -1.]

[ -7.]

[ 16.]

[ 5.]]

[[ 3.]

[-11.]

[ 20.]

[ -3.]]]]

卷積中的特徵圖大小計算方式有兩種,分別是『valid』和『same』。

1.如果計算方式採用'valid',則:

其中2.如果計算方式採用'same',輸出特徵圖的大小與輸入特徵圖的大小保持不變,

其中padding為特徵圖填充的圈數。

若採用'same'方式,kernel_size=1時,padding=0;kernel_size=3時,padding=1;kernel_size=5時,padding=2,以此類推。

tensorflow 卷積 設定特定卷積核

映象問題 pytorch 自定義卷積核進行卷積 卷積核訂製 有時想用tensorflow的conv2d的卷積操作,實現一些特定的濾波操作,如patch求和 計算梯度等,這時可以通過設計特定的卷積核來實現功能。先看tf.nn.conv2d的各個引數 tf.nn.conv2d input,filter,...

Tensorflow卷積介面總結

這個介面用了這麼久,每次都有點迷惑,這裡做下總結。filter 卷積核引數,shape為 kernel height,kernel width,in channels,out channels 第三維與input的第四維對應,第四維決定了卷積核的個數 stride 步長,一維向量,4個值,其中 0 ...

tensorflow實現卷積與反卷積自編碼框架

從dcgan中了解到了反卷積的操作,所以我本來打算能通過卷積操作作為編碼器將一幀影象轉換為乙個20維的向量,而後再通過反卷積實現解碼功能從而達到影象恢復效果,先把程式貼上,後續有空再調整網路層數和引數吧 from tensorflow.examples.tutorials.mnist import ...