最近在研究學習TensorFlow,在作識別手寫數字的demo時,遇到了tf.nn.conv2d這個方法,查閱了官網的API 發現講得比較簡略,仍是沒理解。google了一下,參考了網上一些朋友寫得博客,結合本身的理解,差很少整明白了。python
tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)api
import tensorflow as tf # case 1 # 輸入是1張 3*3 大小的圖片,圖像通道數是5,卷積核是 1*1 大小,數量是1 # 步長是[1,1,1,1]最後獲得一個 3*3 的feature map # 1張圖最後輸出就是一個 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 大小的圖片,圖像通道數是5,卷積核是 2*2 大小,數量是1 # 步長是[1,1,1,1]最後獲得一個 3*3 的feature map # 1張圖最後輸出就是一個 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 大小的圖片,圖像通道數是5,卷積核是 3*3 大小,數量是1 # 步長是[1,1,1,1]最後獲得一個 1*1 的feature map (不考慮邊界) # 1張圖最後輸出就是一個 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 大小的圖片,圖像通道數是5,卷積核是 3*3 大小,數量是1 # 步長是[1,1,1,1]最後獲得一個 3*3 的feature map (不考慮邊界) # 1張圖最後輸出就是一個 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 大小的圖片,圖像通道數是5,卷積核是 3*3 大小,數量是1 # 步長是[1,1,1,1]最後獲得一個 5*5 的feature map (考慮邊界) # 1張圖最後輸出就是一個 shape爲[1,5,5,1] 的張量 input