【TensorFlow】理解tf.nn.conv2d方法

方法定義

tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
參數(shù):

input : 輸入的要做卷積的圖片,要求為一個(gè)張量,shape為 [ batch, in_height, in_weight, in_channel ],其中batch為圖片的數(shù)量,in_height 為圖片高度,in_weight 為圖片寬度,in_channel 為圖片的通道數(shù),灰度圖該值為1,彩色圖為3。(也可以用其它值,但是具體含義不是很理解)
filter: 卷積核,要求也是一個(gè)張量,shape為 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 為卷積核高度,filter_weight 為卷積核寬度,in_channel 是圖像通道數(shù) ,和 input 的 in_channel 要保持一致,out_channel 是卷積核數(shù)量。
strides: 卷積時(shí)在圖像每一維的步長,這是一個(gè)一維的向量,[ 1, strides, strides, 1],第一位和最后一位固定必須是1
padding: string類型,值為“SAME” 和 “VALID”,表示的是卷積的形式,是否考慮邊界。"SAME"是考慮邊界,不足的時(shí)候用0去填充周圍,"VALID"則不考慮
use_cudnn_on_gpu: bool類型,是否使用cudnn加速,默認(rèn)為true
import tensorflow as tf
# case 1
# 輸入是1張 3*3 大小的圖片,圖像通道數(shù)是5,卷積核是 1*1 大小,數(shù)量是1
# 步長是[1,1,1,1]最后得到一個(gè) 3*3 的feature map
# 1張圖最后輸出就是一個(gè) shape為[1,3,3,1] 的張量
input = tf.Variable(tf.random_normal([1,3,3,5]))
filter = tf.Variable(tf.random_normal([1,1,5,1]))
op1 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='SAME')


# case 2
# 輸入是1張 3*3 大小的圖片,圖像通道數(shù)是5,卷積核是 2*2 大小,數(shù)量是1
# 步長是[1,1,1,1]最后得到一個(gè) 3*3 的feature map
# 1張圖最后輸出就是一個(gè) shape為[1,3,3,1] 的張量 
input = tf.Variable(tf.random_normal([1,3,3,5]))
filter = tf.Variable(tf.random_normal([2,2,5,1]))
op2 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='SAME')

# case 3  
# 輸入是1張 3*3 大小的圖片,圖像通道數(shù)是5,卷積核是 3*3 大小,數(shù)量是1
# 步長是[1,1,1,1]最后得到一個(gè) 1*1 的feature map (不考慮邊界)
# 1張圖最后輸出就是一個(gè) shape為[1,1,1,1] 的張量
input = tf.Variable(tf.random_normal([1,3,3,5]))  
filter = tf.Variable(tf.random_normal([3,3,5,1]))  
op3 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID') 
 
# case 4
# 輸入是1張 5*5 大小的圖片,圖像通道數(shù)是5,卷積核是 3*3 大小,數(shù)量是1
# 步長是[1,1,1,1]最后得到一個(gè) 3*3 的feature map (不考慮邊界)
# 1張圖最后輸出就是一個(gè) shape為[1,3,3,1] 的張量
input = tf.Variable(tf.random_normal([1,5,5,5]))  
filter = tf.Variable(tf.random_normal([3,3,5,1]))  
op4 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')  

# case 5  
# 輸入是1張 5*5 大小的圖片,圖像通道數(shù)是5,卷積核是 3*3 大小,數(shù)量是1
# 步長是[1,1,1,1]最后得到一個(gè) 5*5 的feature map (考慮邊界)
# 1張圖最后輸出就是一個(gè) shape為[1,5,5,1] 的張量
input = tf.Variable(tf.random_normal([1,5,5,5]))  
filter = tf.Variable(tf.random_normal([3,3,5,1]))  
op5 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')  

# case 6 
# 輸入是1張 5*5 大小的圖片,圖像通道數(shù)是5,卷積核是 3*3 大小,數(shù)量是7
# 步長是[1,1,1,1]最后得到一個(gè) 5*5 的feature map (考慮邊界)
# 1張圖最后輸出就是一個(gè) shape為[1,5,5,7] 的張量
input = tf.Variable(tf.random_normal([1,5,5,5]))  
filter = tf.Variable(tf.random_normal([3,3,5,7]))  
op6 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')  

# case 7  
# 輸入是1張 5*5 大小的圖片,圖像通道數(shù)是5,卷積核是 3*3 大小,數(shù)量是7
# 步長是[1,2,2,1]最后得到7個(gè) 3*3 的feature map (考慮邊界)
# 1張圖最后輸出就是一個(gè) shape為[1,3,3,7] 的張量
input = tf.Variable(tf.random_normal([1,5,5,5]))  
filter = tf.Variable(tf.random_normal([3,3,5,7]))  
op7 = tf.nn.conv2d(input, filter, strides=[1, 2, 2, 1], padding='SAME')  

# case 8  
# 輸入是10 張 5*5 大小的圖片,圖像通道數(shù)是5,卷積核是 3*3 大小,數(shù)量是7
# 步長是[1,2,2,1]最后每張圖得到7個(gè) 3*3 的feature map (考慮邊界)
# 10張圖最后輸出就是一個(gè) shape為[10,3,3,7] 的張量
input = tf.Variable(tf.random_normal([10,5,5,5]))  
filter = tf.Variable(tf.random_normal([3,3,5,7]))  
op8 = tf.nn.conv2d(input, filter, strides=[1, 2, 2, 1], padding='SAME')  
  
init = tf.initialize_all_variables() 
with tf.Session() as sess:
    sess.run(init)
    print('*' * 20 + ' op1 ' + '*' * 20)
    print(sess.run(op1))
    print('*' * 20 + ' op2 ' + '*' * 20)
    print(sess.run(op2))
    print('*' * 20 + ' op3 ' + '*' * 20)
    print(sess.run(op3))
    print('*' * 20 + ' op4 ' + '*' * 20)
    print(sess.run(op4))
    print('*' * 20 + ' op5 ' + '*' * 20)
    print(sess.run(op5))
    print('*' * 20 + ' op6 ' + '*' * 20)
    print(sess.run(op6))
    print('*' * 20 + ' op7 ' + '*' * 20)
    print(sess.run(op7))
    print('*' * 20 + ' op8 ' + '*' * 20)
    print(sess.run(op8))
————————————————
版權(quán)聲明:本文為CSDN博主「左理想fisher」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zuolixiangfisher/article/details/80528989
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容